Sebelum mengetik satu perintah pull pun, kita perlu tahu satu aturan main: Docker Hub membatasi jumlah tarik image per pengguna. Pengguna anonim — tanpa docker login — dibatasi 100 pull per 6 jam per alamat IPv4, atau per blok /64 untuk IPv6. Akun gratis plan Personal menaikkan kuota menjadi 200 pull per 6 jam plus satu repositori privat, sedangkan plan Pro, Team, dan Business menikmati kuota fair-use tanpa batas keras. Melebihi batas membuat pull berikutnya ditolak dengan galat toomanyrequests dan kode HTTP 429 — skenario yang mudah terjadi pada mesin CI yang menarik puluhan image pada setiap job.
| Jenis akses | Batas tarik | Catatan |
|---|---|---|
| Anonim, tanpa login | 100 per 6 jam | dihitung per alamat IPv4 atau blok /64 IPv6 |
| Akun plan Personal | 200 per 6 jam | gratis, plus satu repositori privat |
| Plan Pro, Team, dan Business | tanpa batas keras | kebijakan fair-use |
Batasan ini tidak perlu menakutkan untuk latihan sehari-hari — puluhan pull masih sangat jauh dari ambang batas. Yang penting adalah kesadaran: setiap docker pull adalah transaksi berbayar kuota, sehingga memahami output dan perilakunya jauh lebih berharga daripada mencoba-coba tanpa arah. Rate limit ini sudah kita kenali sekilas pada Chapter Image, Container, dan Registry; sekarang kita hadapi langsung dari sisi praktiknya.
Menarik Image Pertama dari Nol #
Perintah docker pull mengunduh image dari registry ke penyimpanan lokal — langkah yang selama ini berlangsung otomatis di balik docker run sejak Chapter Menjalankan Container Pertama. Untuk mengamati anatominya dengan tuntas, kita membutuhkan mesin yang benar-benar kosong. Katakanlah Siti baru saja memasang Docker Engine pada server uji baru dan siap menarik image pertamanya: nginx tanpa tag, yang berarti tag bawaan latest. Berikut yang tampil di terminal Siti:
$ docker pull nginxOutput yang Dihasilkan:
latest: Pulling from library/nginx
b97706ca828b: Pull complete
ca0385813dba: Pull complete
d3c681d06bd2: Pull complete
9a3f61c5e2b8: Pull complete
6e08c2f4a1d3: Pull complete
2c7e9b1f5d4a: Pull complete
Digest: sha256:348334896a6815a9c39de3ae8b7c3a37d64efbeac71edc6a2f83ee6e0f77a0d5
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latestMari kita telaah setiap baris output di atas:
latest: Pulling from library/nginx— Docker mengonfirmasi referensi yang ditarik: taglatestdari repositorilibrary/nginx; tag ini menjadi bawaan karena kita tidak menyebut tag apa pun.- Enam baris layer
Pull complete— satu baris mewakili satu layer image; ID 12 karakter sepertib97706ca828badalah awalan digest layer.Pull completeberarti layer selesai diunduh dan diekstrak ke penyimpanan lokal. Digest:— sidik jarisha256:atas manifest image: daftar seluruh layer beserta konfigurasi metadatanya. Digest adalah identitas permanen image — angka inilah yang nanti kita pakai untuk mengunci versi secara mutlak.Status: Downloaded newer image for nginx:latest— mesin Siti belum memiliki image ini sama sekali, sehingga yang tersimpan sekarang benar-benar baru.docker.io/library/nginx:latest— nama lengkap yang diberikan daemon: registrydocker.io, namespacelibrary, repositoringinx, taglatest. Anatomi nama panjang ini kita bedah tuntas pada Chapter Memahami Image Tag.
Layer Diunduh Secara Paralel #
Output final di atas terasa berurutan, padahal di terminal aslinya keenam layer diunduh serentak. Daemon membuka beberapa koneksi paralel ke registry; layer yang belum kebagian jatah koneksi tampil sebagai Waiting dan mulai berjalan begitu ada koneksi yang kosong. Progres tiap layer digambar ulang di baris yang sama setiap sepersekian detik — itulah progres bar yang akrab kita lihat saat menarik image besar. Berikut tangkapan layar di tengah proses, disederhanakan agar terbaca (ilustratif):
latest: Pulling from library/nginx
b97706ca828b: Downloading [=====> ] 11.2MB/31.4MB
ca0385813dba: Downloading [==========> ] 14.9MB/16.8MB
d3c681d06bd2: Downloading [=======> ] 9.7MB/21.9MB
9a3f61c5e2b8: Downloading [==> ] 4.8MB/22.6MB
6e08c2f4a1d3: Downloading [> ] 1.9MB/43.7MB
2c7e9b1f5d4a: WaitingSetelah seluruh layer selesai, Docker mencetak ringkasan akhir per baris layer — bentuk Pull complete yang sudah kita bedah di atas. Angka pada progres bar adalah ukuran terkompresi saat diunduh; setelah diekstrak ke penyimpanan lokal, keenam layer menempati sekitar 187MB — angka SIZE yang akan tampil pada docker images di Chapter Melihat Image Lokal. Progres bar lenyap begitu proses usai, itulah sebabnya hasil akhirnya tampak begitu rapi. Kelak, ketika Siti menarik image lain yang berbagi layer dengan nginx:latest, baris layer yang sama akan berubah menjadi Already exists — penghematan yang sudah kita buktikan pada Chapter Konsep Image Layer.
Menarik Varian dengan Basis Berbeda #
nginx hadir dalam banyak varian — alasan memilihnya kita bahas tuntas pada Chapter Memahami Image Tag. Varian alpine membangun nginx di atas basis Alpine Linux yang jauh lebih kecil. Mari kita lihat apa yang terjadi ketika Siti menarik varian tersebut ke server yang barusan menyimpan nginx versi Debian:
$ docker pull nginx:1.29-alpineOutput yang Dihasilkan:
1.29-alpine: Pulling from library/nginx
d4c8b2f7a9e1: Pull complete
3f6b1c9e2a7d: Pull complete
7e2d9f4c1b8a: Pull complete
c9f3a7e5b1d2: Pull complete
5b1e8c3a9f7d: Pull complete
Digest: sha256:6d9f2c8a4e7b1d5f3c9a2e8b7d4f1c6a9e3b5d7f2c8a4e1b6d9f3c7a5e2b8d1f
Status: Downloaded newer image for nginx:1.29-alpine
docker.io/library/nginx:1.29-alpineMari kita telaah output di atas:
1.29-alpine: Pulling from library/nginx— tag eksplisit menunjuk varian Alpine dari nginx 1.29.- Lima baris
Pull completetanpa satu punAlready exists— tidak ada layer yang berbagi dengannginx:latest, karena basis Alpine dan basis Debian adalah dua filesystem yang berbeda total; kelima layer harus diunduh dari nol. Digest:— digest varian alpine tentu berbeda: susunan layernya sama sekali tidak sama dengan versi Debian.Status:dan baris nama lengkap — image baru tersimpan dengan namadocker.io/library/nginx:1.29-alpine.
Perhatikan pula jumlah layer: lima, bukan enam — image alpine memang lebih ramping dari rekan Debian-nya, dengan ukuran terpasang 47.9MB berbanding 187MB. Bayangkan sebuah mesin yang dipenuhi puluhan service berbasis alpine: layer basis Alpine yang sama hanya tersimpan sekali dan hanya diunduh sekali untuk semuanya. Bandingkan dengan mesin yang hanya memakai varian Debian — image alpine ini tidak akan berbagi satu layer pun dengannya.
Menarik Semua Tag Sekaligus #
Suatu saat kita mungkin perlu menyimpan seluruh varian sebuah repositori — misalnya menyiapkan mirror internal atau menguji kompatibilitas antar versi. Flag --all-tags atau bentuk pendeknya -a menarik setiap tag yang dimiliki repositori. Untuk nginx, artinya puluhan tag sekaligus: versi mainline, stable, alpine, perl, beserta turunan versi minor masing-masing:
$ docker pull -a nginxOutput yang Dihasilkan:
latest: Pulling from library/nginx
Digest: sha256:348334896a6815a9c39de3ae8b7c3a37d64efbeac71edc6a2f83ee6e0f77a0d5
Status: Image is up to date for nginx:latest
docker.io/library/nginx:latest
1.29-alpine: Pulling from library/nginx
Digest: sha256:6d9f2c8a4e7b1d5f3c9a2e8b7d4f1c6a9e3b5d7f2c8a4e1b6d9f3c7a5e2b8d1f
Status: Image is up to date for nginx:1.29-alpine
docker.io/library/nginx:1.29-alpine
...
1.29-perl: Pulling from library/nginx
b97706ca828b: Already exists
ca0385813dba: Already exists
d3c681d06bd2: Already exists
...
e7c4b9f2a6d1: Pull complete
...
Digest: sha256:f3b8d2a9c7e5f1b6d4a8c2f9e7b5d3a1f6c9e2b8d4a7f5c3e9b1d6a8f4c25e7a
Status: Downloaded newer image for nginx:1.29-perl
docker.io/library/nginx:1.29-perl
...Output di atas dipotong di dua tempat: di antara dan di akhir baris ... masih ada puluhan blok lain — tag seperti 1.29, 1.29.4, alpine, hingga varian-versi lama turut diperiksa dan ditarik. Mari kita telaah tiga blok yang tampil:
- Blok
latestdan1.29-alpine— keduanya sudah tersimpan di server Siti, sehingga Docker cukup menjawabImage is up to datetanpa satu baris layer pun; manifest tetap diperiksa ke registry, hanya tidak ada yang perlu diunduh. - Blok
1.29-perl— image baru bagi Siti, tetapi perhatikan barisAlready existsdi dalamnya: varian perl berdiri di atas basis Debian yang sama dengannginx:latest, sehingga layer-layer bawahnya sudah tersimpan dan hanya layer tambahan berisi pustaka perl yang benar-benar diunduh. - Blok-blok lain di balik
...— setiap tag diproses satu per satu dengan pola output yang sama seperti pull biasa; semuanya berakhir dengan baris nama lengkap masing-masing.
Menarik Image Berdasarkan Digest #
Tag latest hari ini dan tag latest bulan depan bisa menunjuk dua image yang berbeda — tag adalah label yang bisa digeser penerbitnya. Docker menyediakan cara menarik image tanpa melibatkan tag sama sekali: referensi berdasarkan digest, ditulis repositori@sha256: diikuti 64 karakter heksadesimal lengkap. Mari kita tarik nginx yang sama persis dengan yang sudah dimiliki Siti, kali ini melalui digest yang tercetak pada pull pertama:
$ docker pull nginx@sha256:348334896a6815a9c39de3ae8b7c3a37d64efbeac71edc6a2f83ee6e0f77a0d5Output yang Dihasilkan:
docker.io/library/nginx@sha256:348334896a6815a9c39de3ae8b7c3a37d64efbeac71edc6a2f83ee6e0f77a0d5: Pulling from library/nginx
Digest: sha256:348334896a6815a9c39de3ae8b7c3a37d64efbeac71edc6a2f83ee6e0f77a0d5
Status: Image is up to date for nginx@sha256:348334896a6815a9c39de3ae8b7c3a37d64efbeac71edc6a2f83ee6e0f77a0d5
docker.io/library/nginx@sha256:348334896a6815a9c39de3ae8b7c3a37d64efbeac71edc6a2f83ee6e0f77a0d5Mari kita telaah output di atas:
- Baris pertama — Docker menggemakan referensi lengkap yang diminta; tidak ada tag yang disebut karena memang tidak diperlukan.
Digest:— karakter demi karakter sama dengan digest pada outputdocker pull nginxdi awal chapter: referensi ini menunjuk image yang sama, dan digest tidak akan pernah berubah selama isi image tidak berubah.Status: Image is up to date— karena digest tersebut sudah ada di penyimpanan lokal, nol layer diunduh; inilah bentuk paling ekstrem dari penghematan layer.- Baris terakhir — nama lengkap kini memuat digest alih-alih tag, bentuk yang akan kita pakai untuk mengunci image secara mutlak.
Perintah ini terasa berlebihan untuk latihan — mengetik 64 karakter heksadesimal bukan aktivitas yang menyenangkan. Kekuatannya baru terasa saat kita menulis berkas konfigurasi produksi atau pipeline CI yang wajib memberikan hasil identik selamanya: tag bisa bergeser diam-diam, digest tidak pernah. Justru untuk itulah digest mendapat chapter sendiri — Image Digest — segera setelah kita menuntaskan urusan penamaan image.
Server uji Siti kini menyimpan nginx dalam berbagai wujud: latest, 1.29-alpine, 1.29-perl, dan selebihnya dari flag -a. Pertanyaan berikutnya pasti muncul: bagaimana cara melihat seluruh image yang sudah tersimpan itu, lengkap dengan ukuran dan identitasnya? docker images beserta kerabat filternya menjawabnya — materi Chapter Melihat Image Lokal.
Referensi #
- docker image pull — CLI Reference
— sintaks pull berdasarkan tag, digest, dan
--all-tags. - Docker Hub — pembatasan jumlah tarik image per paket akun.
- nginx di Docker Hub — halaman repositori nginx beserta daftar tag dan variannya.