INDO GLOBAL PRATAMA
The world in your hands
Perkenalan
Jika Anda ingin memastikan kelancaran pengembangan CI/CD 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 kontainer.
Dalam tutorial ini, pelajari cara menyiapkan registri Docker pribadi dan mengonfigurasinya untuk aksesibilitas eksternal.
Prasyarat
Docker Registry adalah aplikasi sisi server dan bagian dari produk platform-as-a-service Docker. Ini memungkinkan Anda untuk menyimpan secara lokal semua gambar Docker Anda ke dalam satu lokasi terpusat.
Saat Anda menyiapkan registri pribadi, Anda menetapkan server untuk berkomunikasi dengan Docker Hub melalui internet. Peran server adalah 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 berharga dan mempercepat proses. Perangkat lunak ini memungkinkan Anda menarik 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 registry lokal untuk membangun container mereka sendiri.
Seperti yang tercantum di bagian prasyarat, panduan ini menganggap 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
Catatan : Jika Anda memerlukan bantuan untuk menginstal Docker di sistem Anda, Anda dapat merujuk ke panduan kami untuk menyiapkan Docker di Debian , CentOS 7 , atau Ubuntu 18.04 .
Mulai mengonfigurasi server yang akan menghosting 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 subdirektori – nginx
dan auth
:
mkdir -p registry/{nginx, auth}
2. Pindah ke registry
dan buat dua direktori baru di dalamnya nginx
:
cd registry/
mkdir -p nginx/{conf.d/,ssl}
3. Lihat hierarki direktori yang baru dibuat dengan mengetik:
tree
Selanjutnya, Anda perlu membuat dan mengonfigurasi docker-compose.yml
skrip baru. Skrip menentukan 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 tentukan 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 menjelaskan:
Pertama, Anda menentukan versi Docker-Compose yang ingin Anda gunakan. Dalam contoh ini adalah version: '3'
. Kemudian Anda beralih ke mendefinisikan semua komponen registri Docker, dimulai dengan layanan #Registry
.
Docker Registry pada dasarnya adalah wadah yang menjalankan citra registri, itulah sebabnya citra tersebut didefinisikan sebagai registry:2
.
Menambahkan restart: always
baris memastikan Anda memulai Docker Registry sebagai layanan segera setelah Anda mem-boot sistem.
Menentukan port 5000:5000
menginstruksikan Docker bahwa host dan container yang berjalan berkomunikasi melalui nomor port yang ditentukan.
Layanan ini akan me-mount volume buruh pelabuhan registrydata
dan direktori lokal auth
, bersama dengan file autentikasinya registry.passwd
.
Elemen berikutnya adalah #Nginx Service
. Konfigurasi menguraikan layanan berjalan pada port 80:80
(HTTPS) dan 443:443
(HTTPS). Ini akan memasang direktori lokal untuk konfigurasi virtual ( conf.d
) dan sertifikat SSL ( ssl
).
Terakhir, atur mynet
dengan driver jembatan dan registrydata
dengan driver lokal sebagai parameter untuk jaringan kustom.
Langkah selanjutnya adalah mengonfigurasi host virtual 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 virtual host 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 terminal shell.
Secara default, Nginx membatasi ukuran unggahan file menjadi 1MB . Karena banyak gambar Docker melebihi angka ini, praktik terbaiknya adalah meningkatkan ukuran file maksimum di Nginx. Pastikan Anda dapat mengupload gambar dengan ukuran file yang lebih besar dengan menyetelnya max_body_size
ke 2GB .
1. Buat file konfigurasi tambahan dengan:
nano additional.conf
2. Tambahkan baris berikut di file:
client_max_body_size 2G;
3. Simpan dan tutup file.
1. File sertifikat SSL domain Anda perlu 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 yang dinamai registry.passwd
untuk pengguna Anda:
htpasswd -Bc registry.passwd example
4. Ketik kata sandi yang kuat dan ketik ulang untuk konfirmasi. Dengan ini, Anda telah menambahkan kata sandi untuk pengguna Anda.
Catatan : Jika Anda belum memiliki sertifikat, lihat cara membuat permintaan penandatanganan sertifikat openSSL .
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
paket yang baru dibuat dengan mengetik:
dpkg-reconfigure ca-certificates
5. Terakhir, mulai ulang layanan Docker:
systemctl restart docker
Dengan semua yang sudah diatur dan siap, Anda dapat membangun wadah Docker Registry menggunakan Docker-Compose:
docker-compose up -d
Periksa apakah Registry dan layanan Nginx sedang berjalan:
docker-compose ps
netstat -plntu
Outputnya akan menunjukkan kepada Anda layanan dan port yang ditugaskan.
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 melabelinya untuk 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 mencantumkan semua image yang disimpan secara lokal:
docker images
1. Untuk mendorong gambar dari host Docker ke server registri Docker pribadi, pertama-tama Anda harus masuk ke registri dengan perintah:
docker login https://registry.example-server.com/v2/
2. Ketikkan nama pengguna dan kata sandi yang Anda tetapkan untuk host virtual.
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
Kesimpulan
Anda sekarang telah berhasil menyiapkan registri Docker pribadi di Ubuntu 18.04, bersama dengan host virtual Nginx dan autentikasi dasar. Gunakan itu untuk mengelola citra Docker dan membuat kontainer di host Docker jarak jauh.