Daemon di sisi server kini mengikuti kemauan kita, tetapi setiap perintah masih harus melewati pihak yang paling sering kita tatap: docker CLI. Bawaannya lumayan, walau bukan paling nyaman — docker ps menampilkan tujuh kolom yang sebagian jarang kita baca, perintah docker context menyimpan pilihan daemon diam-diam di sebuah berkas, dan kredensial registry tersimpan dengan pengodean yang mudah dibuka bila tidak dikonfigurasi. Seluruh preferensi klien ini hidup di folder ~/.docker, dan memahaminya berarti menguasai tiga lapis pengaturan: berkas config.json, mekanisme context, dan environment variable. Chapter ini membuka ketiganya berurutan, lalu menutup dengan urutan prioritas yang menentukan mana yang menang ketika semuanya bicara serentak.

Berkas config.json di Folder .docker #

Saat pertama kali menjalankan perintah docker yang menyimpan sesuatu — misalnya docker login — folder ~/.docker beserta berkas config.json di dalamnya tercipta otomatis. Berkas ini adalah rumah preferensi klien: format tampilan perintah, alias, penyimpan kredensial, hingga context yang sedang aktif. Berikut contoh isinya yang menyatukan keempat pengaturan tersebut:

json
{
  "psFormat": "table {{.ID}}\t{{.Image}}\t{{.Status}}\t{{.Names}}",
  "aliases": {
    "containers": "container ls",
    "img": "image ls"
  },
  "credsStore": "desktop",
  "currentContext": "server-latihan"
}

Mari kita telaah peran setiap kunci pada berkas di atas:

  1. psFormat — template tampilan untuk docker ps; kita bedah mekanismenya pada bagian berikutnya karena kunci ini paling cepat terasa manfaatnya.
  2. aliases — pemetaan nama panggilan ke perintah aslinya; docker containers kini berarti docker container ls dan docker img berarti docker image ls. Alias tidak boleh menimpa perintah bawaan yang sudah ada, jadi pilihlah nama yang benar-benar baru.
  3. credsStore — nama program penyimpan kredensial yang mengambil alih simpanan login registry; nilai desktop memakai penyimpanan aman bawaan Docker Desktop. Tanpa kunci ini, kredensial tercatat di berkas config dengan pengodean yang mudah dibuka — cukup untuk kebingungan, tidak untuk keamanan.
  4. currentContext — nama context yang sedang aktif; nilainya berubah setiap kali kita menjalankan docker context use, sehingga jarang diketik manual.

Format Tampilan docker ps #

Kunci psFormat layak dapat perhatian pertama karena mengubah pengalaman harian dalam hitungan detik. Nilainya adalah template dengan sintaks kurung kurawal ganda: table di awal meminta output bergaya tabel dengan baris judul, \t memisahkan kolom, dan {{.NamaKolom}} memilih data yang ditampilkan. Dengan template pada contoh sebelumnya, docker ps kini hanya menampilkan empat kolom yang paling sering kita perlukan:

bash
$ docker ps

Output yang Dihasilkan:

text
CONTAINER ID   IMAGE          STATUS         NAMES
f7c2a91b3e55   nginx:latest   Up 2 hours     web

Mari kita telaah bagian-bagian template tersebut:

  1. table — prefiks yang memerintahkan CLI menggambar baris judul dan meratakan kolom dengan spasi; tanpa prefiks ini, output berupa larik baris tanpa judul.
  2. {{.ID}} — kolom ID container; tanda titik menunjuk field pada data container, dan nilai yang tampil adalah bentuk pendek 12 karakter.
  3. \t sebagai pemisah — setiap tab melahirkan satu kolom baru pada mode tabel, dalam urutan penulisan.
  4. {{.Names}} di akhir — nama container sengaja ditempatkan paling kanan agar mudah dibaca sekalipun kolom sebelumnya panjang; urutan kolom sepenuhnya keputusan kita, bukan keputusan Docker.

Pola yang sama berlaku untuk perintah lain lewat kunci sejenis — imagesFormat untuk docker images, atau flag satu kali --format ketika ingin format khusus tanpa mengubah konfigurasi permanen. Mekanisme penuh template ini kita pakai intensif pada Section Dasar Docker CLI.

Docker Context untuk Banyak Daemon #

Satu laptop boleh berbicara dengan banyak daemon: daemon lokal di laptop, daemon di server latihan kantor, daemon di VM uji coba. Docker context adalah mekanisme resmi untuk itu — setiap context menyimpan satu endpoint beserta konfigurasinya, dan CLI cukup berganti context untuk berganti daemon. Membuat context yang menunjuk ke server Budi di kantor hanya membutuhkan satu perintah:

bash
$ docker context create server-latihan --docker "host=ssh://[email protected]"
$ docker context use server-latihan
$ docker context ls
$ docker context show

