Students Save 30%! Learn & create with unlimited courses & creative assets Students Save 30%! Save Now
Advertisement
  1. Code
  2. DevOps
Code

Docker dari Bawah ke Atas: Bekerja dengan Container, Bagian 1

by
Difficulty:IntermediateLength:MediumLanguages:
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 2

Indonesian (Bahasa Indonesia) translation by Kurniawan Sugi Purwanto (you can also view the original English article)

Ini adalah bagian pertama dari dua seri tentang bekerja dengan container Docker. Di bagian ini, kita akan berfokus pada berbagai cara dan pilihan untuk menjalankan suatu image dan bagaimana host bisa berinteraksi dengan container Docker.

Di bagian kedua kita akan membahas tentang listing, memulai, menghentikan, dan memulai ulang container sekaligus mengeksekusi berbagai perintah pada container yang sedang berjalan. Berbagai Docker image adalah unit-unit yang di-deploy. Ketika menjalankan suatu image, Anda menginstansiasi container Docker yang menjalankan satu proses tunggal di environment-nya sendiri yang terisolasi bagi file system, networking, dan memproses tree.

Container Docker sangat fleksibel dan memungkinkan banyak pemanfaatan yang terlalu berat, kompleks dan/atau mahal dengan berbagai teknologi seperti mesin virtual dan server-server bare metal.

Sebelum memulai, pastikan Docker telah terpasang dengan benar di environtment Anda. Tergantung cara pemasangan dan user Anda, mungkin Anda perlu menjalakannya sebagai sudo. Akan saya lewatkan bagian sudo-nya.

Menjalankan Image

Suatu container Docker diluncurkan dengan menjalankan image. Ada beberapa cara untuk menjalankan container yang mempengaruhi seberapa mudah pengelolaan semua container yang ada. Ketika container mulai berjalan, biasanya yang dijalankan adalah perintah yang ditetapkan di Dockerfile. Berikut adalah Dockerfile untuk container hello-world:

Perintahnya sekedar menjalankan biner "hello" yang disalin ke root container ketika membuat image-nya.

Foreground versus Detached

Suatu container bisa berjalan di foreground yang dihambatnya sampai prosesnya keluar dan container berhenti berjalan. Di mode foreground, container mencetak keluarannya ke konsol dan bisa membaca masukan standar. Di mode detached (ketika Anda memberikan -d flag), kontrol akan seketika itu juga kembali dan containernya.

Menjalanan Container Tanpa Nama

Cara termudah menjalankan suatu container adalah: docker run <image id or name>.

Ketika Anda menjalankan suatu container dengan perintah ini, Docker akan menetapkan suatu nama yang tersusun atas dua kata acak. Misalnya: docker run hello-world.

Jika Anda sudah punya image hello-world, Docker akan menjalankannya. Jika belum, Docker akan menarik dari repositori resmi Docker di DockerHub lalu menjalankannya. Keluarannya akan terlihat sebagaimana berikut:

Program hello keluar setelah menampilkan pesan, yang akan menghentikan proses yang berjalan di dalam container dan mengakhiri berjalannya container. Containernya masih tidak ke mana-mana jika Anda masih ingin terhubung dengannya, memeriksa log, atau yang lain. Untuk melihat containernya, Anda bisa menjalankan perintah berikut:

Akan saya jelaskan lebih lanjut tentang bagaimana senarai container dan semua pilihan terkait. Untuk saat ini, mari berfokus pada bagian Nama. Docker secara otomatis menghasilkan nama "clever_liskov", dan saya harus menggunakannya atau menggunakan ID container untuk merujuk ke container ini untuk tujuan seperti memulai ulang, menghapusnya, atau mengeksekusi suatu perintah.

Menjalankan Container Bernama

Menggunakan ID container atau nama yang dihasilkan secara otomatis terkadang tidak nyaman. Jika Anda sering berinteraksi dengan suatu container yang sering Anda buat ulang, container itu akan mendapatkan ID dan nama otomatis yang berbeda. Namanya juga akan acak.

Docker mengizinkan Anda menamai container-container tersebut apabila dijalankan dengan memberikan argumen perintah baris "--name ". Dalam kasus sederhana, yang Anda hanya punya satu container untuk tiap imagenya, Anda bisa menamai container dengan nama image: docker run --name hello-world hello-world.

Sekarang, jika kita lihat prosesnya (saya menghapus clever_liskov sebelumnya) kita akan melihat bahwa container itu bernama hello-world:

