GNU/Linux >> Belajar Linux >  >> Rocky Linux

Cara Mengatur Registri Docker Pribadi di Rocky Linux 8

Jika Anda bekerja untuk sebuah organisasi dan ingin menyimpan gambar buruh pelabuhan Anda di rumah untuk penyebaran cepat, maka hosting repositori Docker pribadi sangat cocok. Memiliki registri buruh pelabuhan pribadi memungkinkan Anda untuk memiliki saluran distribusi gambar dan memiliki kontrol yang lebih ketat atas penyimpanan dan distribusi gambar. Anda dapat mengintegrasikan registri Anda dengan sistem CI/CD untuk meningkatkan alur kerja Anda.

Tutorial ini akan mengajari Anda cara menyiapkan dan menggunakan registri Docker pribadi di server berbasis Rocky Linux 8 menggunakan Amazon S3 sebagai lokasi penyimpanan.

Prasyarat

  • Dua server Linux dengan Rocky Linux 8. Satu server akan bertindak sebagai host registri, sementara yang lain akan digunakan sebagai klien untuk mengirim permintaan dan menerima gambar dari host.
  • Nama domain terdaftar yang menunjuk ke server host. Kami akan menggunakan registry.example.com untuk tutorial kami.
  • Pengguna non-root dengan hak sudo di kedua mesin.

Langkah 1 - Konfigurasi Firewall

Langkah pertama adalah mengkonfigurasi firewall. Rocky Linux menggunakan Firewalld Firewall. Periksa status firewall.

$ sudo firewall-cmd --staterunning

Firewall bekerja dengan zona yang berbeda, dan zona publik adalah zona default yang akan kita gunakan. Buat daftar semua layanan dan port yang aktif di firewall.

$ sudo firewall-cmd --permanent --list-services

Ini akan menunjukkan output berikut.

kokpit dhcpv6-client ssh

Izinkan port HTTP dan HTTPS.

$ sudo firewall-cmd --permanent --add-service=http$ sudo firewall-cmd --permanent --add-service=https

Periksa kembali status firewall.

$ sudo firewall-cmd --permanent --list-services

Anda akan melihat keluaran serupa.

kokpit dhcpv6-klien http https ssh

Muat ulang firewall untuk mengaktifkan perubahan.

$ sudo firewall-cmd --reload

Langkah 2 - Instal Penulisan Docker dan Docker

Langkah ini diperlukan pada server dan mesin klien.

Instal repositori Docker resmi.

$ sudo dnf install yum-utils$ sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo

Instal Docker.

$ sudo dnf install docker-ce docker-ce-cli containerd.io

Aktifkan dan jalankan daemon Docker.

$ sudo systemctl aktifkan buruh pelabuhan --now

Tambahkan pengguna sistem Anda ke grup Docker untuk menghindari penggunaan sudo untuk menjalankan perintah Docker.

$ sudo usermod -aG docker $(whoami)

Login kembali ke server Anda setelah logout untuk mengaktifkan perubahan.

Unduh dan instal rilis stabil Docker Compose terbaru.

$ sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o / usr/local/bin/docker-compose

Terapkan izin yang dapat dieksekusi ke file biner yang diunduh.

$ sudo chmod +x /usr/local/bin/docker-compose

Instal skrip Penyelesaian Bash komposisi Docker.

$ sudo curl \ -L https://raw.githubusercontent.com/docker/compose/1.29.2/contrib/completion/bash/docker-compose \ -o /etc/bash_completion.d/docker-compose 

Muat ulang pengaturan profil Anda untuk membuat penyelesaian bash berfungsi.

$ source ~/.bashrc

Langkah 3 - Konfigurasi Registri Docker

Buat direktori pengguna

Buat direktori untuk konfigurasi registri.

$ mkdir ~/docker-registry

Beralih ke docker-registry direktori.

$ cd ~/docker-registry

Buat direktori untuk menyimpan kata sandi otentikasi HTTP, file konfigurasi Nginx, dan sertifikat SSL.

$ mkdir auth

Buat direktori lain untuk menyimpan log Nginx.

$ mkdir log

Buat Bucket Amazon S3

Anda dapat menyimpan data registri dan gambar di server Anda atau menggunakan layanan cloud hosting. Untuk tutorial kami, kami akan menggunakan layanan cloud Amazon S3.

