Pendahuluan
Jika Anda ingin memastikan pengembangan CI/CD yang lancar menggunakan platform Docker, pertimbangkan untuk menyiapkan registri Docker pribadi. Tidak hanya mempercepat pengiriman, tetapi juga merupakan cara praktis untuk mendistribusikan sumber daya dan berbagi gambar Docker di antara container.
Dalam tutorial ini, pelajari cara menyiapkan registri Docker pribadi dan mengonfigurasinya untuk aksesibilitas eksternal.
Prasyarat
- Akses ke akun pengguna dengan sudo atau akar hak istimewa
- Server klien
- Server untuk Docker Registry pribadi
- Pekerja Buruh dan Docker–Tulis di kedua server
- Nginx di server Docker Registry pribadi
Apa itu Registri Docker Pribadi
Registry Docker adalah aplikasi sisi server dan bagian dari produk platform-as-a-service Docker. Ini memungkinkan Anda untuk menyimpan semua gambar Docker secara lokal ke dalam satu lokasi terpusat.
Saat Anda menyiapkan registri pribadi, Anda menetapkan server untuk berkomunikasi dengan Docker Hub melalui internet. Peran server adalah untuk menarik dan mendorong gambar, menyimpannya secara lokal, dan membagikannya di antara host Docker lainnya.
Dengan menjalankan registri yang dapat diakses secara eksternal, Anda dapat menghemat sumber daya yang berharga dan mempercepat proses. Perangkat lunak ini memungkinkan Anda mengambil gambar tanpa harus terhubung ke Docker Hub, menghemat bandwidth, dan mengamankan sistem dari potensi ancaman online.
Host Docker dapat mengakses repositori lokal melalui koneksi yang aman dan menyalin image dari registri lokal untuk membuat container mereka sendiri.
Sebelum Anda Mulai
Seperti yang tercantum di bagian prasyarat, panduan ini mengasumsikan Anda sudah menginstal Docker dan Docker-Compose di semua server.
Untuk memverifikasi bahwa Anda memiliki perangkat lunak yang diperlukan, Anda dapat memeriksa versi rilisnya dengan perintah:
docker version
docker-compose version
Hal lain yang ingin Anda pastikan adalah bahwa layanan Docker telah dimulai dan diatur untuk diaktifkan saat boot:
sudo systemctl start docker
sudo systemctl enable docker
Instal dan Konfigurasikan Registri Docker Pribadi
Langkah 1:Buat Direktori Registri
Mulai mengkonfigurasi server yang akan menjadi tuan rumah registri pribadi. Pertama-tama Anda ingin membuat direktori baru yang akan menyimpan semua file konfigurasi yang diperlukan.
1. Perintah berikut membuat direktori proyek baru berlabel registry
dan dua sub-direktori - nginx
dan auth
:
mkdir -p registry/{nginx, auth}
2. Pindah ke registry
dan buat dua direktori baru di dalam nginx
:
cd registry/
mkdir -p nginx/{conf.d/,ssl}
3. Lihat hierarki direktori yang baru dibuat dengan mengetik:
tree
Langkah 2:Buat Skrip Tulis-Docker dan Tetapkan Layanan
Selanjutnya, Anda perlu membuat dan mengonfigurasi docker-compose.yml
baru naskah. Script mendefinisikan versi Docker-Compose, serta layanan yang Anda perlukan untuk menyiapkan registri pribadi.
1. Buat file baru, saat berada di registry
direktori, dengan editor teks pilihan Anda:
nano docker-compose.yml
2. Ada beberapa hal yang perlu Anda definisikan dalam file konfigurasi ini, jadi ikuti dengan cermat dan hati-hati tambahkan setiap bagian konten:
version: '3'
services:
#Registry
registry:
image: registry:2
restart: always
ports:
- "5000:5000"
environment:
REGISTRY_AUTH: htpasswd
REGISTRY_AUTH_HTPASSWD_REALM: Registry-Realm
REGISTRY_AUTH_HTPASSWD_PATH: /auth/registry.passwd
REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /data
volumes:
- registrydata:/data
- ./auth:/auth
networks:
- mynet
#Nginx Service
nginx:
image: nginx:alpine
container_name: nginx
restart: unless-stopped
tty: true
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx/conf.d/:/etc/nginx/conf.d/
- ./nginx/ssl/:/etc/nginx/ssl/
networks:
- mynet
#Docker Networks
networks:
mynet:
driver: bridge
#Volumes
volumes:
registrydata:
driver: local
3. Simpan dan tutup file.
Konfigurasi dijelaskan:
Pertama, Anda menentukan versi Docker-Compose yang ingin Anda gunakan. Dalam contoh ini, ini adalah version: '3'
. Kemudian Anda melanjutkan untuk mendefinisikan semua komponen registri Docker, dimulai dengan #Registry
layanan.
Docker Registry pada dasarnya adalah wadah yang menjalankan image registry, itulah sebabnya image didefinisikan sebagai registry:2
.
Menambahkan restart: always
line memastikan Anda memulai Docker Registry sebagai layanan segera setelah Anda mem-boot sistem.
Menentukan port 5000:5000
menginstruksikan Docker bahwa host dan container yang sedang berjalan berkomunikasi melalui nomor port yang ditentukan.
Layanan akan memasang volume buruh pelabuhan registrydata
dan direktori lokal auth
, beserta file autentikasinya registry.passwd
.
Elemen selanjutnya adalah #Nginx Service
. Konfigurasi menguraikan layanan berjalan pada port 80:80
(HTTPS) dan 443:443
(HTTP). Ini akan me-mount direktori lokal untuk konfigurasi virtual (conf.d
) dan sertifikat SSL (ssl
).
Terakhir, setel mynet
dengan driver jembatan dan registrydata
dengan driver lokal sebagai parameter untuk jaringan kustom.
Langkah 3:Siapkan Penerusan Port Nginx
Langkah selanjutnya adalah mengonfigurasi virtual host Nginx dan mengonfigurasinya untuk layanan Nginx.
1. Pindah ke nginx/conf.d/
direktori yang Anda buat pada langkah sebelumnya:
cd nginx/conf.d/
2. Buat file host virtual baru bernama registry.conf
:
nano registry.conf
3. Tambahkan konten berikut:
upstream docker-registry {
server registry:5000;
}
server {
listen 80;
server_name registry.example-server.com;
return 301 https://registry.example-server.com$request_uri;
}
server {
listen 443 ssl http2;
server_name registry.example-server.com;
ssl_certificate /etc/nginx/ssl/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/privkey.pem;
# Log files for Debug
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
location / {
# Do not allow connections from docker 1.5 and earlier
# docker pre-1.6.0 did not properly set the user agent on ping, catch "Go *" user agents
if ($http_user_agent ~ "^(docker\/1\.(3|4|5(?!\.[0-9]-dev))|Go ).*$" ) {
return 404;
}
proxy_pass http://docker-registry;
proxy_set_header Host $http_host;
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_read_timeout 900;
}
}
4. Simpan file dan kembali ke shell terminal.
Langkah 4:Tingkatkan Ukuran Unggahan File Nginx
Secara default, Nginx membatasi ukuran unggahan file hingga 1MB . Karena banyak gambar Docker melebihi jumlah ini, praktik terbaiknya adalah meningkatkan ukuran file maksimum di Nginx. Pastikan Anda dapat mengunggah gambar dengan ukuran file yang lebih besar dengan menyetel max_body_size
menjadi 2GB .
1. Buat file konfigurasi tambahan dengan:
nano additional.conf
2. Tambahkan baris berikut ke dalam file:
client_max_body_size 2G;
3. Simpan dan tutup file.
Langkah 5:Konfigurasi Sertifikat SSL dan Otentikasi Dasar
1. File sertifikat SSL domain Anda harus disalin ke ssl
direktori. Untuk melakukannya, jalankan perintah:
cp /path/to/ssl/fullchain.pem ssl/
cp /path/to/ssl/privkey.pem ssl/
2. Kemudian, pindah ke auth
direktori:
cd auth
3. Dan minta file kata sandi baru bernama registry.passwd
untuk pengguna Anda:
htpasswd -Bc registry.passwd example
4. Ketikkan kata sandi yang kuat dan ketik ulang untuk mengonfirmasi. Dengan ini, Anda telah menambahkan kata sandi untuk pengguna Anda.
Langkah 6:Tambahkan Sertifikat CA Root
Sekarang Anda perlu menambahkan sertifikat Root CA ke Docker dan sistem yang sedang Anda kerjakan.
1. Ekspor .crt
file dengan OpenSSL dengan mengetik:
openssl x509 -in rootCA.pem -inform PEM -out rootCA.crt
2. Salin sertifikat Root ke direktori baru untuk sertifikat Docker:
mkdir -p /etc/docker/certs.d/registry.example-server.com/
cp rootCA.crt /etc/docker/certs.d/example-server.com/
3. Selanjutnya, salin sertifikat yang sama ke direktori baru lainnya dengan nama /usr/share/ca-certificate/extra
:
mkdir -p .usr.share.ca-certificates/extra/
cp rootCA.crt /usr/share/ca-certificates/extra/
4. Konfigurasi ulang ca-certificate
. yang baru dibuat paket dengan mengetik:
dpkg-reconfigure ca-certificates
5. Terakhir, restart layanan Docker:
systemctl restart docker
Langkah 7:Jalankan Registri Docker
Dengan semua yang telah disiapkan dan siap, Anda dapat membuat container Docker Registry menggunakan Docker-Compose:
docker-compose up -d
Periksa apakah Registry dan layanan Nginx berjalan:
docker-compose ps
netstat -plntu
Outputnya akan menunjukkan kepada Anda layanan dan port yang ditetapkan untuknya.
Tarik Gambar dari Docker Hub ke Registri Pribadi
1. Untuk menyimpan gambar secara lokal dari Docker Hub ke registri pribadi Anda, gunakan docker pull
perintah:
docker pull [docker_image]
2. Tambahkan tag ke gambar untuk memberi label pada registri pribadi:
docker image tag [docker_image] registry.example-server.com/[new_image_name]
3. Anda dapat memeriksa apakah image Docker tersedia secara lokal dengan meminta sistem untuk membuat daftar semua image yang disimpan secara lokal:
docker images
Cara Mendorong Gambar Docker ke Registri Pribadi
1. Untuk mendorong gambar dari host Docker ke server registri Docker pribadi, Anda harus terlebih dahulu masuk ke registri dengan perintah:
docker login https://registry.example-server.com/v2/
2. Ketik nama pengguna dan sandi yang Anda tetapkan untuk virtual host.
3. Sekarang Anda dapat mendorong gambar Anda ke registri pribadi dengan perintah:
docker push registry.example-server.com/[new_image_name]
4. Lihat daftar gambar yang disimpan di registri Docker pribadi:
http -a example https://registry.example-server.com/v2/_catalog