Docker for DevOps engineer 6 minute read

Hai semuanya, di materi kali ini kita akan membahas Insecure Registry dengan menggunakan Nexus OSS, diantaranya yang akan kita bahas yaitu

  1. System requirement to install Nexus OSS
  2. Installing Nexus OSS
    • Setup Proxy Repository Docker from Docker HUB
    • Setup Proxy Repository Docker from other registry
    • Setup Hosted Repository Docker
    • Setup Public Group Repository Docker
  3. How to Push & Pull Docker images from Insecure Registry
    • Pulling docker image from Docker Hub using Proxy
    • Pulling docker image from an other registry using proxy repository
    • Push own docker image to hosted registry.

System Requirement

Untuk install Nexus OSS, kita bisa install di Windows, Mac, atau Linux dengan system required seperti berikut

  1. Java runtime environtment
  2. RAM, The default JRE min and max heap size of NXRM3 is pre-configured to be 1200MB, which should be considered an absolute minimum. The codebase will consume approximately another 1GB. So factoring in operating system overhead you will need at least 4GB of RAM on a dedicated NXRM host, assuming no other large applications are running on the machine.
  3. CPU, NXRM performance is primarily bounded by IO (disk and network) rather than CPU. So any reasonably modern 4 core (or better) CPU will generally be sufficient for normal uses of NXRM.
  4. Storage, Nexus Repository Manager 3 installed consumes around 500 MB.

Installing Nexus OSS

Sekarang kita install, karena disini saya menggunakan Server Linux Centos 8, berikut adalah cara installnya

  • Download dulu nexus sonatype oss
  • Setelah filenya di download, kemudian extract dengan perintah berikut
tar -zxvf nexus-<version>.unix.tar.gz
  • Pindahkan ke lokasi yang diiginkan, sebagai contoh saya pindahkan ke /opt seperti berikut
sudo mkdir -p /opt/nexus && \
sudo mv nexus-<version> /opt/nexus

## create symbolic executeable
cd /opt/nexus && \
ln -s nexus-<version>/bin/nexus nexus
  • Buat user nexus di linux
sudo adduser nexus && \
sudo chown nexus:nexus /opt/nexus
  • Kemudian kita buat service file dengan nama nexus.service di folder /etc/systemd/system seperti berikut

  • Yang terakhir kita jalankan servicenya dengan perintah berikut:

systemctl enable --now nexus.service

Kemudian coba akses, http://localhost:8081 maka hasilnya seperti berikut:

Nexus Repository on localhost

Configure Docker Registry

Untuk membuat registry di nexus kita perlu login dulu sebagai Administrator, secara default user admin passwordnya by default di simpan pada file yang lokasinya di /<path-install>/sonarworks/nexus3/initial_password. setelah itu pilih Setting seperti berikut:

settings

Setelah itu kita akan membuat repository, Ada 3 tipe repository

  1. Proxy, digunakan sebagai mirror registry dari public atau private registry lain.
  2. Hosted, digunakan untuk menyimpan image yang kita publish/push
  3. Group, digunakan untuk mengelompokan proxy dan hosted registry.

Jadi kita akan buat semuanya,

Setup proxy registry

Pertama kita buat dulu proxy registry. Dengan cara seperti berikut:

Create new repository -> docker (proxy)

Kemudian isi form seperti berikut configurasinya:

  1. name [bebas tapi harus di isi]: docker-registry-io
  2. online: di checklist
  3. remote storage [boleh pake registry lainnya]: https://registry-1.docker.io
  4. Docker Index [pilih]: Use Docker Hub
  5. Blob store [pilih bebas]: default
  6. Setelah itu click Save

Setup hosted registry

Setelah itu, kita setup untuk menyimpan image yang kita miliki ke private-registry dengan menggunakan docker (hosted)

Create new repository -> docker (hosted)

Kemudian isi form seperti berikut configurasinya:

  1. name [bebas tpi harus di isi]: docker-repository
  2. online: di checklist
  3. HTTP [di checklist dan di isi port contohnya]: 8087
  4. Allow anonnymuous docker pull [di checklist klo mau yang bisa ngepull tanpa login]: uncheked
  5. Enable Docker V1 API [docker engine version]: unchecked
  6. Deployment policy [Tergantung kebutuhan, klo saya pilih Allow redeploy supaya tanpa ganti tags]: Allow redeploy
  7. Setelah itu di Save
  8. Kemudian kita allow/open port 8087 dari firewall supaya bisa di access
sudo firewall-cmd --zone=public --add-port=8087/tcp --permanent && \
sudo firewall-cmd --reload

Setup group registry

Group repository, untuk mengkases ke-2 repository yang telah kita buat dalam satu port connection saja. atau kita bisa pisahkan misalnya yang push repository menggunakan port 8087 sedangkan yang pull bisa menggunkan group repository ini.

Create new repository -> docker (group)

Kemudian isi form seperti berikut configurasinya:

  1. Name [bebas, tapi harus diisi]: docker-repository-public
  2. Online: checked
  3. HTTP: 8086
  4. Allow anonnymuous docker pull [di checklist klo mau yang bisa ngepull tanpa login]: uncheked
  5. Blob store: default
  6. Member repositories: pilih semua repository yang kita telah buat seperti berikut: group docker selected
  7. Setelah itu kita Save
  8. Dan yang terakhir sama seperti sebelumnya, kita allow/open port 8086
sudo firewall-cmd --zone=public --add-port=8086/tcp --permanent && \
sudo firewall-cmd --reload

Setup authentication

Sekarang kita setup untuk authenticationnya, kita bisa menu Security -> Users Kemudian kita buat usernya

Setelah membuat user kita setup untuk Realm di menu Security -> Realms untuk mengaktifkan pull tanpa login ke docker dulu, dengan cara Aktifkan Docker Bearer Token Realm seperti berikut:

docker realms

Configure insecure-connection

docker-engine hanya mengijinkan kita untuk melakukan pull/push dari registry docker itu sendiri, jadi kita harus daftarkan di docker-engine jika di mac kita bisa tambahkan dari Docker-Desktop -> Preferences -> Daemon -> insecure registries inputan [ip-nexus-server:http-connection] contohnya: localhost:8086, localhost:8087, domain.com:8087 dan lain-lain Setelah itu Apply & restart

Atau jika menggunakan linux:

Buat atau tambahkan ke file /etc/docker/daemon.json seperti berikut

Kemudian restart docker dengan perintah seperti berikut:

systemctl restart docker.service

Testing login

Sebelum kita, melakukan pull & push kita harus login dulu ke private registry tersebut dengan perintah berikut:

docker login -u admin -p <your-password> <your-nexus-docker-registry>
  • Username: User yang kita setup di nexus repository
  • Password: input passwordnya dari user tersebut

Jika ada message: Login Succeeded berarti anda sudah bisa melakukan push ke repository

Setelah itu, kita contohnya kita akan pull image postgresql:9.3 dari private registry. berikut adalah perintahnya:

docker pull <your-nexus-docker-registry>/postgresql:9.3

Dan sekarang kita coba push back ke private registry

For Bash script:

docker pull mysql:5.7 && \
docker tag mysql:5.7 <your-nexus-docker-registry>/database/mysql:5.7 && \
docker push <your-nexus-docker-registry>/database/mysql:5.7

For Powershell script:

docker pull mysql:5.7 `
| docker tag mysql:5.7 <your-nexus-docker-registry>/database/mysql:5.7 `
| docker push <your-nexus-docker-registry>/database/mysql:5.7

berikut hasilnya:

docker-pushed