Deploy Private Docker Registry di Server Ubuntu 18.04
Deploy Private Docker Registry di Ubuntu 18.04. Di tutorial ini saya akan sharing mengenai bagaiman acara private docker registry di server Ubuntu. Docker registry adalah aplikasi yang mengelola dan menyimpan docker images. Hal ini berguna untuk memudahkan developer/sysadmin dalam proses deploy karena tidak perlu lagi melakukan build image setiap ingin melakukan deploy.
Docker sendiri menyediakan public Docker Registry bernama Docker Hub. Namun jika kasusnya adalah kalian membuild image yang tidak seharusnya bisa diakses oleh publik, solusinya adalah membuat server Docker Registry sendiri. Di tutorial ini saya akan share bagaimana cara men-deploy private Docker Registry di server Ubuntu 18.04, dengan docker-compose dan juga Nginx sebagai reverse proxy-nya.
Sebelum memulai tutorial ini, pastikan kalian sudah menginstall docker, docker- compose, dan Nginx di server Ubuntu 18.04 kalian.
Install Docker CE dan Docker Compose
Oke langsung saja ya…
sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update && sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose
sudo usermod -aG docker $(whoami)
Setup Container Docker Registry
Buat direktori untuk menyimpan file konfigurasi maupun data dari docker registry.
mkdir docker-registry && cd $_
Didalam direktori docker-registry kita buat lagi dir data dan auth.
mkdir {data,auth}
Selanjutnya adalah mengatur autentifikasi. Disini kita gunakan http auth.
sudo apt install apache2-utils
cd auth
htpasswd -Bc .registry_auth username
.registry_auth adalah nama file passwd-nya, sementara untuk username silahkan sesuaikan sendiri. Untuk enkripsinya, docker registry hanya menerima bcrypt encryption, jadi kita tambahkan flag B.
Setelah file auth ditambahkan, sekarang kita buat file docker-composenya. Balik lagi ke direktori docker-registry lalu buat file docker-compose.yml. Isinya:
version: '3'
services:
registry:
image: registry:2.7.1
container_name: docker-registry
restart: always
ports:
- "127.0.0.1:5000:5000"
environment:
REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /data
REGISTRY_AUTH: htpasswd
REGISTRY_AUTH_HTPASSWD_REALM: Registry
REGISTRY_AUTH_HTPASSWD_PATH: /auth/.registry_auth
volumes:
- ./auth:/auth
- ./data:/data
Untuk exposing port nya silahkan kalian sesuaikan sendiri.
Tinggal kita jalankan container docker-registry dengan command
docker-compose up -d
Jika tidak ada error, docker-registry akan berjalan di 127.0.0.1:5000. Tinggal kita expose lewat Nginx dengan fitur reverse proxy mereka. Berikut pengaturan vhost Nginx yang saya gunakan. Silahkan sesuaikan sendiri.
server {
listen 80;
server_name registry.linuxsec.org;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name registry.linuxsec.org;
server_tokens off;
ssl_protocols TLSv1.2 TLSv1.3; # TLS 1.3 requires nginx >= 1.13.0
ssl_prefer_server_ciphers on;
ssl_dhparam /etc/ssl/certs/dhparam.pem; # openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM";
ssl_ecdh_curve secp384r1; # Requires nginx >= 1.1.0
ssl_session_timeout 10m;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off; # Requires nginx >= 1.5.9
ssl_stapling on; # Requires nginx >= 1.3.7
ssl_stapling_verify on; # Requires nginx => 1.3.7
ssl_early_data off; # 0-RTT, enable if desired - Requires nginx >= 1.15.4
resolver 1.1.1.1 valid=300s; # Replace with your local resolver
resolver_timeout 10s;
# HTTP Security Headers
ssl_certificate /etc/nginx/ssl-cert/linuxsec/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl-cert/linuxsec/privkey.pem;
root /var/www/registry;
access_log /var/log/nginx/registry_access.log;
error_log /var/log/nginx/registry_error.log warn;
index index.html;
client_max_body_size 2000M;
location / {
proxy_pass http://localhost:5000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_pass_request_headers on;
}
# Allow Let's Encrypt
location ~ /.well-known {
allow all;
}
}
Untuk SSLnya, kalian bisa gunakan Let’s Encrypt.
Push Image ke Docker Registry
Setelah docker registry kalian berjalan, kalian bisa mulai menyimpan image di server private docker registry tersebut.
Pertama, login ke docker registry dengan command
docker login https://registry.domain.com
Masukkan username dan password yang sudah kalian atur menggunakan htpasswd saat melakukan deploy server Docker Registry diatas.
Selanjutnya, tambahkan tag image pada image yang ada di local. Misalnya:
docker tag private-vpn registry.domain.com/private-vpn
Lalu push image tersebut ke server private docker registry.
docker push registry.domain.com/private-vpn
Pull Image dari Docker Registry
Untuk pull image dari client juga gampang. Pertama, login ke docker registry
docker login https://registry.domain.com
Lalu tinggal pull image yang ada di docker-registry. Contoh:
docker pull registry.domain.com/private-vpn
Oke mungkin sekian tutorial singkat kali ini, semoga bermanfaat. Jika ada yang ingin ditanyakan silahkan tinggalkan komentar.

Komentar