Pertama yang perlu diketahui adalah user yang digunakan oleh docker image, cara termudah untuk mengetahuinya adalah dengan mengeksekusi id, perintah id bisanya sudah ada dalam docker image. Beberapa contoh
docker run debian id docker run ubuntu id docker run fedora id docker run alpine id
dari ke empat docker image tersebut sama-sama menggunakan user root
uid=0(root) gid=0(root) groups=0(root)
Kita asumsikan anda menggunakan user app dengan uid 1000 dan group appgroup dengan gid 1000.
1. Update existing user
1. usermod and groupmod
Bila docker image memiliki usermod
dan groupmod
, untuk user dan group yang sudah ada, tambahkan di Dockerfile
usermod -u 10000 app && groupmod -g 10000 appgroup
perintah diatas akan mengupdate uid user app menjadi 10000 dan group appgroup menjadi 10000. Untuk pengguna Alpine Linux, perlu menginstall shadow
(apk --no-cache add shadow
) terlebih dahulu
Untuk contoh kita menggunakan image haproxy:lts-alpine
. Pertama mari kita cek, user dan group yang digunakan
$ docker run haproxy:lts-alpine id uid=99(haproxy) gid=99(haproxy) groups=99(haproxy)
Anggap Dockerfile yang kita miliki, seperti pada baris dibawah ini
FROM haproxy:lts-alpine COPY haproxy.cfg /usr/local/etc/haproxy/haproxy.cfg
update menjadi
FROM haproxy:lts-alpine COPY haproxy.cfg /usr/local/etc/haproxy/haproxy.cfg USER root RUN apk --no-cache add shadow RUN usermod -u 10000 haproxy && groupmod -g 10000 haproxy USER haproxy
build docker diatas, mari kita berinama haproxy-dev2
docker build . -t haproxy-dev1 # cek uid dan group id dengan docker run haproxy-dev1 id
setelah selesai di-build, cek user dan group user haproxy
2. Pilihan terakhir sed
Bila tidak ada usermod dan tidak ada pilihan untuk update Docker image, maka pilihan terakhir kita adalah update file /etc/passwd
dan /etc/group
manual
sed -i 's/1000/10000/g' /etc/passwd /etc/group
Sebagai contoh, mari kita gunakan kembali Dockerfile diatas
FROM haproxy:lts-alpine COPY haproxy.cfg /usr/local/etc/haproxy/haproxy.cfg
ubah menjadi
FROM haproxy:lts-alpine COPY haproxy.cfg /usr/local/etc/haproxy/haproxy.cfg USER root RUN sed -i 's/99/10000/g' /etc/passwd /etc/group USER haproxy
build, lalu cek user dan group id haproxy
docker build . -t haproxy-dev2 # cek uid dan group id dengan docker run haproxy-dev2 id
2. Buat user baru
Dalam penggunaan image docker, sangat disarankan untuk menggunakan user dengan privileges/hak akses yang terbatas. Bila anda menggunakan distro sebagai base image, biasanya user default adalah root
, untuk itu mari kita buat contoh menambah/membuat user di docker image.
1. adduser dan addgroup
adduser dan groupadd biasanya digunakan di BusyBox atau Alpine
addgroup appgroup -g 10000 && adduser -D -h /app -G appgroup -u 10000 app
Contoh file Dockerfile Alpine Linux
FROM alpine:3 RUN addgroup appgroup -g 10000 && adduser -D -h /app -G appgroup -u 10000 app USER app
build, lalu jalankan
$ docker build . -t test-user1 # cek user dan group $ docker run test-user1 id uid=10000(app) gid=10000(appgroup) groups=10000(appgroup)
2. useradd dan groupadd
alternative lainnya adalah menggunakan useradd dan groupadd
groupadd -g 10000 appgroup && useradd -u 10000 -g appgroup -m -d /app app
Contoh file Dockerfile Ubuntu
FROM ubuntu:jammy RUN groupadd -g 10000 appgroup && useradd -u 10000 -g appgroup -m -d /app app USER app
build, lalu jalankan
$ docker build . -t test-user2 # cek user dan group $ docker run test-user2 id uid=10000(app) gid=10000(appgroup) groups=10000(appgroup)