Ada sejumlah manfaat container yang bernama:

  • Anda punya nama yang stabil untuk container yang digunakan secara interaktif maupun dalam skrip.
  • Anda bisa memilih nama yang bermakna.
  • Anda bisa memilih nama yang pendek supaya nyaman ketika bekerja secara interaktif.
  • Dengan melakukan itu Anda akan terhindar dari tidak sengaja memiliki banyak container untuk image yang sama (selama Anda selalu menyediakan nama yang sama).

Mari kita lihat pilihan terakhir. Jika saya coba menjalankan perintah yang sama dengan nama "hello-world" yang sama, saya akan mendapat pesan kesalahan yang jelas:

Menjalankan Auto-Remove Image

Secara default container selalu ada. Tapi terkadang ada yang tidak Anda butuhkan. Daripada menghapus secara manual container yang sudah keluar, Anda bisa membuatnya pergi dengan sendirinya.  Argumen perintah baris --rm lah yang melakukannya: docker run --rm hello-world.

Menjalankan Perintah yang Berbeda

Secara default, Docker menjalankan perintah yang ditetapkan di Dockerfile untuk membuat image (atau langsung titik masuknya jika tidak ditemukan perintah apapun). Anda selalu bisa mengesampingkannya dengan memberikn perintah Anda sendiri di akhir perintah run. Mari menjalankan ls -la di image busybox (image hello-world tidak punya ls yang bisa dieksekusi):

Berinteraksi dengan Host

Container Docker menjalankan berbagai proses yang terisolasi di dunianya sendiri. Tetapi seringkali penting dan bermanfaat untuk memberikan akses ke hostnya.

Memasukkan Variabel Environment ke suatu Container

Container Docker tidak bisa secara otomatis mewarisi environment proses host yang menjalankannya. Anda harus secara eksplisit menyediakan variabel-variabel environment ke container ketika Anda menjalankannya dengan tanda perintah baris -e. Anda bisa memasukkan berbagai variabel environment. Berikut adalah suatu contoh:

Baris pertama menjalankan container busybox, memasukkannya ke variabel ENV_FROM_HOST dan di dalam container yang menjalankan env menunjukkan bahwa ENV_FROM_HOST telah diatur dengan benar.

Anda bisa menggunakan variabel environment host juga. Ini akan mengatur sejumlah variabel environment host dan menggunakannya di perintah run:

Di dalam container, sekarang bisa dilihat:

Menaikkan Direktori Host

Salah satu interaksi paling bermanfaat adalah menaikkan direktori host. Ini akan memungkinkan beberapa kasus pemakaian yang menarik:

  • Berbagi ruang penyimpanan antar container yang berjalan di host yang sama.
  • Menampilkan dan menyunting file dengan environment dan tools host, serta menggunakan file yang ada di dalam container.
  • Persistensi tingkat host yang melampaui masa aktif suatu container.

Berikut saya membuat satu file di host: $ echo "Yeah, it works!" > ~/data/1.txt

Lalu saya menjalankan image busybox yang menaikkan ~/data directory ke /data di dalam containernya dan menampilkan isi file di layar: 

Di sini saya menggunakan perintah cat /data/1.txt.

Mengekspos Port ke Host

Jika Anda mengekspos suatu port di Dockerfile Anda dengan EXPOSE, maka hanya akan bisa diakses ke contaniner docker lainnya. Untuk menjadikannya bisa diakses di host, Anda harus menggunakan argumen perintah baris -p. Sintaksnya adalah -p <host port>: <exposed container port>.

Berikut adalah menjalankan image nginx, yang mengekspos port 80 dan menggunakan argumen perintah baris -p untuk menjadikannya terlihat di host pada port 9000.

Perhatikan bahwa tidak sama dengan perintah-perintah sebelumnya, container nginx akan terus berjalan dan mendengarkan permintaan-permintaan yang masuk. Mari memverifikasi apakah nginx benar-benar aktif dan berjalan serta merespon permintaan di port 9000. Saya lebih menyukai klien HTTP over curl yang sangat bagus httpie untuk menyasar server web dan layanan dari baris perintah:

Kesimpulan

Ada banyak cara menjalankan suatu image Docker untuk membuat suatu container, dan ada banyak opsi. Tiap kombinasi mendukung penggunaan tertentu. Hal ini sangat bermanfaat ketika bekerja dengan container Docker untuk sepenuhnya memahami detailnya dan menggunakan metode terbaik untuk meluncurkan container Anda.

Sebagai tambahan, melampirkan volume host dan mengekspos serta mem-publish port memungkinkan integrasi yang ketat dengan host dan sejumlah besar skenario penggunaan. Di bagian dua, kita akan menyelami tentang pengelolaan beragam container dan memanfaatkan kekuatan penuh yang dimiliki Docker.

Advertisement
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.