Sediakan Docker Registry pada Rocky Linux 8/AlmaLinux 8
Registry Docker adalah sistem penyimpanan dan penghantaran kandungan yang menyimpan imej Docker bernama, tersedia dalam pelbagai versi yang ditanda. Pengguna yang menggunakan Docker berinteraksi dengan registry menggunakan arahan docker push dan docker pull. Kadang-kadang wajar menyimpan imej Docker pada registry tempatan daripada menolak mereka ke Docker hub. Dalam panduan ini, kami akan menyediakan Private Docker Registry di Rocky/AlmaLinux 8 yang dilindungi dengan Sijil SSL Let’s Encrypt.
Anda akan menjimatkan banyak lebar jalur untuk pasukan besar dan memastikan imej-imej yang anda tidak mahu didedahkan kepada orang ramai selamat. Membina registry docker tempatan adalah semudah mengikuti beberapa langkah. Untuk pemasangan Docker pada pelbagai distribusi, rujuk Cara memasang Docker CE pada Sistem Linux.
Pasang Enjin Docker
Kita memerlukan Docker Engine untuk menjalankan perkhidmatan registri. Kemas kini sistem anda sebelum memasangnya.
sudo yum -y updateJalankan arahan di bawah untuk memasang Docker CE.
sudo curl -o /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo Kemudian pasang pakej Docker CE dan pemalam Compose.
sudo yum -y install docker-ce docker-ce-cli containerd.io
Jika anda ingin menggunakan Docker sebagai pengguna bukan root, anda kini harus mempertimbangkan untuk menambahkan pengguna anda ke kumpulan docker:
sudo usermod -aG docker $USER
newgrp dockerJalankan arahan di bawah untuk melihat versi docker yang dipasang.
$ docker --version
Docker version 26.1.3, build b72abbbMulakan dan dayakan perkhidmatan docker:
sudo systemctl enable --now dockerStatus sepatutnya 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 Sijil SSL Let’s Encrypt
Seperti yang dijanjikan sebelum ini, kami akan menggunakan Sijil SSL Let’s Encrypt untuk mengamankan tetapan Docker Registry kami yang berjalan di Rocky/AlmaLinux.
Pasang alat certbot yang akan digunakan untuk memohon sijil Let’s Encrypt.
sudo yum -y install epel-release
sudo yum -y install certbotPermintaan untuk sijil SSL:
export DOMAIN="registry.domain.com"
export EMAIL="[email "
certbot certonly --standalone -d $DOMAIN --preferred-challenges http --agree-tos -n -m $EMAIL --keep-until-expiringJangkaan output penjanaan sijil:
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-leSijil 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 ⇒ fail gabungan
cert.pemdanchain.pem - chain.pem ⇒ sijil perantara
- cert.pem ⇒ Sijil Pelayan SSL (termasuk kunci awam)
- privkey.pem ⇒ fail kunci peribadi
Jalankan registri Docker pada Rocky Linux/AlmaLinux 8
Anda boleh menjalankan registri Docker sama ada dengan SSL atau tanpa SSL. Kami akan menunjukkan bagaimana anda boleh menjalankan registri Docker dengan salah satu daripada kaedah tersebut.
Tetapi terlebih dahulu, buat direktori yang akan menyimpan imej registri Docker:
sudo mkdir /var/lib/docker/registryMenjalankan registri Docker tempatan tanpa SSL
docker run -d -p 5000:5000 \
--name docker-registry \
--restart=always \
-v /var/lib/docker/registry:/var/lib/registry \
registry:2Menjalankan registri Docker tempatan dengan SSL
Buat direktori dan letakkan sijil pada hos:
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 bekas 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:2Gantikan registry.domain.com dengan nama subdomain registri anda.
Ia akan memuat turun imej docker registry:2 jika ia tidak wujud dan membuat sebuah kontena
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
ed960bd27529be26e7ef728027844a62b0731b08bafdbbf63dea328dac46e024Semak keadaan bekas:
# 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 menolak imej ke pelayan Registry Container, tetapkan seperti berikut:
$ curl https://$DOMAIN:5000/v2/_catalog
{"repositories":[]}Jika anda menghidupkan SELinux, anda mungkin menghadapi masalah menggunakan port 5000, pertimbangkan untuk mematikan SELinux atau menetapkannya ke mod permisif jika anda menghadapi masalah.
Jika firewalld diaktifkan dan berjalan, benarkan port pada firewall.
sudo firewall-cmd --add-port=5000/tcp --permanent
sudo firewall-cmd --reloadTambah Registry Tidak Selamat ke Docker Engine
Secara default, Docker menggunakan https untuk menyambung ke registri Docker. Tetapi terdapat kes penggunaan untuk menggunakan registri yang tidak selamat, terutamanya jika anda berada di rangkaian yang dipercayai. Ini menghapuskan keperluan untuk sijil yang ditandatangani CA untuk kegunaan dalaman atau untuk mempercayai sijil yang ditandatangani sendiri di semua nod Docker. Berikut adalah langkah-langkah untuk menambah Registri Tidak Selamat ke Docker Engine.
Untuk Ubuntu Xenial, sunting /etc/docker/daemon.json dan kemas kini kunci “insecure-registries”. contohnya.
{
"insecure-registries" : ["registry.domain.com:5000"]
}Edit fail /etc/docker/daemon.json, contohnya.
{
"insecure-registries" : ["registry.domain.com:5000"]
}Untuk Ubuntu trusty, sunting fail /etc/default/docker dan kemas kini DOCKER_OPTS, contohnya
DOCKER_OPTS='--insecure-registry registry.domain.com:5000'Kemudian mulakan semula enjin Docker
sudo systemctl restart dockerMenolak imej Docker ke registri tempatan
Sekarang bahawa pendaftar telah siap, anda boleh mula menolak imej docker ke dalamnya. Jika anda tidak mempunyai pelayan DNS aktif, gunakan fail /etc/hosts untuk memetakan nama hos kepada Alamat IP.
$ sudo vim /etc/hosts
192.168.1.23 registry.domain.comSaya akan memuat turun imej Docker ubuntu terkini dari Docker Hub dan menolaknya ke registri Docker tempatan 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:latestTandakan imej sebagai registry.domain.com:5000/ubuntu. Ini akan mencipta tag tambahan untuk imej sedia ada. Apabila bahagian pertama tag adalah nama hos dan port, Docker mentafsir ini sebagai lokasi registri semasa menolak (push).
docker tag ubuntu $DOMAIN:5000/ubuntuTolak imej ke registri tempatan 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 muat naik imej berjaya, anda sepatutnya mendapat hash sha256 pada akhir. Imej yang didorong disimpan di bawah direktori /var/lib/registry/docker/registry/v2/repositories.
$ ls /var/lib/docker/registry/docker/registry/v2/repositories/
ubuntuIni adalah kaedah yang sama yang akan anda gunakan untuk menolak imej docker tersuai. Untuk memuat turun imej docker di registri tempatan, gunakan arahan:
$ docker pull registry-hostname:500/image:tag
#E.g
$ docker pull registry.domain.com:5000/ubuntuDalam panduan saya yang seterusnya, saya akan menjelaskan cara mengkonfigurasi proksi nginx untuk mengakses repositori melalui https.
Anda juga boleh melihat Pasang pengurus UI Docker – Portainer