Soal dapat dilihat di https://itnsa.id/.
Ketentuan Soal
- Access srv1.artemis.local to do tasks in this section
- Container Name : proteus-registry
- Use image registry:2.7.0 from docker hub
- Volume mounts : /mnt/registry to /var/lib/registry
- Expose container port 1234
- Eanble https by using local self-signed CA
- Generate CA using openssl
- Common name : srv1.artemis.local
- Country : ID
- Organizational : ITNSA-CA
- Enable basic authentication with following credentials :
- Username: devops
- Password: lksn2022
- Make sure it’s accessible from srv2.artemis.local server
Pembahasan
Pembahasannya akan saya lakukan dengan beberapa urutan sebagai berikut:
- Generate CA
- Import CA
- Enable basic authentication
- Create container
- Testing
Persiapan
mkdir -p local-registry/{certs,auth} cd local-registry/
Generate CA
- Eanble https by using local self-signed CA
- Generate CA using openssl
- Common name : srv1.artemis.local
- Country : ID
- Organizational : ITNSA-CA
Generate self-signed certificate dengan openssl. Untuk hal ini bebas caranya seperti apa, saya menggunakan cara dibawah ini.
openssl genrsa -out certs/server.key openssl req -new -x509 -subj "/C=ID/O=ITNSA-CA/CN=srv1.artemis.local" -addext "subjectAltName = DNS:srv1.artemis.local" -key certs/server.key -out certs/server.crt
Country, Organization, dan Common Name alternatif lainnya bisa diubah di /etc/ssl/openssl.cnf
Import CA
Selanjutnya import self-signed certificate yang sudah dibuat. Importnya bisa dengan 2 cara.
mkdir -p /etc/docker/certs.d/srv1.artemis.local:1234 cp certs/server.crt /etc/docker/certs.d/srv1.artemis.local\:1234/ systemctl restart docker
atau
cp local-registry/certs/server.crt /usr/local/share/ca-certificates/ update-ca-certificates
Enable Basic Authentication
- Enable basic authentication with following credentials :
- Username: devops
- Password: lksn2022
Kemudian bikin user untuk local registry memerlukan paket apache2-utils untuk generate passwordnya dengan menggunakan command htpasswd.
sudo apt install apache2-utils -y htpasswd -Bbc auth/htpasswd devops lksn2022
Create Container
- Container Name : proteus-registry
- Use image registry:2.7.0 from docker hub
- Volume mounts : /mnt/registry to /var/lib/registry
- Expose container port 1234
Tinggal running containernya deh.
docker run -d -p 1234:5000 --restart=always --name proteus-registry \ -v /mnt/registry:/var/lib/registry \ -v "$(pwd)"/auth:/auth \ -e "REGISTRY_AUTH=htpasswd" \ -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \ -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \ -v "$(pwd)"/certs:/certs \ -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/server.crt \ -e REGISTRY_HTTP_TLS_KEY=/certs/server.key \ registry:2.7.0
Catatan untuk $(pwd) bisa disesuaikan dengan lokasi shell yang aktif atau bisa diubah dengan /root/local-registry/auth dan /root/local-registry/certs.
Command diatas sepertinya tidak perlu saya jelaskan karena bisa membacanya sendiri di https://docs.docker.com/registry/deploying/.
Testing
Pada srv1 bisa dicoba dengan login.
docker login srv1.artemis.local:1234
- Make sure it’s accessible from srv2.artemis.local server
Poin terakhir dapat diselesaikan dengan copy CA dari srv1 ke srv2 lalu import CA di srv2 kemudian srv2 bisa login dan menggunakan secure local registry.
Permisi min, dari soalnya docker nya running di sistem operasi debian atau ubuntu ya?