Advertisement
  1. Code
  2. DevOps

Docker dari Dasar: Bekerja dengan Container, Bagian 2

Scroll to top
Read Time: 6 min
This post is part of a series called Docker from the Ground Up: Working with Containers.
Docker From the Ground Up: Working With Containers, Part 1

Indonesian (Bahasa Indonesia) translation by Aditia Dwiperdana (you can also view the original English article)

Ini adalah bagian kedua dari seri dua bagian tentang bekerja dengan container Docker. Pada bagian pertama kita fokus pada banyak cara dan pengaturan dalam menjalankan sebuah image, dan bagaimana host bisa berinteraksi dengan container Docker.

Pada bagian ini, kita akan membahas proses mendaftar, memulai, menghentikan, dan menjalankan ulang container sekaligus menjalankan perintah pada container yang sudah berjalan. Tepatnya, kamu akan mempelajari perbedaan antara container yang berjalan dan yang tidak, dan bagaimana mengatur informasi dan tampilan saat mendaftar container dengan menggunakan filtering dan formatting.

Lalu kamu akan mendapat pengalaman menghentikan, menjalankan, menjalankan ulang, dan melampirkan container. Terakhir, kamu akan menjalankan perintah dan mendapat akses shell untuk sebuah container yang berjalan.

Sebelum kita mulai, pastikan Docker sudah terpasang dengan baik di komputermu. Tergantung pada cara pemasangan dan user, kamu mungkin perlu menjalankan perintah sebagai sudo. Saya akan melewatkan perintah sudo.

Mendaftar Container

Saat bekerja dengan container, kamu akan ingin mendaftar, melihat, dan memfilter container yang kamu miliki. Perintah  docker ps adalah kuncinya, dan perintah itu memiliki beberapa pengaturan yang menarik.

Menjalankan Container

Perintah paling mendasar adalah docker ps tanpa argumen, yang akan menampilkan semua container yang berjalan.

1
$ docker ps
2
CONTAINER ID        IMAGE               COMMAND                  
3
CREATED             STATUS              PORTS                           
4
NAMES
5
2f542e1cb88b        nginx               "nginx -g 'daemon ..."   
6
12 hours ago        Up 12 hours         443/tcp, 0.0.0.0:9000->80/tcp   
7
nginx

Kamu akan mendapat banyak informasi untuk setiap container, termasuk container id, image, perintah, kapan container dibuat, status saat ini, port, dan nama container tersebut. Daftar ini sulit dibaca karena tulisan ditampilkan dengan wrapping. Kita akan lihat nanti bagaimana untuk memfilter dan memformat output. Perlu diperhatikan bahwa perintah dipotong (termasuk container id). Untuk menampilkan keseluruhan perintah, tambahkan --no-trunc.

1
$ docker ps --no-trunc
2
3
IMAGE   COMMAND
4
nginx   "nginx -g 'daemon off;'"

Sekarang keseluruhan perintah sudah terlihat: nginx -g 'daemon off;'

Semua Container

Seperti yang kamu ingat, Docker menyimpan semua container yang dihentikan (kecuali dijalankan dengan --rm). Menambahkan -a menampilkan semua container:

1
$ docker ps -a
2
CONTAINER ID        IMAGE               STATUS      NAMES
3
cc797c61dc21        busybox             Exited      busybox
4
67f3cb5a9647        busybox             Exited      ecstatic_jones
5
898fb562e535        hello-world         Exited      hopeful_spence
6
6dd210fda2d8        hello-world         Created     infallible_curie
7
2f542e1cb88b        nginx               Up 12 hours nginx

Memformat output

Output dari docker ps bisa terlalu detail dan seringkali menampilkan informasi yang tidak menarik. Kamu bisa menggunakan format Go-template untuk menampilkan informasi yang kamu butuhkan. Berikut ini cara menampilkan hanya nama dan perintah:

1
$ docker ps --no-trunc --format '{{.Names}}\t{{.Command}}'
2
nginx   "nginx -g 'daemon off;'"

Perintah itu bekerja dengan benar, tapi untuk menampilkannya dengan nama kolom, tambahkan "table" pada awal format string.

1
$ docker ps -a --no-trunc --format 'table {{.Names}}\t{{.Command}}'
2
NAMES               COMMAND
3
busybox             "cat /data/1.txt"
4
ecstatic_jones      "cat /data/1.txt"
5
hopeful_spence      "/hello"
6
infallible_curie    "ls -la"
7
nginx               "nginx -g 'daemon off;'"

Format nama untuk id container (tidak dipilih di perintah tadi) adalah {{.ID}} (huruf kapital)

Memfilter output

Perintah docker ps mendukung banyak filter. Filter tersebut cukup mudah digunakan. Sintaksnya adalah -f "<filter>=<value>". Filter yang didukung adalah id, label, nama, exited, status, ancenstor, before, since, isolation, network, dan health.

Berikut adalah contoh memfilter berdasakan nama container dan hanya menampilkan container busybox:

1
$ docker ps -a -f "name=busybox" \
2
               --format 'table {{.ID}}\t{{.Status}}\t{{.Names}}'
3
CONTAINER ID        STATUS                      NAMES
4
cc797c61dc21        Exited (0) 11 minutes ago   busybox

Flag -q

Jika yang kamu butuhkan adalah container id, gunakan -q flag (quiet flag). Lebih sederhana daripada --format 'table {{.ID}}'. Hal ini sering dibutuhkan ketika kamu  ingin menjalankan perintah pada banyak container (kamu akan lihat pada contoh).

