Cara Mengatur dan Menggunakan Registri Docker Pribadi

Cara Mengatur dan Menggunakan Registri Docker Pribadi
February 22, 2023 No Comments Docker G6k1JiPxqm

Perkenalan

Jika Anda ingin memastikan kelancaran pengembangan CI/CD menggunakan platform Docker, pertimbangkan untuk menyiapkan registri Docker pribadi. Tidak hanya mempercepat pengiriman, tetapi juga merupakan cara praktis untuk mendistribusikan sumber daya dan berbagi gambar Docker di antara kontainer.

Dalam tutorial ini, pelajari cara menyiapkan registri Docker pribadi dan mengonfigurasinya untuk aksesibilitas eksternal. 

Prasyarat

  • Akses ke akun pengguna dengan   hak akses sudo  atau  root
  • Server klien
  • Server untuk Docker Registry pribadi
  • Docker dan Docker–Tulis di kedua server
  • Nginx di server Docker Registry pribadi

Apa itu Registri Docker Pribadi

Docker Registry adalah aplikasi sisi server dan bagian dari produk platform-as-a-service Docker. Ini memungkinkan Anda untuk menyimpan secara lokal semua gambar Docker Anda ke dalam satu lokasi terpusat.

Saat Anda menyiapkan registri pribadi, Anda menetapkan server untuk berkomunikasi dengan Docker Hub melalui internet. Peran server adalah menarik dan mendorong gambar, menyimpannya secara lokal, dan membagikannya di antara host Docker lainnya.

Dengan menjalankan registri yang dapat diakses secara eksternal, Anda dapat menghemat sumber daya berharga dan mempercepat proses. Perangkat lunak ini memungkinkan Anda menarik gambar tanpa harus terhubung ke Docker Hub, menghemat bandwidth, dan mengamankan sistem dari potensi ancaman online.

Host Docker dapat mengakses repositori lokal melalui koneksi yang aman dan menyalin image dari registry lokal untuk membangun container mereka sendiri.

Sebelum kamu memulai

Seperti yang tercantum di bagian prasyarat, panduan ini menganggap Anda sudah menginstal Docker dan Docker-Compose di semua server.

Untuk memverifikasi bahwa Anda memiliki perangkat lunak yang diperlukan, Anda dapat memeriksa versi rilisnya dengan perintah:

docker version
Memeriksa dan memverifikasi versi Docker di Ubuntu 18.04.
docker-compose version
Memeriksa versi Docker Compose.

Hal lain yang ingin Anda pastikan adalah bahwa layanan Docker telah dimulai dan diatur untuk diaktifkan saat boot :

sudo systemctl start docker
sudo systemctl enable docker
Memastikan bahwa layanan Docker telah dimulai dan diatur untuk diaktifkan saat boot.

Catatan : Jika Anda memerlukan bantuan untuk menginstal Docker di sistem Anda, Anda dapat merujuk ke panduan kami untuk menyiapkan Docker di Debian , CentOS 7 , atau Ubuntu 18.04 .

Instal dan Konfigurasi Registri Docker Pribadi

Langkah 1: Buat Direktori Registri

Mulai mengonfigurasi server yang akan menghosting registri pribadi. Pertama-tama Anda ingin membuat direktori baru yang akan menyimpan semua file konfigurasi yang diperlukan.

1. Perintah berikut membuat direktori proyek baru berlabel registrydan dua subdirektori – nginxdan auth:

mkdir -p registry/{nginx, auth}

2. Pindah ke registrydan buat dua direktori baru di dalamnya nginx:

cd registry/
mkdir -p nginx/{conf.d/,ssl}

3. Lihat hierarki direktori yang baru dibuat dengan mengetik:

tree
Hierarki direktori yang baru dibuat.

Langkah 2: Buat Docker-Compose Script dan Tentukan Layanan

Selanjutnya, Anda perlu membuat dan mengonfigurasi docker-compose.ymlskrip baru. Skrip menentukan versi Docker-Compose, serta layanan yang Anda perlukan untuk menyiapkan registri pribadi.

