GNU/Linux >> Belajar Linux >  >> Panels >> Docker

Cara Membuat Registri Docker Pribadi di Ubuntu Linux

Apakah Anda mencari tempat untuk menyimpan gambar Docker yang dibuat khusus dengan aman untuk proyek pribadi Anda atau menggunakannya dalam organisasi Anda? Atau mungkin sistem terpusat untuk mengelola proses Continuous Integration and Deployment Anda? Tempat di mana Anda dapat menarik dan mengunggah gambar yang dibuat khusus untuk aplikasi Anda sesuka hati dan meningkatkan tingkat penerapan?

Tidak terlihat lagi! Registri Docker pribadi memungkinkan semua itu! Tutorial langkah demi langkah ini akan memandu Anda dalam membangun registri Docker pribadi Anda sendiri. Selami untuk memulai!

Prasyarat

Untuk mengikuti tutorial ini, pastikan untuk memiliki yang berikut:

  • Dua Ubuntu 20,04 LTS perangkat. Satu akan meng-host registri Docker, dan yang lainnya akan bertindak sebagai mesin klien untuk mengirim permintaan ke registri Docker Anda.
  • NGINX hanya diperlukan di mesin host untuk menyiapkan enkripsi SSL dan otentikasi HTTP.
  • Nama domain terdaftar. NGINX akan merutekan lalu lintas ke nama domain terdaftar Anda ke registri Docker Anda yang berjalan di sebuah wadah.
  • Anda memerlukan Docker di mesin host dan klien untuk tutorial ini. Instalasi default sudah cukup.
  • Tulisan buruh pelabuhan di mesin host registri Docker untuk menyiapkan dan memulai komponen untuk registri Docker Anda. Terkait:Semua yang Perlu Anda Ketahui tentang Menggunakan Docker Compose

Menyiapkan Registri Docker

Langkah pertama yang perlu Anda lakukan adalah menyiapkan registry Docker di perangkat host, yang disediakan sebagai image gratis di Docker Hub.

Daripada dibatasi untuk mengeluarkan perintah Docker untuk menyelesaikan tugas ini, Anda akan membuat docker-compose.yml mengajukan. File menggunakan format file komposisi buruh pelabuhan dan dapat mengatur komponen yang diperlukan untuk registri Docker dengan relatif mudah.

Untuk mengikuti, buka klien SSH favorit Anda, dan sambungkan ke perangkat yang akan menjadi server registri.

1. Di /home direktori, buat direktori bernama docker-registry dengan mkdir perintah:

# Creating working directory
mkdir docker-registry

2. Navigasikan ke docker-registry direktori:

# Navigate to the working directory
cd ~/docker-registry

3. Di dalam docker-registry direktori, buat subdirektori bernama data . Di dalam data direktori adalah tempat registri Docker akan menyimpan gambar Docker. data direktori bertindak sebagai sistem file untuk registri Docker untuk melestarikan gambar Docker.

# Create filesystem to persist data
mkdir data

4. Di dalam docker-registry direktori, buat docker-compose.yml berkas:

# Create the docker-compose file
nano docker-compose.yml 

Anda akan menemukan konfigurasi untuk mengatur registri di file yang baru dibuat. Di antara pengaturan, Anda akan melihat:

  • Menyetel registry layanan dengan registry:latest gambar dengan kode latest tanda.
  • Menetapkan kebijakan mulai ulang untuk registry layanan untuk always . Asalkan mesin Docker berjalan, registry layanan akan selalu dimulai ulang saat dihentikan.
  • ports bagian memetakan port 5000 dalam wadah registri ke port 5000 di mesin host.
  • registry layanan di environment bagian mengatur variabel lingkungan REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY ke data direktori yang dibuat sebelumnya.
  • Docker memerlukan volume untuk mempertahankan gambar Docker di registry wadah. Anda akan menambahkan volumes objek untuk memetakan /data direktori pada mesin host ke /data direktori dalam wadah.

Pemetaan akan menyimpan data pada sistem file mesin host alih-alih di dalam wadah. Karena Docker sekarang menyimpan data di mesin host, data tersebut dapat dicadangkan, dimigrasikan, dienkripsi, atau diganti.