Langkah selanjutnya adalah mengatur file konfigurasi dengan beberapa pengaturan penting. Pengaturan ini juga dapat ditentukan di docker-compose.yml file, tetapi memiliki file terpisah jauh lebih baik.

Buat ember dengan pengaturan berikut.

  • ACL harus dinonaktifkan.
  • Akses publik ke bucket harus dinonaktifkan.
  • Versi bucket harus dinonaktifkan.
  • Aktifkan enkripsi Bucket menggunakan kunci terkelola Amazon S3. (SSE-S3)
  • Kunci objek harus dinonaktifkan.

Buat pengguna IAM dengan kebijakan berikut.

{ "Versi":"2012-10-17", "Pernyataan":[ { "Effect":"Izinkan", "Tindakan":[ "s3:ListBucket", "s3:GetBucketLocation", "s3:ListBucketMultipartUploads" ], "Resource":"arn:aws:s3:::S3_BUCKET_NAME" }, { "Effect":"Allow", "Action":[ "s3:PutObject", "s3:GetObject", "s3:DeleteObject", "s3:ListMultipartUploadParts", "s3:AbortMultipartUpload" ], "Resource":"arn:aws:s3:::S3_BUCKET_NAME/*" } ]}

Ganti S3_BUCKET_NAME dengan nama ember S3 Anda.

Catat kunci rahasia, nilai rahasia, dan wilayah ember ember Anda untuk digunakan nanti.

Buat File Tulis Docker

Buat docker-compose.yml file dan buka untuk diedit.

$ nano docker-compose.yml

Tempelkan kode berikut di dalamnya.

versi:'3.3'services:registry:image:registry:2 restart:always environment:- REGISTRY_STORAGE=s3 - REGISTRY_STORAGE_S3_REGION=us-west-2 - REGISTRY_STORAGE_S3_BUCKET=hf-docker-registry - REGISTRY_STORAGE_Stru_ENKSIZE_S3_en - REGISTRY_STORAGE_S3_SECURE =true - REGISTRY_STORAGE_S3_ACCESSKEY =AKIA3FIG4NVFCJ6STMUA - REGISTRY_STORAGE_S3_SECRETKEY =j9sA / fw6EE9TVj5KRDhm / 7deye + aYDPXttkGbdaX - REGISTRY_STORAGE_S3_V4AUTH =true - REGISTRY_STORAGE_S3_ROOTDIRECTORY =/ image-registry - REGISTRY_STORAGE_CACHE_BLOBDESCRIPTOR =inmemory - REGISTRY_HEALTH_STORAGEDRIVER_ENABLED =nginx palsu:image:"nginx:alpine" port:- 443 :443 tautan:- registri:volume registri:- ./auth:/etc/nginx/conf.d - ./auth/nginx.conf:/etc/nginx/nginx.conf:ro - ./logs:/var/ log/nginx - /etc/letsencrypt:/etc/letsencrypt

Simpan file dengan menekan Ctrl + X dan memasukkan Y saat diminta.