1. Buat file baru, saat berada di registrydirektori, dengan editor teks pilihan Anda:

nano docker-compose.yml

2. Ada beberapa hal yang perlu Anda tentukan dalam file konfigurasi ini, jadi ikuti dengan cermat dan hati-hati tambahkan setiap bagian konten:

version: '3'
services:
#Registry
  registry:
    image: registry:2
    restart: always
    ports:
    - "5000:5000"
    environment:
      REGISTRY_AUTH: htpasswd
      REGISTRY_AUTH_HTPASSWD_REALM: Registry-Realm
      REGISTRY_AUTH_HTPASSWD_PATH: /auth/registry.passwd
      REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /data
    volumes:
      - registrydata:/data
      - ./auth:/auth
    networks:
      - mynet
#Nginx Service
  nginx:
    image: nginx:alpine
    container_name: nginx
    restart: unless-stopped
    tty: true
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx/conf.d/:/etc/nginx/conf.d/
      - ./nginx/ssl/:/etc/nginx/ssl/
    networks:
      - mynet
#Docker Networks
networks:
  mynet:
    driver: bridge
#Volumes
volumes:
  registrydata:
    driver: local

3. Simpan dan tutup file.

Konfigurasi menjelaskan:

Pertama, Anda menentukan versi Docker-Compose yang ingin Anda gunakan. Dalam contoh ini adalah version: '3'. Kemudian Anda beralih ke mendefinisikan semua komponen registri Docker, dimulai dengan layanan #Registry.

Docker Registry pada dasarnya adalah wadah yang menjalankan citra registri, itulah sebabnya citra tersebut didefinisikan sebagai registry:2.

Menambahkan restart: alwaysbaris memastikan Anda memulai Docker Registry sebagai layanan segera setelah Anda mem-boot sistem.

Menentukan port 5000:5000menginstruksikan Docker bahwa host dan container yang berjalan berkomunikasi melalui nomor port yang ditentukan.

Layanan ini akan me-mount volume buruh pelabuhan registrydata dan direktori lokal auth, bersama dengan file autentikasinya registry.passwd.

Konfigurasi skrip Docker Compose dijelaskan

Elemen berikutnya adalah #Nginx Service. Konfigurasi menguraikan layanan berjalan pada port 80:80(HTTPS) dan 443:443(HTTPS). Ini akan memasang direktori lokal untuk konfigurasi virtual ( conf.d) dan sertifikat SSL ( ssl).

Terakhir, atur mynetdengan driver jembatan dan  registrydatadengan driver lokal sebagai parameter untuk jaringan kustom.

Langkah 3: Siapkan Penerusan Port Nginx

Langkah selanjutnya adalah mengonfigurasi host virtual Nginx dan mengonfigurasinya untuk layanan Nginx.

1. Pindah ke nginx/conf.d/direktori yang Anda buat pada langkah sebelumnya:

cd nginx/conf.d/

2. Buat file virtual host baru bernama registry.conf:

nano registry.conf

3. Tambahkan konten berikut:

upstream docker-registry {
    server registry:5000;
}

server {
    listen 80;
    server_name registry.example-server.com;
    return 301 https://registry.example-server.com$request_uri;
}

server {
    listen 443 ssl http2;
    server_name registry.example-server.com;

    ssl_certificate /etc/nginx/ssl/fullchain.pem;
    ssl_certificate_key /etc/nginx/ssl/privkey.pem;

    # Log files for Debug
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;

    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://docker-registry;
        proxy_set_header  Host              $http_host;
        proxy_set_header  X-Real-IP         $remote_addr;
        proxy_set_header  X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header  X-Forwarded-Proto $scheme;
        proxy_read_timeout                  900;
    }

}

4. Simpan file dan kembali ke terminal shell.

Langkah 4: Tingkatkan Ukuran Upload File Nginx

Secara default, Nginx membatasi ukuran unggahan file menjadi 1MB . Karena banyak gambar Docker melebihi angka ini, praktik terbaiknya adalah meningkatkan ukuran file maksimum di Nginx. Pastikan Anda dapat mengupload gambar dengan ukuran file yang lebih besar dengan menyetelnya max_body_sizeke 2GB .