Di bawah ini Anda dapat melihat konfigurasi YAML lengkap untuk komponen yang diperlukan untuk memulai dan menjalankan registri Docker. Salin kode YAML di bawah ini dan rekatkan ke docker-compose.yml file yang Anda buat dan simpan dengan CTRL + S dan tekan CTRL + X untuk keluar:

version: '3.3' 
services:
  registry:
    image: registry:latest 
		restart: always
    ports:
    - "5000:5000"
    environment:
      REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /data 
    volumes:
      - ./data:/data 

Docker-compose menjalankan beberapa container sebagai satu aplikasi. docker-compose.yml file mengonfigurasi beberapa wadah ini sebagai bagian dari layanan.

5. Sekarang jalankan file docker-compose dan buat dan mulai registri Docker:

# Start docker registry application
sudo docker-compose up

Pada output perintah di bawah ini, Anda dapat melihat registri Docker berjalan. Untuk menutup aplikasi, tekan CTRL + C .

Menyiapkan NGINX

Sekarang setelah Anda mengatur registri Docker, sekarang saatnya untuk mengatur NGINX di mesin host. NGINX akan meneruskan lalu lintas dari perangkat klien ke registri Docker. Untuk tutorial ini, Anda akan meneruskan lalu lintas melalui nama domain. Baca terus untuk mengatasi langkah ini.

Awalnya, Anda harus menyiapkan penerusan port NGINX untuk domain Anda melalui /etc/nginx/sites-available/your_domain_name berkas.

1. Buat file dengan perintah berikut:

# Creating configuration for your domain
sudo nano /etc/nginx/sites-available/your_domain_name 

Anda akan menemukan banyak referensi untuk your_domain_name di bagian berikut . String ini adalah pengganti. Jangan lupa untuk menggantinya dengan nama domain yang Anda miliki saat mencoba sendiri perintahnya. Dalam contoh registry.joeshiett.xyz adalah nama domain yang dipilih.

2. Salin konfigurasi NGINX berikut dan tambahkan ke nama_domain_anda file yang Anda buat:

server {
	listen 80;
  # Replace your_domain_name with your domain name
  server_name your_domain_name;

    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://localhost:5000;
      proxy_set_header  Host              $http_host;   # required for docker client's sake
      proxy_set_header  X-Real-IP         $remote_addr; # pass on real client's IP
      proxy_set_header  X-Forwarded-For   $proxy_add_x_forwarded_for;
      proxy_set_header  X-Forwarded-Proto $scheme;
      proxy_read_timeout                  900;
    }
}

3. Penerusan port belum selesai. Anda harus melampirkan tautan simbolis terlebih dahulu. Anda akan menautkan /etc/nginx/sites-available/your_domain_name file konfigurasi ke /etc/nginx/sites-enabled/. Perintah lengkapnya sebagai berikut:

cd /etc/nginx/sites-enabled/ && sudo ln -s /etc/nginx/sites-available/your_domain_name .

4. Mulai ulang layanan NGINX setelah membuat tautan simbolis:

# Restarting Nginx service
sudo systemctl restart nginx 

Buka browser di perangkat klien Anda dan navigasikan ke https://your_domain_name/v2/ untuk mengakses v2 titik akhir, Docker HTTP API.

Gambar di bawah menunjukkan keluaran yang diharapkan dari terminal host setelah menavigasi ke tautan. Gambar juga menunjukkan bahwa browser mengirim GET permintaan ke Docker HTTP API melalui v2 titik akhir.

Setelah menavigasi ke v2 titik akhir melalui tautan, objek JSON kosong – {} – akan ditampilkan di jendela browser.

Mengonfigurasi Ukuran Unggahan File NGINX

Batas ukuran unggahan default NGINX adalah 1m , di mana m singkatan dari megabyte. Batas default hampir tidak cukup untuk mengunggah gambar Docker ke registri Anda. Untuk mengubah nilai ini, edit nginx.conf, jadi NGINX menerima unggahan file berukuran besar.

1. Sekali lagi, masuk ke mesin host.

2. Edit /etc/nginx/nginx.conf berkas:

3. Di bawah http bagian di nginx.conf file, tambahkan baris berikut untuk memperbesar ukuran upload untuk menampung 8.192 megabyte, dan simpan file:

client_max_body_size 8192m;

Konfigurasinya akan terlihat seperti ini:

Menyiapkan SSL

Sertifikat SSL diperlukan untuk mengamankan koneksi ke registri Docker. Untuk menambahkan sertifikat SSL, Anda perlu menginstal Certbot di host registri.

Anda dapat menginstal Certbot dengan manajer paket snap. Manajer paket Snap sudah diinstal sebelumnya di Ubuntu 20.04.

1. Untuk menginstal Certbot, jalankan perintah berikut di mesin host Anda:

# Install certbot using the snap package manager
sudo snap install --classic certbot

2. Tambahkan Certbot ke PATH agar perintah Certbot dapat bekerja dengan membuat tautan simbolis:

# Attaching certbot to PATH
sudo ln -s /snap/bin/certbot /usr/bin/certbot

3. Jalankan perintah ini untuk mendapatkan sertifikat dan meminta Certbot mengedit konfigurasi NGINX Anda secara otomatis, dan juga mengaktifkan akses HTTPS untuk domain Anda:

# Creating a certificate and enabling HTTPS access
sudo certbot --nginx

Certbot akan mengubah nama_domain_anda file konfigurasi di /etc/nginx/sites-enabled/ direktori dan terapkan sertifikat SSL ke nama domain Anda.

Gambar di bawah ini menunjukkan konfigurasi akhir untuk /etc/nginx/sites-enabled/your_domain_name Anda file akan terlihat seperti setelah Certbot menerapkan sertifikat.

Jika Anda menjelajah ke https://your_domain_name/ , Anda akan merasa aman dengan sertifikat dari Certbot.

Menyiapkan Otentikasi HTTP untuk Registri Docker

Itu selalu merupakan ide yang baik untuk memiliki praktik keamanan yang baik. Jadi Anda akan mengamankan registri Docker Anda dan membatasi akses hanya untuk Anda dan beberapa pengguna lain yang mungkin ingin Anda tambahkan. Anda akan menggunakan autentikasi HTTP, yang disediakan oleh HTTP Basic Auth .

1. Otentikasi HTTP memerlukan htpasswd file dengan nama pengguna dan kata sandi Anda. Untuk membuat htpasswd otentikasi, Anda perlu menginstal apache2-utils paket:

# Installing apache2-utils package
sudo apt-get install apache2-utils

2. Setelah menginstal apache2-utils buat registry.credentials file di /etc/nginx direktori dengan httpasswd memerintah. Tambahkan nama pengguna pilihan dengan mengganti your_username dalam perintah di bawah ini. Selanjutnya, tambahkan kata sandi pilihan Anda saat diminta. Perintah lengkap dan outputnya ada di bawah.

# Creating to creating auth credentials
sudo htpasswd -c /etc/nginx/registry.credentials your_username

3. Setelah membuat registry.credentials file, navigasikan ke file konfigurasi NGINX Anda untuk registri Docker Anda di /etc/nginx/sites-available/your_domain_name . Tambahkan teks berikut ke file konfigurasi NGINX di server bagian:

server {
	...
	...
	location / {
			...
			auth_basic            "Basic Auth";
      auth_basic_user_file  "/etc/nginx/registry.credentials";
			...
	}
}

4. Mulai ulang NGINX sekali lagi dan terapkan kembali konfigurasi dengan perintah berikut:

# Restarting nginx
sudo systemctl restart nginx

Gambar di bawah menunjukkan bahwa ketika Anda mencoba mengakses https://nama_domain_anda/ di browser Anda, Anda akan diminta untuk memasukkan nama pengguna dan kata sandi Anda. Untuk tutorial ini, registry Docker berjalan di subdomain registry.joeshiett.xyz , dengan SSL diaktifkan.

Mendorong Gambar ke Repositori Docker Pribadi

Sekarang setelah registri Docker Anda berjalan dan mampu menerima unggahan file yang lebih besar, Anda akan memasukkan gambar ke dalamnya. Untuk mendorong gambar ke registri Docker Anda, Anda harus mengakses mesin klien Anda.