Output yang Dihasilkan:

text
server-latihan
Current context is now "server-latihan"

NAME              DESCRIPTION                               DOCKER ENDPOINT                                ...
default           Current DOCKER_HOST based configuration   unix:///var/run/docker.sock                   ...
server-latihan *                                            ssh://[email protected]                  ...

Kolom ERROR dan beberapa kolom lain pada docker context ls dipotong agar ringkas. Mari kita telaah baris-baris di atas:

  1. docker context create — context baru bernama server-latihan lahir dengan endpoint ssh ke server kantor; nilai host=ssh://... memakai SSH sebagai jalur transport, sehingga autentikasi mengikuti kunci SSH yang sudah kita punya.
  2. docker context use — memindahkan CLI ke context tersebut mulai perintah berikutnya; perintah ini diam-diam menulis ulang kunci currentContext di config.json, itulah asal nilai pada contoh berkas kita di atas.
  3. docker context ls — menampilkan seluruh context; tanda bintang di sisi nama menandai context yang sedang aktif — perhatikan bahwa bintang kini menempel pada server-latihan, bukan default.
  4. docker context show — mencetak nama context aktif saat ini; berguna untuk memastikan kita tidak sedang mengetik perintah ke server yang salah.

Sejak perpindahan tersebut, seluruh perintah docker di terminal kita mendarat di server kantor, bukan di daemon lokal. Agar contoh-contoh selanjutnya tetap menunjuk laptop sendiri, mari kita kembalikan CLI ke context default:

bash
$ docker context use default

Output yang Dihasilkan:

text
default
Current context is now "default"

Endpoint ssh pada context di atas akan kembali kita pakai pada Chapter Mengatur Akses Docker sebagai jalur remote yang paling aman; mekanisme context sendiri dibedah lebih jauh lagi pada Chapter Memahami Docker Context di Section Dasar Docker CLI.

Environment Variable Klien #

Lapisan pengaturan ketiga beredar di lingkungan proses shell kita. Lima variable berikut dibaca docker CLI setiap kali berjalan, dan semuanya berguna untuk skrip serta sesi sementara:

VariableKegunaanContoh nilai
DOCKER_HOSTAlamat daemon yang dituju klien, menimpa endpoint contexttcp://server.example.com:2376
DOCKER_CONTEXTNama context aktif untuk sesi iniserver-latihan
DOCKER_CONFIGLokasi folder config klien pengganti ~/.docker~/.docker
DOCKER_TLS_VERIFYMengaktifkan verifikasi sertifikat TLS klien1
DOCKER_CERT_PATHFolder berkas sertifikat klien untuk koneksi TLS~/.docker

Variable DOCKER_TLS_VERIFY dan DOCKER_CERT_PATH berpasangan dengan konfigurasi TLS pada daemon yang kita bahas tuntas pada Chapter Mengatur Akses Docker — keduanya menginstruksikan CLI memverifikasi identitas server jauh sebelum bertukar perintah.

Urutan Prioritas Ketiga Lapis #

Ketiga lapis pengaturan kini sudah kita kenal, dan pertanyaannya tinggal satu: ketika config.json, context, dan environment variable menyimpan pilihan yang berbeda, siapa yang menang? Docker CLI membaca semuanya dengan urutan yang tetap:

  1. Flag per perintah — --host dan --context pada baris perintah menang mutlak atas apa pun; cocok untuk kebutuhan satu kali tanpa mengubah pengaturan apa pun.
  2. Environment variable — DOCKER_HOST menimpa endpoint dari context mana pun yang aktif, sementara DOCKER_CONTEXT menimpa currentContext di config.json.
  3. currentContext di config.json — pilihan persisten hasil docker context use; inilah yang berlaku pada sesi shell yang bersih dari variable.
  4. Context default — bila tidak ada yang mengatur, CLI memakai context default yang menunjuk socket unix lokal.

Klien dan server kini sama-sama terpasang dan terkonfigurasi — dari format tampilan yang rapi sampai urutan prioritas yang kita pahami. Tinggal satu ritual yang belum dilakukan: memastikan seluruh perangkat ini benar-benar bekerja sebagai satu kesatuan. Docker menyediakan segelas air penguji yang menjadi tradisi dunia container: docker run hello-world, dibarengi docker version, docker info, dan versi kedua plugin. Chapter Verifikasi Instalasi menjalankan semuanya dan mengajarkan cara membaca hasilnya seperti pemeriksa kesehatan.

Referensi #

  • docker context — referensi resmi seluruh subperintah pengelolaan context.
  • Use the Docker CLI — konfigurasi CLI, format keluaran, dan environment variable pada dokumentasi resmi.
  • Docker Desktop — perilaku credsStore dan penyimpanan kredensial bawaan Desktop.