1
$ docker ps -aq
2
cc797c61dc21
3
67f3cb5a9647
4
898fb562e535
5
6dd210fda2d8
6
2f542e1cb88b

Menghentikan, menjalankan, dan mengulang container

Kamu bisa menghentikan container berjalan dan menjalankan container yang berhenti. Ada beberapa perbedaan antar menjalankan container yang berhenti dan menjalankan instance baru dari image yang sama:

  • Kamu menggunakan variabel environment yang sama, colume, port, dan argumen lain dari perintah menjalankan container
  • Kamu tidak perlu membuat container tambahan
  • Jika instance yang dihentikan memiliki perubahan pada system file, container yang baru dijalankan akan menggunakan system file yang sama.

Mari hentikan container nginx dan menjalankannya kembali. Saat kamu mengacu pada sebuah container, kamu bisa m enggunakan namanya atau menggunakan prefix dari id container tersebut. Saya biasanya memberi nama container yang akan berjalan lama sehingga saya memiliki beberapa nama yang bermakna dan tidak perlu berurusan dengan nama yang dihasilkan oleh  Docker atau prefix id container.

1
$ docker stop nginx
2
nginx
3
4
$ docker ps -a -f "name=nginx" --format 'table {{.Names}}\t{{.Status}}'
5
NAMES               STATUS
6
nginx               Exited (0) 2 minutes ago

OK. Nginx saat ini berhenti (statusnya "Exited"). Mari kita jalankan:

1
$ docker start nginx
2
nginx
3
4
$ docker ps -a -f "name=nginx" --format 'table {{.Names}}\t{{.Status}}'
5
NAMES               STATUS
6
nginx               Up 33 seconds

Menjalankan ulang sebuah container yang berjalan adalah opsi lain, yang sama dengan docker stop diikuti oleh docker start.

$ docker restart nginx

1
nginx
2
$ docker ps -a -f "name=nginx" --format 'table {{.Names}}\t{{.Status}}'
3
NAMES               STATUS
4
nginx               Up 2 seconds

Melampirkan sebuah container berjalan

Saat kamu menjalankan container yang berhenti, atau jika kamu menjalankan container pada mode detached (argumen perintah -d), kamu tidak bisa lihat outputnya. Tapi kamu bisa melampirkan container tersebut.

1
$ docker attach nginx
2
172.17.0.1 - - [19/Mar/2017:08:40:03 +0000] "HEAD / HTTP/1.1" 200 0 "-"
3
"HTTPie/0.8.0" "-"

Menhapus container

Kamu bisa menghapus container yang dihentikan dengan perintah: docker rm <id atau nama container>

1
$ docker rm ecstatic_jones
2
ecstatic_jones

Jika kamu ingin menghapus container yang berjalan, kamu bisa menghentikannya terlebih dahulu atau menggunakan argumen perintah -f (force).

1
$ docker rm -nginx
2
Error response from daemon: You cannot remove a running container
3
3dbffa955f906e427298fbeb3eadfd229d64365dd880c9771a31b0aedb879d6d. 
4
Stop the container before attempting removal or use -f
5
6
$ docker rm -f -nginx
7
nginx

Jika kamu ingin menhapus semua container, berikut adalah perintahnya:

docker rm -f $(docker ps -aq)

Jika kamu ingin menghapus hanya container yang berhenti, hilangkan flag -f (force).

Menjalankan perintah di dalam container yang berjalanl

Docker menjalankan sebuah proses di dalam container, tapi kamu bisa menjalankan perintah tambahan pada container berjalan. Hal ini sama dengan memberikan perintah tambahan pada perintah docker run, tapi dalam kasus ini berjalan bersamaan dengan perintah run.

Perintah sederhana

Menjalankan perintah sederhana bisa dilakukan dengan docker exec. Kamu menyediakan id container atau namanya, dan perintah yang ingin kamu jalankan. Kita lihat file nginx.conf di dalam container nginx dan lihat berapa banyak proses pekerja yang diatur.

1
$ docker exec nginx cat /etc/nginx/nginx.conf | grep worker_processes
2
worker_processes  1;

Shell interaktif

Satu cara teknik penyelesaian masalah dengan container Docker adalah untuk menghubungkan sebuah shell interaktif dan mengeksplor file sistem yang bersangkutan. Untuk melampirkan stdin dan mendapatkan tty, kamu perlu menggunakan argumen -i -t (bisa digabung menjadi -it) dan nama executable shell (biasanya bash).

Kamu akan memiliki akses shell pada containermu. Berikut adalah contoh memeriksa proses pekerja secara interaktif dari 'dalam' container.

1
$ docker exec -it nginx bash
2
root@b010e854bb98:/# cat /etc/nginx/nginx.conf | grep worker_processes
3
worker_processes  1;
4
root@b010e854bb98:/#

Kesimpulan

Docker adalah platform yang kuat, dan karena satuan kerjanya adalah container, Docker menyediakan banyak alat untuk mengatur dan bekerja dengan container. Saya menjelaskan banyak aspek penting dalam bekerja dengan container, tapi masih banyak fitur lanjut, pengaturan, dan penggunaan dari perintah yang saya bahas, dan masih banyak perintah lainnya.

Jika kamu bekerja menggunakan container Docker, luangkan waktu untuk mempelajari lebih lanjut. Hal itu akan menguntungkan di masa depan.

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.