Mari kita lihat apa yang telah kita siapkan di file penulisan kita.

  1. Langkah pertama adalah mengambil gambar terbaru dari versi 2 dari registri Docker dari hub. Kami tidak menggunakan tag terbaru karena dapat menyebabkan masalah dalam hal peningkatan versi utama. Menyetelnya ke 2 memungkinkan Anda untuk mengambil semua pembaruan 2.x sambil mencegah peningkatan otomatis ke versi utama berikutnya, yang dapat menyebabkan perubahan yang melanggar.

  2. Wadah registri disetel untuk selalu memulai ulang jika terjadi kegagalan atau penghentian yang tidak terduga.

  3. Kami telah menetapkan berbagai variabel lingkungan untuk penyimpanan Amazon S3. Mari kita selesaikan dengan cepat.

    • REGISTRY_STORAGE mengatur jenis penyimpanan. Kami telah memilih s3 karena kami menggunakan Amazon S3.
    • REGISTRY_STORAGE_S3_REGION menyetel wilayah bucket S3 Anda.
    • REGISTRY_STORAGE_S3_BUCKET menyetel nama bucket S3 Anda.
    • REGISTRY_STORAGE_S3_ENCRYPT - setel ke true jika Anda telah mengaktifkan enkripsi Bucket.
    • REGISTRY_STORAGE_S3_CHUNKSIZE mengatur ukuran potongan unggahan. Harus lebih besar dari 5 MB (5 * 1024 * 1024).
    • REGISTRY_STORAGE_S3_SECURE - setel ke true jika Anda akan menggunakan HTTPS.
    • REGISTRY_STORAGE_S3_ACCESSKEY dan REGISTRY_STORAGE_S3_SECRETKEY - Kredensial pengguna yang Anda ambil setelah membuat pengguna IAM Anda.
    • REGISTRY_STORAGE_S3_V4AUTH - setel ke true jika Anda menggunakan autentikasi AWS v4. Jika Anda mendapatkan kesalahan terkait login S3, setel ke false.
    • REGISTRY_STORAGE_S3_ROOTDIRECTORY - menyetel direktori root di keranjang tempat data registri Anda akan disimpan.
    • REGISTRY_STORAGE_CACHE_BLOBDESCRIPTOR - mengatur lokasi untuk Cache. Dalam kasus kami, kami menyimpannya dalam memori. Anda juga dapat menyetelnya untuk menggunakan Redis.
    • REGISTRY_HEALTH_STORAGEDRIVER_ENABLED - Setel ke false untuk menonaktifkan layanan pemeriksaan kesehatan penyimpanan Registry. Ada bug dengan Registry yang dapat menyebabkan masalah jika Anda tidak menyetelnya ke false.
  4. Registri Docker berkomunikasi melalui port 5000, yang telah kami buka di server kami ke docker.

  5. ./auth:/etc/nginx/conf.d pemetaan memastikan bahwa semua pengaturan Nginx tersedia di penampung.

  6. ./auth/nginx.conf:/etc/nginx/nginx.conf:ro memetakan file pengaturan Nginx dari sistem ke satu di wadah dalam mode hanya-baca.

  7. ./logs:/var/log/nginx memungkinkan akses ke log Nginx pada sistem dengan memetakan ke direktori log Nginx dalam wadah.

  8. Pengaturan registri Docker disimpan di /etc/docker/registry/config.yml file dalam wadah, dan kami telah memetakannya ke config.yml file di direktori saat ini, yang akan kita buat di langkah berikutnya.

Menyiapkan Otentikasi

Untuk menyiapkan otentikasi HTTP, Anda perlu menginstal httpd-tools paket.

$ sudo dnf install httpd-tools

Buat file kata sandi di ~/docker-registry/auth direktori.

$ htpasswd -Bc ~/docker-registry/auth/nginx.htpasswd user1Kata sandi baru:Ketik ulang kata sandi baru:Menambahkan kata sandi untuk pengguna pengguna1

-c flag menginstruksikan perintah untuk membuat file baru, dan -B flag adalah menggunakan algoritma bcrypt yang didukung oleh Docker. Ganti user1 dengan nama pengguna pilihan Anda.

Jika Anda ingin menambahkan lebih banyak pengguna, jalankan perintah lagi, tetapi tanpa -c bendera.

$ htpasswd -B ~/docker-registry/auth/registry.password user2

Sekarang, file akan dipetakan ke wadah registri untuk otentikasi.

Langkah 4 - Instal SSL

Untuk menginstal sertifikat SSL menggunakan Let's Encrypt, kita perlu mengunduh alat Certbot, yang tersedia dari repositori Epel.

Instal repositori EPEL dan Certbot.

$ sudo dnf install epel-release $ sudo dnf install certbot

Buat sertifikat SSL.

$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d registry.example.com

Perintah di atas akan mengunduh sertifikat ke /etc/letsencrypt/live/registry.example.com direktori di server Anda.

Buat grup Diffie-Hellman sertifikat.

$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096

Uji perpanjangan sertifikat.

$ sudo certbot perbarui --dry-run

Jika dry run berhasil, itu berarti sertifikat Anda akan diperpanjang secara otomatis.

Salin file Dhparam ke wadah

Salin grup Diffie-Hellman sertifikat ke ~/docker-registry/auth direktori, yang akan dipetakan ke wadah.

