Repository budi/katalog-web sudah menunggu, tetapi daemon di laptop Budi belum memperkenalkan diri kepada siapa pun. Autentikasi adalah syarat untuk dua hal sekaligus: hak melakukan push ke repository milik kita, dan kuota pull terautentikasi yang lebih besar daripada kuota anonim pada Chapter Docker Hub. Chapter ini membedah docker login beserta seluruh detail di sekitarnya — personal access token sebagai pengganti password, lokasi penyimpanan kredensial beserta risikonya, credential helper sebagai penawarnya, docker logout, dan cara memverifikasi identitas yang sedang dipakai daemon.
Login Interaktif ke Docker Hub #
Bentuk paling sederhana dari autentikasi adalah docker login tanpa argumen; CLI menanyakan identitas kita secara interaktif:
$ docker loginOutput yang Dihasilkan:
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: budi
Password:
WARNING! Your password will be stored unencrypted in /home/budi/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credential-stores
Login SucceededMari kita telaah output di atas:
- Baris
Username:danPassword:— prompt interaktif; password diketik tanpa digema ke layar, seperti perilaku login pada umumnya. WARNING! Your password will be stored unencrypted— CLI mengingatkan bahwa kredensial akan ditulis ke berkasconfig.jsondalam bentuk yang tidak terenkripsi; peringatan ini muncul karena credential helper belum dikonfigurasi.Login Succeeded— kredensial diterima registry dan tersimpan lokal; mulai saat inidocker pushdandocker pullberjalan atas nama akunbudi.
Kita juga bisa mempersingkat sesi dengan menyebut username sebagai argumen, sehingga CLI hanya menanyakan password:
$ docker login -u budiOutput yang Dihasilkan:
Password:
WARNING! Your password will be stored unencrypted in /home/budi/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credential-stores
Login SucceededPersonal Access Token sebagai Pengganti Password #
Kolom Password: pada prompt di atas tidak harus diisi password akun. Praktik yang lebih aman adalah mengisi personal access token (PAT) — token yang dibuat khusus untuk CLI melalui Account Settings → Personal access tokens di Docker Hub. Akun yang mengaktifkan two-factor authentication bahkan diwajibkan memakai PAT untuk login CLI, karena password utama ditolak.
Di Mana Kredensial Disimpan #
Secara bawaan, hasil login disimpan di berkas ~/.docker/config.json. Mari kita intip isinya setelah Budi login:
{
"auths": {
"https://index.docker.io/v1/": {
"auth": "YnVkaTpyYWhhc2lhMTIz"
}
}
}Nilai auth tampak seperti bahasa rahasia, padahal bentuknya sederhana: base64 dari string username:password. Kita bisa membuktikannya sendiri di terminal:
$ echo "YnVkaTpyYWhhc2lhMTIz" | base64 -dOutput yang Dihasilkan:
budi:rahasia123Credential Helper #
Docker mengatasi masalah penyimpanan tersebut lewat credential helper: program eksternal yang menyimpan kredensial di penyimpanan aman milik sistem operasi. Kita mengaktifkannya dengan menambahkan kunci credsStore pada config.json:
{
"credsStore": "desktop",
"auths": {
"https://index.docker.io/v1/": {}
}
}Pilihan nilai credsStore menyesuaikan platform tempat Docker berjalan:
Nilai credsStore | Platform | Penyimpanan kredensial |
|---|---|---|
desktop | Docker Desktop (semua OS) | keyring yang dikelola Docker Desktop |
pass | Linux | penyimpanan GPG melalui tool pass |
osxkeychain | macOS | Keychain |
wincred | Windows | Windows Credential Manager |
Setelah credsStore aktif, lakukan docker logout lalu docker login ulang supaya kredensial berpindah dari berkas ke keyring. Sejak saat itu entri di config.json hanya berisi objek kosong per registry, kredensial aslinya terenkripsi di keyring, dan peringatan WARNING! Your password will be stored unencrypted tidak lagi muncul pada login berikutnya.
Login ke Registry Lain #
docker login tanpa argumen selalu menunjuk Docker Hub, tetapi perintah yang sama bekerja untuk registry mana pun: cukup sebutkan hostname registry-nya sebagai argumen pertama. Contoh berikut login ke GitHub Container Registry memakai PAT GitHub dengan permission packages:
$ docker login ghcr.io -u budi-githubOutput yang Dihasilkan:
Password:
WARNING! Your password will be stored unencrypted in /home/budi/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credential-stores
Login SucceededLogin bersifat per registry: satu berkas config.json dapat memuat kredensial untuk docker.io, ghcr.io, dan registry privat kantor sekaligus tanpa saling menimpa — kunci auths menyimpan satu entri per alamat registry. Pola yang sama berlaku untuk registry privat perusahaan, misalnya docker login registry.example.com -u budi, yang akan kita praktikkan pada Chapter Private Registry.
Logout dan Verifikasi Status #
Menghapus kredensial sama mudahnya dengan menyimpannya. docker logout membersihkan kredensial registry bawaan:
$ docker logoutOutput yang Dihasilkan:
Removed login credentials for https://index.docker.io/v1/Sementara untuk registry lain, hostname-nya disebut secara eksplisit:
$ docker logout ghcr.ioOutput yang Dihasilkan:
Removed login credentials for ghcr.ioTerakhir, saat kita ragu mesin ini sedang login sebagai siapa, docker info menampilkan identitas yang dipakai klien saat bicara dengan registry:
$ docker infoOutput yang Dihasilkan (dipotong):
Client:
Context: default
Debug Mode: false
Username: budi
...
Server:
Containers: 5
Running: 2
...Baris Username: budi menjadi konfirmasi cepat sebelum push — berguna pada mesin CI yang dipakai bergantian, tempat kredensial terakhir bisa jadi bukan milik job yang sedang berjalan. Perhatikan pula bahwa baris tersebut hidup di bagian Client: identitas login dibaca dari berkas config.json milik pengguna yang menjalankan perintah, bukan dari keadaan daemon.
Referensi #
- docker login — CLI Reference — perilaku login per registry, credential store, dan personal access token.
- docker logout — CLI Reference — pencabutan kredensial per registry.
- Docker Hub rate limits dan usage — hubungan login dengan kuota pull terautentikasi.
Autentikasi kini beres: Docker Hub mengenal laptop Budi, kredensial tersimpan aman di credential helper, dan docker info mengonfirmasi identitasnya. Persoalan berikutnya ada di sisi lokal — image katalog-web:2.0 yang berdiri di penyimpanan masih bernama polos tanpa namespace dan tanpa alamat registry tujuan. Memberi nama lengkap budi/katalog-web:2.0 kepada image adalah pekerjaan tagging, topik yang kita bahas pada chapter berikutnya.