Menyiapkan Docker Registry di Rocky Linux 8/AlmaLinux 8
Registry Docker adalah sistem penyimpanan dan pengiriman konten yang menyimpan gambar Docker bernama, tersedia dalam berbagai versi yang diberi tag. Pengguna yang menggunakan Docker berinteraksi dengan registry menggunakan perintah docker push dan docker pull. Terkadang lebih masuk akal untuk menyimpan gambar Docker di registry lokal daripada mendorongnya ke Docker hub. Dalam panduan ini, kami akan menyiapkan Registry Docker Pribadi di Rocky/AlmaLinux 8 yang diamankan dengan Sertifikat SSL Let’s Encrypt.
Anda akan menghemat banyak bandwidth untuk tim besar dan menjaga gambar yang tidak ingin Anda publikasikan tetap aman. Membuat registry Docker lokal hanyalah masalah mengikuti beberapa langkah. Untuk instalasi Docker pada distribusi yang berbeda, lihat Cara menginstal Docker CE di Sistem Linux.
Pasang Docker Engine
Kita membutuhkan Docker Engine untuk menjalankan layanan registry. Perbarui sistem Anda sebelum menginstalnya.
sudo yum -y updateJalankan perintah di bawah ini untuk menginstal Docker CE.
sudo curl -o /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo Kemudian pasang paket Docker CE dan plugin Compose.
sudo yum -y install docker-ce docker-ce-cli containerd.io
Jika Anda ingin menggunakan Docker sebagai pengguna non-root, Anda sekarang sebaiknya mempertimbangkan untuk menambahkan pengguna Anda ke grup docker:
sudo usermod -aG docker $USER
newgrp dockerJalankan perintah di bawah ini untuk melihat versi docker yang terpasang.
$ docker --version
Docker version 26.1.3, build b72abbbMulai dan aktifkan layanan docker:
sudo systemctl enable --now dockerStatus harus berjalan:
$ systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
Active: active (running) since Sat 2024-07-13 19:53:19 UTC; 4s ago
Docs: https://docs.docker.com
Main PID: 17832 (dockerd)
Tasks: 7
Memory: 30.4M
CGroup: /system.slice/docker.service
└─17832 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
Jul 13 19:53:19 rocky8.cloudspinx.com systemd[1]: Starting Docker Application Container Engine...
Jul 13 19:53:19 rocky8.cloudspinx.com dockerd[17832]: time="2024-07-13T19:53:19.316260221Z" level=info msg="Starting up"
Jul 13 19:53:19 rocky8.cloudspinx.com dockerd[17832]: time="2024-07-13T19:53:19.340012039Z" level=info msg="Loading containers: start."
Jul 13 19:53:19 rocky8.cloudspinx.com dockerd[17832]: time="2024-07-13T19:53:19.621507107Z" level=info msg="Loading containers: done."
Jul 13 19:53:19 rocky8.cloudspinx.com dockerd[17832]: time="2024-07-13T19:53:19.644692641Z" level=info msg="Docker daemon" commit=8e96db1 containerd-snapshotter=false storage-driver=overlay2 versio>
Jul 13 19:53:19 rocky8.cloudspinx.com dockerd[17832]: time="2024-07-13T19:53:19.644783862Z" level=info msg="Daemon has completed initialization"
Jul 13 19:53:19 rocky8.cloudspinx.com dockerd[17832]: time="2024-07-13T19:53:19.671038318Z" level=info msg="API listen on /run/docker.sock"
Jul 13 19:53:19 rocky8.cloudspinx.com systemd[1]: Started Docker Application Container Engine.
[root@rocky8 ~]#Hasilkan Sertifikat SSL Let’s Encrypt
Seperti yang dijanjikan sebelumnya, kita akan menggunakan Sertifikat SSL Let’s Encrypt untuk mengamankan pengaturan Docker Registry kita yang berjalan di Rocky/AlmaLinux.
Instal alat certbot yang akan digunakan untuk meminta sertifikat Let’s Encrypt.
sudo yum -y install epel-release
sudo yum -y install certbotPermintaan sertifikat SSL:
export DOMAIN="registry.domain.com"
export EMAIL="[email "
certbot certonly --standalone -d $DOMAIN --preferred-challenges http --agree-tos -n -m $EMAIL --keep-until-expiringOutput yang diharapkan dari pembuatan sertifikat:
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator standalone, Installer None
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for registry.computingforgeeks.com
Waiting for verification...
Cleaning up challenges
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/registry.computingforgeeks.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/registry.computingforgeeks.com/privkey.pem
Your cert will expire on 2021-07-28. To obtain a new or tweaked
version of this certificate in the future, simply run certbot
again. To non-interactively renew *all* of your certificates, run
"certbot renew"
- Your account credentials have been saved in your Certbot
configuration directory at /etc/letsencrypt. You should make a
secure backup of this folder now. This configuration directory will
also contain certificates and private keys obtained by Certbot so
making regular backups of this folder is ideal.
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-leSertifikat Anda akan disimpan di bawah /etc/letsencrypt/live/
/etc/letsencrypt/live/registry.domain.com/fullchain.pem
/etc/letsencrypt/live/registry.domain.com/privkey.pemDi mana :
- fullchain.pem ⇒ file gabungan
cert.pemdanchain.pem - chain.pem ⇒ sertifikat menengah
- cert.pem ⇒ Sertifikat Server SSL (termasuk kunci publik)
- privkey.pem ⇒ file kunci pribadi
Jalankan registry Docker di Rocky Linux/AlmaLinux 8
Anda bisa menjalankan registri Docker dengan SSL atau tanpa SSL. Kami akan menunjukkan bagaimana Anda bisa menjalankan registri Docker dengan salah satu metode tersebut.
Tapi pertama, buat direktori yang akan menyimpan image registry Docker:
sudo mkdir /var/lib/docker/registryMenjalankan registry Docker lokal tanpa SSL
docker run -d -p 5000:5000 \
--name docker-registry \
--restart=always \
-v /var/lib/docker/registry:/var/lib/registry \
registry:2Menjalankan registry Docker lokal dengan SSL
Buat direktori dan letakkan sertifikat di host:
export DOMAIN="registry.domain.com"
mkdir /certs
sudo cp /etc/letsencrypt/live/$DOMAIN/fullchain.pem /certs/fullchain.pem
sudo cp /etc/letsencrypt/live/$DOMAIN/privkey.pem /certs/privkey.pem
sudo cp /etc/letsencrypt/live/$DOMAIN/cert.pem /certs/cert.pemBuat sebuah kontainer Docker Registry:
docker run -d --name docker-registry --restart=always \
-p 5000:5000 \
-e REGISTRY_HTTP_ADDR=0.0.0.0:5000 \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/fullchain.pem \
-e REGISTRY_HTTP_TLS_KEY=/certs/privkey.pem \
-v /certs:/certs \
-v /var/lib/docker/registry:/var/lib/registry \
registry:2Ganti registry.domain.com dengan nama subdomain registry Anda.
Ini akan mengunduh image docker registry:2 jika belum ada dan membuat sebuah kontainer
Unable to find image 'registry:2' locally
2: Pulling from library/registry
ddad3d7c1e96: Pull complete
6eda6749503f: Pull complete
363ab70c2143: Pull complete
5b94580856e6: Pull complete
12008541203a: Pull complete
Digest: sha256:bac2d7050dc4826516650267fe7dc6627e9e11ad653daca0641437abdf18df27
Status: Downloaded newer image for registry:2
ed960bd27529be26e7ef728027844a62b0731b08bafdbbf63dea328dac46e024Periksa status kontainer:
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ed960bd27529 registry:2 "/entrypoint.sh /etc…" 28 seconds ago Up 27 seconds 0.0.0.0:5000->5000/tcp, :::5000->5000/tcp docker-registryUntuk mendorong gambar ke server Registry Container, atur seperti berikut:
$ curl https://$DOMAIN:5000/v2/_catalog
{"repositories":[]}Jika Anda mengaktifkan SELinux, Anda mungkin mengalami masalah saat menggunakan port 5000, pertimbangkan untuk menonaktifkan SELinux atau mengubahnya ke mode permissive jika Anda mengalami masalah.
Jika firewalld diaktifkan dan berjalan, izinkan port pada firewall.
sudo firewall-cmd --add-port=5000/tcp --permanent
sudo firewall-cmd --reloadTambahkan Registry Tidak Aman ke Docker Engine
Secara default, Docker menggunakan https untuk terhubung ke registry Docker. Namun, ada kasus penggunaan untuk menggunakan registry yang tidak aman, terutama jika Anda berada di jaringan yang terpercaya. Ini menghilangkan kebutuhan akan sertifikat yang ditandatangani CA untuk penggunaan internal atau untuk mempercayai sertifikat yang ditandatangani sendiri di semua node Docker. Berikut adalah langkah-langkah untuk menambahkan Registry Tidak Aman ke Docker Engine.
Untuk Ubuntu Xenial, edit /etc/docker/daemon.json dan perbarui kunci “insecure-registries”. misalnya.
{
"insecure-registries" : ["registry.domain.com:5000"]
}Edit file /etc/docker/daemon.json, misalnya.
{
"insecure-registries" : ["registry.domain.com:5000"]
}Untuk Ubuntu trusty, edit file /etc/default/docker dan perbarui DOCKER_OPTS, misalnya
DOCKER_OPTS='--insecure-registry registry.domain.com:5000'Lalu restart mesin Docker
sudo systemctl restart dockerMendorong gambar Docker ke registri lokal
Sekarang registry sudah siap, Anda dapat mulai mengirimkan image docker ke dalamnya. Jika Anda tidak memiliki server DNS aktif, gunakan file /etc/hosts untuk memetakan hostname ke alamat IP.
$ sudo vim /etc/hosts
192.168.1.23 registry.domain.comSaya akan mengunduh ubuntu image Docker terbaru dari Docker Hub dan mendorongnya ke registry Docker lokal saya.
$ docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
345e3491a907: Pull complete
57671312ef6f: Pull complete
5e9250ddb7d0: Pull complete
Digest: sha256:cf31af331f38d1d7158470e095b132acd126a7180a54f263d386da88eb681d93
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latestTag gambar sebagai registry.domain.com:5000/ubuntu. Ini membuat tag tambahan untuk gambar yang sudah ada. Ketika bagian pertama dari tag adalah nama host dan port, Docker menganggap ini sebagai lokasi registry saat melakukan push.
docker tag ubuntu $DOMAIN:5000/ubuntuDorong gambar ke registry lokal yang berjalan di registry.domain.com:5000/ubuntu
$ docker push $DOMAIN:5000/ubuntu
Using default tag: latest
The push refers to repository [registry.domain.com:5000/ubuntu]
2f140462f3bc: Pushed
63c99163f472: Pushed
ccdbb80308cc: Pushed
latest: digest: sha256:86ac87f73641c920fb42cc9612d4fb57b5626b56ea2a19b894d0673fd5b4f2e9 size: 943Jika unggahan gambar berhasil, Anda seharusnya mendapatkan sha256 hash di akhir. Gambar yang diunggah disimpan di bawah direktori /var/lib/registry/docker/registry/v2/repositories.
$ ls /var/lib/docker/registry/docker/registry/v2/repositories/
ubuntuIni adalah metode yang sama yang akan Anda gunakan untuk mendorong image docker kustom. Untuk mengunduh image docker di registry lokal, gunakan perintah:
$ docker pull registry-hostname:500/image:tag
#E.g
$ docker pull registry.domain.com:5000/ubuntuDi panduan saya berikutnya, saya akan menjelaskan cara mengonfigurasi proxy nginx untuk mengakses repositori melalui https.
Anda juga bisa melihat Instal Manajer UI Docker – Portainer