$ sudo cp /etc/ssl/certs/dhparam.pem ~/docker-registry/auth

Langkah 5 - Konfigurasi Nginx

Langkah selanjutnya melibatkan mengonfigurasi server Nginx sebagai proxy front-end untuk server registri Docker. Registri Docker dilengkapi dengan server built-in yang beroperasi pada port 5000. Kami akan meletakkannya di belakang Nginx.

Buat dan buka file ~/docker-registry/auth/nginx.conf untuk diedit.

$ sudo nano ~/docker-registry/auth/nginx.conf

Tempelkan kode berikut di dalamnya.

acara { worker_connections 1024;}http { upstream docker-registry { server registry:5000; } ## Tetapkan variabel untuk membantu kami memutuskan apakah kami perlu menambahkan header ## 'Docker-Distribution-Api-Version'. ## Registri selalu menyetel header ini. ## Dalam kasus nginx melakukan autentikasi, header tidak disetel ## karena nginx melakukan autentikasi sebelum melakukan proxy. peta $upstream_http_docker_distribution_api_version $docker_distribution_api_version { '' 'registry/2.0'; } server { dengarkan 443 ssl http2; server_name registry.example.com; # SSL ssl_certificate /etc/letsencrypt/live/registry.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/registry.example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/registry.example.com/chain.pem; access_log /var/log/nginx/registry.access.log; error_log /var/log/nginx/registry.error.log; # Rekomendasi dari https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDALY -RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; ssl_prefer_server_ciphers aktif; ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1; ssl_session_cache dibagikan:SSL:10m; ssl_dhparam /etc/nginx.d/conf.d/dhparam.pem; penyelesai 8.8.8.8; # nonaktifkan batasan apa pun untuk menghindari HTTP 413 untuk unggahan gambar besar client_max_body_size 0; # diperlukan untuk menghindari HTTP 411:lihat Edisi #1486 (https://github.com/moby/moby/issues/1486) chunked_transfer_encoding aktif; lokasi /v2/ { # Jangan izinkan koneksi dari buruh pelabuhan 1.5 dan sebelumnya # buruh pelabuhan pra-1.6.0 tidak mengatur agen pengguna dengan benar pada ping, tangkap agen pengguna "Go *" if ($http_user_agent ~ "^(docker\/ 1\.(3|4|5(?!\.[0-9]-dev))|Go ).*$" ) { return 404; } # Untuk menambahkan otentikasi dasar ke v2, gunakan pengaturan auth_basic. auth_basic "Registry realm"; auth_basic_user_file /etc/nginx/conf.d/nginx.htpasswd; ## Jika $docker_distribution_api_version kosong, header tidak ditambahkan. ## Lihat direktif peta di atas di mana variabel ini didefinisikan. add_header 'Docker-Distribution-Api-Version' $docker_distribution_api_version selalu; proxy_pass http://docker-registry; proxy_set_header Host $http_host; # diperlukan untuk kepentingan klien buruh pelabuhan proxy_set_header X-Real-IP $remote_addr; # meneruskan IP klien nyata proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $skema; proxy_read_timeout 900; } }}

Simpan file dengan menekan Ctrl + X dan memasukkan Y ketika diminta setelah selesai.

Konfigurasikan SELinux untuk mengizinkan koneksi jaringan untuk Private Docker Registry.

$ sudo setsebool -P httpd_can_network_connect on

Langkah 6 - Luncurkan Registri Docker

Beralih ke direktori Docker Registry.

$ cd ~/docker-registry

Luncurkan wadah buruh pelabuhan.

$ docker-compose up -d

Periksa status kontainer.

$ docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES88d6addc1687 nginx:alpine "/docker-entrypoint...." 5 menit yang lalu Naik 5 menit 80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp docker-registry_nginx_12b112edc1c72 registry:2 "/entrypoint.sh /etc..." 5 menit yang lalu Naik 5 menit 5000/tcp docker-registry_registry_1

Masuk ke registri Docker.

$ login buruh pelabuhan -u=testuser -p=testpassword https://registry.example.com

Anda juga dapat membuka URL https://registry.example.com/v2/ di browser Anda, dan itu akan meminta nama pengguna dan kata sandi. Anda akan melihat halaman kosong dengan {} di atasnya.

Anda dapat memeriksa URL di terminal menggunakan curl .

$ curl -u testuser -X DAPATKAN https://registry.nspeaks.xyz/v2/Masukkan sandi host untuk pengguna 'testuser':{}

Unduh image buruh pelabuhan Ubuntu terbaru.

$ docker tarik ubuntu:terbaru

Tandai gambar ini untuk registri pribadi.

$ tag buruh pelabuhan ubuntu:registri terbaru.example.com/ubuntu2004

Dorong gambar ke registri.

$ docker push registry.example.com/ubuntu2004

Uji apakah push telah berhasil.

$ curl -u testuser -X DAPATKAN https://registry.nspeaks.xyz/v2/_catalogMasukkan kata sandi host untuk pengguna 'testuser':{"repositories":["ubuntu2004"]}

Masukkan kata sandi otentikasi Nginx Anda saat diminta, dan Anda akan melihat daftar repositori yang tersedia melalui registri.

Periksa daftar gambar Docker yang saat ini tersedia untuk digunakan.

$ docker imagesREPOSITORY TAG ID GAMBAR UKURAN YANG DIBUATregistry 2 d3241e050fc9 5 hari yang lalu 24.2MBnginx alpine 53722defe627 5 hari yang lalu 23.4MBhttpd 2 118b6abfbf55 5 hari yang lalu 144MBubuntu ff0fea8310f3 terbaru 10fea8310f3 2 minggu lalu 72.8MBregistry terakhir 72.8MB MB

Langkah 7 - Akses dan Gunakan registri Docker dari Mesin Klien

Masuk ke server klien Anda. Pada langkah 1, kami menginstal Docker di mesin klien.

Masuk ke registri Docker pribadi dari mesin klien.

$ login buruh pelabuhan -u=testuser -p=testpassword https://registry.example.com

Tarik gambar Ubuntu dari registri.

$ docker pull registry.example.com/ubuntu2004

Buat daftar semua gambar di mesin klien Anda.

$ docker imagesREPOSITORY TAG ID GAMBAR UKURAN DIBUATregistry.nspeaks.xyz/ubuntu2004 ff0fea8310f3 terbaru 2 minggu lalu 72.8MB

Buat dan luncurkan wadah menggunakan gambar yang diunduh.

$ docker run -it registry.example.com/ubuntu2004 /bin/bash

Anda akan masuk ke Shell di dalam wadah Ubuntu.

[dilindungi email]:

Jalankan perintah berikut untuk memeriksa versi Linux.

[email protected]$ cat /etc/os-releaseNAME="Ubuntu"VERSION="20.04.4 LTS (Focal Fossa)"ID=ubuntuID_LIKE=debianPRETTY_NAME="Ubuntu 20.04.4 LTS"VERSION_ID="20.04"HOME_URL ="https://www.ubuntu.com/"SUPPORT_URL="https://help.ubuntu.com/"BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"PRIVACY_POLICY_URL="https:// www.ubuntu.com/legal/terms-and-policies/privacy-policy"VERSION_CODENAME=focalUBUNTU_CODENAME=focal

Sekarang, Anda dapat mulai menggunakan registri Docker dari mesin klien Anda.

Kesimpulan

Ini mengakhiri tutorial kami tentang menyiapkan registri Docker pribadi di server berbasis Rocky Linux 8 yang menggunakan Amazon S3 sebagai penyimpanan. Jika Anda memiliki pertanyaan, kirimkan di komentar di bawah.


Rocky Linux
  1. Cara Mengatur dan Menggunakan Registri Docker Pribadi

  2. Cara Instal Docker di AlmaLinux / Rocky Linux

  3. Cara menginstal dan mengatur Docker Container di Rocky Linux 8

  1. Cara Mengatur Registri Docker Pribadi di Kubernetes (k8s)

  2. Cara Mengatur Registri Docker Pribadi di Ubuntu 20.04

  3. Cara Instal Docker dan Docker-Compose di Rocky Linux 8

  1. Cara Menginstal Pengelola Kata Sandi Padloc di Rocky Linux 8

  2. Cara Mengatur Registri Docker Pribadi di Ubuntu 18.04 LTS

  3. Cara Menginstal Docker di Rocky Linux 8