Jika kamu seorang developer atau sedang mencoba menjadi seorang developer dan aktif menggunakan Docker, kamu memerlukan Docker Registry untuk mendaftarkan atau menyimpan docker images kamu ke repository. Lantas, bagaimana cara membuat private Docker Registry di Ubuntu 20.04?
Sebagai informasi, selain bisa menggunakan Docker Hub sebagai Docker Registry, kamu juga bisa membuatnya sendiri supaya lebih private. Yuk, simak artikelnya berikut ini.
Docker Registry
Docker Registry adalah aplikasi yang mengelola penyimpanan dan pengiriman docker container images. Registry memusatkan images container dan mengurangi waktu build untuk developer. Docker images menjamin runtime environment yang sama melalui virtualisasi, tetapi membangun images dapat melibatkan investasi waktu yang signifikan.
Misalnya, daripada menginstall dependency dan package secara terpisah untuk menggunakan Docker, developer dapat mengunduh image yang terkompres dari registry yang berisi semua komponen yang diperlukan.
Selain itu, developer dapat mengotomatiskan pengiriman images ke registry menggunakan Continuous Integration Tools (CI) seperti Travis CI, untuk memperbaharui images dengan lancar selama masa production dan development.
Docker juga memiliki public registry yang gratis, yaitu Docker Hub, yang dapat menghosting docker images khusus kamu, tetapi ada situasi dimana kamu tidak ingin images nya tersedia untuk umum,. Images biasanya berisi semua kode yang diperlukan untuk menjalankan aplikasi, jadi lebih baik menggunakan private registry.
Pada tutorial ini, kita akan membahas mengenai cara membuat private Docker Registry di Ubuntu 20.04.
Persyaratan
Terdapat beberapa persyaratan pada instalasi ini.
- Memiliki VPS yang aktif dengan OS Ubuntu 20.04.
- Sudah melakukan install dan menggunakan Docker di Ubuntu 20.04
- Sudah melakukan install dan menggunakan Docker Compose di Ubuntu 20.04
- Sudah melakukan cara install SSL Let’s Encrypt Nginx di Ubuntu 22.04
- Sudah melakukan instalasi Nginx di Ubuntu 22.04
- Memiliki akses root.
- Domain yang sudah mengarah ke IP VPS.
Point
Terdapat beberapa rangkuman point instalasi pada artikel ini.
- Update Server
- Install & Configure Docker Registry
- Setting Nginx Port Forwarding
- Setting Authentication
- Setting Docker Registry Service
- Publish ke Private Docker Registry
- Pull dari Private Docker Registry
Cara Membuat Private Docker Registry di Ubuntu 20.04
Update Server
Login terlebih dahulu ke root server dan update server untuk memastikan packages server nya sudah up-to-date.
$ apt-get update -y $ reboot
Install & Configure Docker Registry
Perintah Docker berguna saat memulai dan menguji container, tetapi terbukti berat untuk penerapan yang lebih besar yang melibatkan banyak containers yang berjalan secara paralel.
Dengan Docker Compose, kamu bisa menulis satu file .yml untuk menyiapkan konfigurasi pada setiap environment untuk dapat berkomunikasi satu sama lain. Kamu bisa menggunakan docker-compose command-line tool untuk mengeluarkan perintah ke semua komponen aplikasi, sebagai contohnya sebagai group.
Docker Registry sendiri merupakan aplikasi dengan banyak komponen, jadi kamu akan dapat menggunakan Docker Compose untuk mengelolanya. Untuk memulai instance registry, kamu perlu menyiapkan file docker-compose.yml untuk menentukannya dan lokasi disk untuk disimpannya data registry.
Di sini, akan di setting konfigurasi directory bernama docker-registry di server utama. Berikut instruksinya.
$ mkdir ~/docker-registry $ cd ~/docker-registry
Buat directory data untuk menyimpan images.
$ mkdir data
Buat file docker-compose.yml.
$ nano docker-compose.yml
Pastekan script di bawah ini.
version: '3' services: registry: image: registry:2 ports: - "5000:5000" environment: REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /data volumes: - ./data:/data
Penjelasan:
Service yang digunakan nantinya sebagai registry, dan image akan di set ke registry, versi 2. Kemudian, menggunakan port 5000. Yang nantinya setiap request ke port 5000 akan di forward ke registry.
Pada section Environment, menggunakan variable REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY ke /data, variable tersebut digunakan untuk menentukan volume mana yang digunakan untuk menyimpan data. Pada bagian volume, ditentukan directory mana yang akan digunakan sebagai tempat penyimpanan data, di sini kami menggunakan /data. Dan hanya berfungsi sebagai passthrough saja, data sebenarnya disimpan di host file system.
Lakukan konfigurasi dengan perintah di bawah ini.
$ docker-compose up
Output:
Kamu akan mendapatkan informasi warning mengenai No HTTP secret provided, perhatikan pada baris terakhir dari output di atas, menunjukkan telah berhasil mulai listen pada port 5000.
CTRL + C untuk menghentikan eksekusi.
Pada step ini kamu telah berhasil membuat konfigurasi Docker Compose untuk memulai Docker Registry agar listen ke port 5000, langkah selanjutnya adalah expose ke domain & set authentication.
Setting Nginx Port Forwarding
Setelah enable HTTPS (SSL) di domain dengan tujuan untuk mengekspos Docker Registry dengan aman, kamu perlu konfigurasi Nginx untuk meneruskan traffic dari domain ke registry container.
Ubah file virtual host yang sudah ada, misalnya pada /etc/nginx/conf.d/vps201.dewiweb.conf
Pastekan script di bawah ini sebelum penutup “}”.
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; }
Verifikasi konfigurasi.
$ nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful Restart Nginx
$ systemctl restart nginx
Untuk memastikan bahwa traffic sudah dialihkan ke registry container dengan port 5000, jalankan perintah berikut.
$ cd ~/docker-registry/ $ docker-compose up
Jika tampilan blank dan terdapat log seperti di bawah ini:
Perhatikan pada line terakhir, terdapat request GET ke browser dengan return code 200, artinya request berhasil diproses dengan baik.
CTRL + C untuk menghentikan eksekusi.
Pada step ini kamu telah berhasil setting port forwarding, langkah selanjutnya adalah setting authentication untuk kebutuhan security.
Setting Authentication
Nginx memungkinkan kamu mengatur autentikasi HTTP untuk website yang dikelola, yang dapat kamu gunakan untuk membatasi akses ke Docker Registry. Kami kana membuat file otentikasi dengan htpasswd dan menambahkan username serta kombinasi password untuk dapat diterima.
Untuk mendapatkan htpasswd, kamu bisa install apache2-utils package dengan perintah di bawah ini.
$ apt-get install apache2-utils -y
Buat file credentials di dalam directory auth.
$ mkdir ~/docker-registry/auth $ cd ~/docker-registry/auth
Ubah ninjadewa sesuai dengan username yang kamu inginkan. Kami menggunakan flag algoritma bcrypt.
$ htpasswd -Bc registry.password dewaninja
New password:
Re-type new password:
Adding password for user dewaninja
Masukkan password nya sesuai dengan yang kamu inginkan. Kemudian, ubah pada file docker-compose.yml untuk menggunakan user yang sebelumnya sudah dibuat.
$ nano ~/docker-registry/docker-compose.yml
Tambahkan yang kami beri warna merah.
version: '3' services: registry: image: registry:2 ports: - "5000:5000" environment: REGISTRY_AUTH: htpasswd REGISTRY_AUTH_HTPASSWD_REALM: Registry REGISTRY_AUTH_HTPASSWD_PATH: /auth/registry.password REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /data volumes: - ./auth:/auth - ./data:/data Save dan exit. Verifikasikan authentication nya dengan perintah. $ cd ~/docker-registry/ $ docker-compose up
Jika setting authentication nya berhasil, maka saat akses domain akan menampilkan pop-up seperti di bawah ini.
Setting Docker Registry Service
Supaya tidak perlu start manual seperti sebelumnya, kamu bisa setting Docker Registry sebagai service dengan mengubah docker-compose sebagai berikut.
$ cd ~/docker-registry/ $ nano docker-compose.yml
Tambahkan di bawah registry block:
…
restart: always
…
Save dan exit.
Kemudian, jalankan registry di background proses dengan menggunakan flag -d.
$ docker-compose up -d
Output:
[+] Running 1/1 ✔ Container docker-registry-registry-1 Started
Tambahkan Max Upload Size Nginx
Untuk kebutuhan push image ke registry, perlu tambahkan max upload pada Nginx.
$ nano /etc/nginx/nginx.conf
Tambahkan script di bawah ini pada section “http {“
... client_max_body_size 16384m; ... Kemudian save dan exit.
Restart Nginx
$ systemctl restart nginx
Publish ke Private Docker Registry
Setelah Service Docker Registry nya sudah up dan berjalan, serta bisa menerima file yang sizenya besar, kamu bisa coba push image ke sana. Kamu bisa gunakan ubuntu image dari Docker Hub, dari public Docker Registry untuk percobaan.
$ docker run -t -i ubuntu /bin/bash
Flag -i dan -t memberikan shell access ke container.
Jika berhasil, maka outputnya:
latest: Pulling from library/ubuntu 2ab09b027e7f: Pull complete Digest: sha256:67211c14fa74f070d27cc59d69a7fa9aeff8e28ea118ef3babc295a0428a6d21 Status: Downloaded newer image for ubuntu:latest [email protected]:/#
Di atas, kamu sudah berhasil masuk ke Shell Access ke Container ubuntu. Buat file /SUCCESS:
# touch /SUCCESS
Membuat file tersebut untuk mengetahui bahwa kamu sudah melakukan kustomisasi container.
Kemudian exit.
# exit
Create new image dari container yang sudah kamu customize.
$ docker commit $(docker ps -lq) test-image
Kemudian, kamu login terlebih dahulu ke Private Docker Registry.
$ docker login https://vps201.dewiweb.net
Ubah domainnya sesuai dengan domain kamu.
Output:
Username: dewaninja Password: WARNING! Your password will be stored unencrypted in /root/.docker/config.json. Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credentials-store Login Succeeded Rename image: $ docker tag test-image vps201.dewiweb.net/test-image
Push ke Private Docker Registry kamu.
$ docker push vps201.dewiweb.net/test-image
Output:
Using default tag: latest The push refers to repository [vps201.dewiweb.net/test-image] d6e5a083b3fc: Pushed b93c1bd012ab: Pushed latest: digest: sha256:560d20c1a84aceb551b08ec36fbbc18cc3f28bc809b9513092e36ba9e51f83c7 size: 736
Pull dari Private Docker Registry
Setelah image nya berhasil di push ke Private Docker Registry, saat nya kamu melakukan pull.
$ docker login https://vps201.dewiweb.net/
Ubah domainnya sesuai dengan domain kamu.
$ docker pull vps201.dewiweb.net/test-image $ docker run -it vps201.dewiweb.net/test-image /bin/bash
Lakukan ls untuk list file:
[email protected]:/# ls SUCCESS bin boot dev etc home lib lib32 lib64 libx32 media mnt opt proc root run sbin srv sys tmp usr va Terdapat “SUCCESS”, artinya berhasil pull dari latest image customized. $ exit
Kesimpulan
Jika kamu mengikuti artikel ini dari awal sampai akhir, artinya kamu telah berhasil cara membuat private Docker Registry di Ubuntu 20.04. Demikian artikel ini, jangan sungkan untuk meninggalkan ide-ide topik yang ingin kamu baca di blog Dewaweb. Semoga artikel ini membantu.