Jika Anda tidak memiliki gambar Docker yang disimpan secara lokal di mesin klien Anda, Anda dapat menarik yang gratis dari Docker Hub.

1. Jalankan perintah berikut untuk menarik image Alpine Linux dari hub Docker, atur nama image sebagai test-image , dan jalankan wadah di shell interaktif:

# Pull and run Alpine container
sudo docker run --name test-image -it alpine:latest /bin/sh

2. Setelah berada di dalam wadah Alpine, buat file bernama TEST . File ini kemudian akan menjadi konfirmasi bahwa gambar yang akan Anda tarik dari registri Docker Anda adalah yang Anda modifikasi sekarang:

# create a file called TEST
touch /TEST

3. Keluar dari shell interaktif dengan mengetikkan exit di terminal Anda.

4. Sekarang buat image Docker dari wadah Alpine Docker bernama test-image , Anda baru saja menyesuaikan:

# Creating Docker image
sudo docker commit test-image your_domain_name/test-image:latest

Gambar Alpine yang Anda tarik dan sesuaikan sebelumnya sekarang tersedia secara lokal dengan repositori yang disebut your_domain_name/test-image dan tag latest .

5. Untuk mendorong gambar yang baru Anda buat ke registri Docker Anda, masuk ke registri Docker Anda dengan perintah di bawah ini:

# Login to Docker registry
sudo docker login https://your_domain_name 

Anda akan diminta untuk memasukkan nama pengguna dan kata sandi yang Anda buat di bagian sebelumnya. Outputnya akan menjadi:

...
Login Succeeded
...

6. Setelah masuk, dorong gambar yang diberi tag ke repositori Docker Anda:# Pushing docker image sudo docker push your_domain_name/test-image:latest

# Pushing docker image
sudo docker push your_domain_name/test-image:latest

Output dari perintah akan terlihat seperti ini:

Menarik Gambar dari Repositori Docker Pribadi

Sekarang setelah Anda berhasil mendorong image Docker ke repositori Docker pribadi, sekarang saatnya untuk menarik image yang baru saja Anda dorong.

1. Pertama, Anda harus login ke repositori Docker pribadi Anda:# Login to Docker registry sudo docker login https://your_domain_name

# Login to Docker registry
sudo docker login https://your_domain_name 

2. Setelah login, Anda akan menarik gambar Docker yang dibuat sebelumnya:

# Pull Docker image from Docker registry
sudo docker pull your_domain_name/test-image

Dari gambar di bawah, Anda dapat melihat bahwa Docker menarik test-image berhasil.

3. Saatnya menjalankan shell interaktif:

sudo docker run -it your_domain_name/test-image /bin/sh

4. Saat berada di shell interaktif, jalankan perintah berikut:

ls

Dari gambar di bawah, Anda dapat melihat bahwa UJI file yang dibuat sebelumnya ada di dalam wadah.

Sekarang Anda telah berhasil menguji registri Docker Anda dan siap digunakan!

Kesimpulan

Dalam tutorial ini, Anda membuat registri Docker pribadi Anda sendiri. Anda menginstal prasyarat yang diperlukan; mengatur otentikasi SSL dan HTTP. Dan akhirnya Anda mendorong dan menarik gambar dari registri Anda.

Jadi, paket apa yang Anda rencanakan untuk dimasukkan ke registri Anda?


Docker
  1. Cara Mengatur Registri Docker Pribadi di Rocky Linux 8

  2. Cara Menginstal Docker di Ubuntu 18.04 / Ubuntu 18.10 / Ubuntu 19.04

  3. Cara Membuat, Mendaftar &Menghapus Wadah Docker di Linux

  1. Cara Mengatur dan Menggunakan Registri Docker Pribadi

  2. Cara menginstal Docker di Ubuntu 22.04

  3. Bagaimana Cara Menginstal Docker di Ubuntu 18.04?

  1. Cara Membuat Bootable Ubuntu USB Stick di Linux

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

  3. Cara Mengatur Registri Docker Pribadi di Ubuntu 20.04