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 denganregistry:latest
gambar dengan kodelatest
tanda. - Menetapkan kebijakan mulai ulang untuk
registry
layanan untukalways
. Asalkan mesin Docker berjalan,registry
layanan akan selalu dimulai ulang saat dihentikan. ports
bagian memetakan port5000
dalam wadah registri ke port5000
di mesin host.registry
layanan dienvironment
bagian mengatur variabel lingkunganREGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY
ke data direktori yang dibuat sebelumnya.- Docker memerlukan volume untuk mempertahankan gambar Docker di
registry
wadah. Anda akan menambahkanvolumes
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?