Push ke Docker Hub

Mendaftar akun, login, membuat repositori, dan mengunggah image ke Docker Hub.

Daftar isi

Image yang tersimpan di komputer lokal hanya dapat dijalankan di komputer itu, sehingga pembagian image menuntut registry, gudang image yang melayani unggahan dan unduhan melalui jaringan. Docker Hub adalah registry publik yang paling umum dipakai untuk keperluan tersebut. Topik ini membahas persiapan akun, penamaan image siap unggah, login dari CLI, pilihan visibilitas publik dan privat, serta mekanisme unggah image. Hasil akhirnya adalah image budi/catatan:1.0.0 yang dapat ditarik dari komputer lain mana pun.

Mendaftar akun dan menamai repository#

Pendaftaran akun dilakukan di hub.docker.com dan bebas biaya untuk keperluan dasar. Nama akun menjadi namespace, yaitu bagian nama image yang menunjukkan pemiliknya, sehingga akun bernama budi menghasilkan namespace budi. Selain namespace milik akun pribadi, tersedia pula namespace organisasi untuk image milik tim. Syarat mutlak unggahan hanya satu. Repository, wadah untuk satu nama image beserta seluruh versinya, harus diawali namespace milik akun yang melakukan unggah.

Dengan syarat itu, nama image siap unggah wajib berformat namespace-akun/nama-repositori:tag, dan bagian setelah titik dua disebut tag, label teks yang menunjuk satu varian image. Repository tidak wajib dibuat lebih dahulu karena Docker Hub membuatnya secara otomatis pada unggahan pertama. Meskipun demikian, membuat repository dari dasbor lebih dahulu memungkinkan visibilitasnya diatur sebelum isi pertamanya tiba. Nama repository mengikuti aturan penamaan registry, yaitu huruf kecil, angka, titik, tanda hubung, dan garis bawah.

Login dari perintah CLI#

Unggahan dikerjakan oleh daemon atas nama akun yang terverifikasi, sehingga login dilakukan terlebih dahulu dengan docker login. Perintah itu meminta nama pengguna, kemudian sandi atau personal access token, token khusus yang menggantikan sandi pada otomatisasi. Sesudah verifikasi berhasil, daemon memakai identitas itu untuk seluruh perintah yang menuntut autentikasi.

bash
# tidak-dijalankan: Docker tidak tersedia di sandbox
# login ke Docker Hub dari CLI
docker login

Perintah docker login menyimpan kredensial, data identitas yang membuktikan kepemilikan akun, pada berkas konfigurasi lokal ~/.docker/config.json. Kredensial itu dipakai ulang secara otomatis oleh sesi Docker berikutnya, sehingga login cukup dilakukan sekali per komputer. Perintah docker logout menghapusnya kembali.

Repositori publik dan privat#

Setiap repository Docker Hub memiliki visibilitas yang menentukan siapa yang dapat menarik isinya. Repository publik dapat ditarik siapa pun tanpa login, sedangkan repository privat hanya dapat ditarik akun yang diberi izin oleh pemiliknya. Jumlah repository privat yang tersedia bergantung pada paket akun, sedangkan repository publik tidak dibatasi jumlahnya. Visibilitas diatur pada saat repository dibuat dan dapat diubah kemudian dari dasbor.

SifatAkses penarikanCatatan
Publiksiapa pun, tanpa loginisinya dapat dibaca dan dibedah seluruh pengguna internet
Privatakun yang diberi izinjumlah repository bergantung paket akun

Sementara itu, penarikan image publik tanpa login tunduk pada batas pemakaian anonim yang diterapkan Docker Hub. Batas itu berlaku pada operasi pull, proses menarik image dari registry ke komputer lokal, dan dihitung per rentang waktu tertentu. Penarikan dengan login akun Docker Hub menempati kuota yang lebih besar daripada penarikan anonim. Nilai pasti kuota tidak dicantumkan di sini karena dapat berubah sewaktu-waktu, sehingga halaman resmi Docker Hub menjadi rujukan untuk angka terkininya.

Proses push dan penggunaan ulang layer#

Proses unggah disebut push, pengiriman image dari komputer lokal menuju registry. Perintahnya adalah docker push dengan nama lengkap image sebagai argumennya. Nama itulah yang menentukan repository tujuan, sehingga penamaan pada bagian sebelumnya menjadi syarat keberhasilannya.

bash
# tidak-dijalankan: Docker tidak tersedia di sandbox
# mengunggah image catatan ke Docker Hub
docker push budi/catatan:1.0.0

Push bekerja per layer, bukan per image utuh. Daemon membaca manifest, daftar isi image yang merujuk setiap layer beserta penandanya, lalu memeriksa layer mana yang sudah dimiliki registry. Hanya layer yang belum ada yang dikirim, sedangkan layer yang sama dengan image lain dilewati dengan status Layer already exists. Keluaran perintah menampilkan baris per layer berikut progres unggahannya, ditutup baris yang mencantumkan digest, penanda isi image yang dihitung dari hash.

Repository hasil unggahan dapat diperiksa pada dasbor Docker Hub, lengkap dengan daftar tag dan ukuran repositorynya. Image yang sama dapat dibagikan dengan beberapa tag sekaligus, misalnya 1.0.0 dan 1.0, dengan menjalankan docker push sekali untuk setiap tag. Unggahan tag kedua selesai dalam sekejap karena seluruh layer-nya sudah berada di registry.

Ringkasan#

  • Unggahan ke Docker Hub hanya diterima pada repository yang berformat namespace-akun/nama-repositori:tag, dengan namespace yang harus milik akun yang melakukan unggah.
  • docker login memverifikasi akun lalu menyimpan kredensial pada ~/.docker/config.json, sedangkan docker logout menghapusnya.
  • Repository publik dapat ditarik siapa pun, sedangkan repository privat dibatasi akun yang diberi izin dan jumlahnya bergantung paket akun.
  • Push mengunggah hanya layer yang belum ada di registry, sehingga layer yang dipakai bersama image lain tidak dikirim ulang.

Referensi#