Beberapa perintah dasar docker yang didapatkan setelah training dari beberapa situs.

Docker Image dan Container

Melihat image docker

> docker images
Menjalankan image docker menjadi container
> docker run <image_id>
Melihat container yang sedang berjalan
> docker run ps
Untuk melihat semua container yang sedang jalan atau yang sudah berjalan tambahkan parameter -a
Untuk kolom NAMES paling terakhir diberikan docker adalah nama alias random yang merujuk ke container tersebut.
Mengganti NAMES pada container bisa dengan opsi --name
> docker run -d --name=WebSrv nginx
Menjalankan container secara interaktif bisa menggunakan parameter

  • i : interaktif
  • t : terminal
> docker run -it ubuntu /bin/bash

Hasilnya akan muncul terminal dari Ubuntu

Jika tidak ingin menampilkan terminal linux, bisa menggunakan opsi -d (detach)
> docker run -d nginx

Container management

  1. Mengatur container untuk dapat berjalan/berhenti/restart
    > docker start <id_container>
    ...
    > docker stop <id_container>
    ...
    > docker restart <id_container>
  2. Container ID bisa diganti dengan nama container tersebut.
    Download docker image dari dockerhub, dalam hal ini whalesay
    > docker pull docker/whalesay
    Test command image dari docker/whalesay
    > docker run docker/whalesay cowsay halo dunia
  3. Docker run sebenarnya terdiri dari perintah docker create + docker start.
  4. Melihat log dari container
    > docker log <id_container>
  5. Menjalankan container dengan mode attach (melihat output dari container dan menampilkan pada terminal)
    > docker start -a <id_container>
  6. Docker stop mengeluarkan SIGTERM seperti mematikan container tetapi dengan waktu 10 detik.
  7. Docker kill mengeluarkan SIGKILL seperti mematikan paksa container.
  8. Menjalankan perintah pada container yang sama dalam hal ini container redis dijalankan. Pertama jalankan container redis.
    > docker run redis
  9. Buka terminal baru, kemudian cek container yang sedang berjalan
    > docker ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
    c4e3f2e8355c        redis               "docker-entrypoint.s…"   7 minutes ago       Up 5 minutes        6379/tcp            charming_mahavira
  10. Untuk masuk ke dalam container tersebut dan menjalankan perintah tertentu
    > docker exec -it <container_id> redis-cli
    atau
    > docker exec -it <container_id> bash
  11. Melihat port yang di-expose oleh docker container ke port host os
    > docker port <container_id>

Container Lifecycle

Menjalankan container dengan mode detach tambahkan opsi -d

> docker run -d --name=Websrv nginx
Untuk melihat container yang berjalan tersebut di terminal bisa dengan opsi attach
> docker attach Websrv
Docker attach akan menempelkan terminal dari host os ke proses utama yang dijalankan oleh sebuah container (biasanya processnya adalah yang bernilai kecil 1-10, atau bilangan dekatnya).
Menghapus image docker yang belum pernah di-run
> docker rmi ubuntu
Menghapus container yang telah berjalan
> docker rm <id_container>
Hapus seluruh container yang ada
> docker rm `docker ps -a -q`
Untuk memaksa hapus docker tanpa melihat container yang terhubung
> docker rm -f <container_id>
Jika menghapus secara paksa (force), container tetap ada, karena container membuat snapshot dari image.
Menghapus keseluruhan docker bisa dengan perintah berikut.
> docker system prune

Redirect Port Docker

Redirect port secara random pada docker bisa dengan menggunakan perintah berikut

> docker run -d --name=WebSrv1 -P nginx
Redirect port yang ditentukan
> docker run -d -p 8080:80 --name=WebSrv2 nginx
Mount folder dari host os ke docker container. Diasumsikan bahwa dalam folder tersebut terdapat file html (index.html)
> docker run -d -p 8080:80 --name=WebSrv3 -v /home/user/www:/usr nginx

Troubleshoot Docker

Jika menginstall docker pada Windows, kita dapat pilihan docker for windows atau docker for linux. Tentunya jika kita pilih salah satu dari arsitektur ini akan mengambil image yang sesuai dengan tipe docker-nya. Biasanya terdapat error pada saat pull salah satu image ke docker.

PS C:\docker> docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
no matching manifest for unknown in the manifest list entries
Cek terlebih dahulu Arsitektur docker
PS C:\docker> docker info -f '{{.OSType}}/{{.Architecture}}'
windows/x86_64
Kemungkinan image yang di-download belum tersedia dengan versi docker yang diinstall

Mengenal Docker File

Docker file memiliki nama Dockerfile dan menjalankan perintah dari atas ke bawah. Untuk meminimalisir waktu build yang lama, urutan perintah yang dikerjakan dapat mempengaruhi waktu build. Sebagai contoh project sederhana dari node.js dengan struktur direktori seperti berikut.

simpleweb
|
|___Dockerfile
|___index.js
|___package.json
Isi dari docker file sebagai berikut.
# Specify a base image
FROM node:alpine

# specify workdir
WORKDIR /usr/app

# Install dependencies
COPY ./package.json ./
RUN npm install
COPY ./ ./

# Default command
CMD ["npm", "start"]
Perintah copy pertama, file yang disalin hanya package.json yang dibutuhkan oleh npm. Karena file tersebut tidak terjadi perubahan, maka docker tidak melakukan instalasi ulang paket-paket dari npm melainkan hanya menggunakan build cache jadi waktu build bisa lebih cepat.
Perintah copy yang kedua, ketika terdapat perubahan pada file index.js maka tidak akan mempengaruhi perintah-perintah sebelumnya.
Jadi, ketika di-build maka hasilnya bisa lebih cepat (karena tidak perlu lagi menginstall paket npm kembali).
# docker build -t docker_id/simpleweb .
Step 1/6 : FROM node:alpine
 ---> d97a436daee9
Step 2/6 : WORKDIR /usr/app
 ---> Using cache
 ---> 615ca929a638
Step 3/6 : COPY ./package.json ./
 ---> Using cache
 ---> 67f3f73451a4
Step 4/6 : RUN npm install
 ---> Using cache
 ---> e25c1bed23c8
Step 5/6 : COPY ./ ./
 ---> 8bb5e9966830
Step 6/6 : CMD ["npm", "start"]
 ---> Running in 734b72cf35de
Removing intermediate container 734b72cf35de
 ---> f6d69ae01b16
Successfully built f6d69ae01b16