1. Buat file konfigurasi tambahan dengan:

nano additional.conf

2. Tambahkan baris berikut di file:

client_max_body_size 2G;

3. Simpan dan tutup file.

Langkah 5: Konfigurasi Sertifikat SSL dan Otentikasi Dasar

1. File sertifikat SSL domain Anda perlu disalin ke ssldirektori. Untuk melakukannya, jalankan perintah:

cp /path/to/ssl/fullchain.pem ssl/
cp /path/to/ssl/privkey.pem ssl/

2. Kemudian, pindah ke authdirektori:

cd auth

3. Dan minta file kata sandi baru yang dinamai registry.passwduntuk pengguna Anda:

htpasswd -Bc registry.passwd example

4. Ketik kata sandi yang kuat dan ketik ulang untuk konfirmasi. Dengan ini, Anda telah menambahkan kata sandi untuk pengguna Anda.

Catatan : Jika Anda belum memiliki sertifikat, lihat cara membuat permintaan penandatanganan sertifikat openSSL .

Langkah 6: Tambahkan Sertifikat Root CA

Sekarang Anda perlu menambahkan sertifikat Root CA ke Docker dan sistem yang sedang Anda kerjakan.

1. Ekspor .crtfile dengan OpenSSL dengan mengetik:

openssl x509 -in rootCA.pem -inform PEM -out rootCA.crt

2. Salin sertifikat Root ke direktori baru untuk sertifikat Docker:

mkdir -p /etc/docker/certs.d/registry.example-server.com/
cp rootCA.crt /etc/docker/certs.d/example-server.com/

3. Selanjutnya, salin sertifikat yang sama ke direktori baru lainnya dengan nama /usr/share/ca-certificate/extra:

mkdir -p .usr.share.ca-certificates/extra/
cp rootCA.crt /usr/share/ca-certificates/extra/

4. Konfigurasi ulang ca-certificatepaket yang baru dibuat dengan mengetik:

dpkg-reconfigure ca-certificates

5. Terakhir, mulai ulang layanan Docker:

systemctl restart docker

Langkah 7: Jalankan Docker Registry

Dengan semua yang sudah diatur dan siap, Anda dapat membangun wadah Docker Registry menggunakan Docker-Compose:

docker-compose up -d

Periksa apakah Registry dan layanan Nginx sedang berjalan:

docker-compose ps
netstat -plntu

Outputnya akan menunjukkan kepada Anda layanan dan port yang ditugaskan.

Tarik Gambar dari Docker Hub ke Registri Pribadi

1. Untuk menyimpan gambar secara lokal dari Docker Hub ke registri pribadi Anda, gunakan docker pullperintah:

docker pull [docker_image]

2. Tambahkan tag ke gambar untuk melabelinya untuk registri pribadi:

docker image tag [docker_image] registry.example-server.com/[new_image_name]

3. Anda dapat memeriksa apakah image Docker tersedia secara lokal dengan meminta sistem untuk mencantumkan semua image yang disimpan secara lokal:

docker images

Cara Push Docker Image ke Private Registry

1. Untuk mendorong gambar dari host Docker ke server registri Docker pribadi, pertama-tama Anda harus masuk ke registri dengan perintah:

docker login https://registry.example-server.com/v2/

2. Ketikkan nama pengguna dan kata sandi yang Anda tetapkan untuk host virtual.

3. Sekarang Anda dapat mendorong gambar Anda ke registri pribadi dengan perintah:

docker push registry.example-server.com/[new_image_name]

4. Lihat daftar gambar yang disimpan di registri Docker pribadi:

http -a example https://registry.example-server.com/v2/_catalog

Kesimpulan

Anda sekarang telah berhasil menyiapkan registri Docker pribadi di Ubuntu 18.04, bersama dengan host virtual Nginx dan autentikasi dasar. Gunakan itu untuk mengelola citra Docker dan membuat kontainer di host Docker jarak jauh.

About The Author

Leave a reply

Your email address will not be published. Required fields are marked *