Beberapa perintah dasar docker yang didapatkan setelah training dari beberapa situs.
Docker Image dan Container
Melihat image docker
> docker images
> docker run <image_id>
> docker run ps
-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
- i : interaktif
- t : terminal
> docker run -it ubuntu /bin/bash
Hasilnya akan muncul terminal dari UbuntuJika tidak ingin menampilkan terminal linux, bisa menggunakan opsi -d (detach)
> docker run -d nginx
Container management
- Mengatur container untuk dapat berjalan/berhenti/restart
> docker start <id_container> ... > docker stop <id_container> ... > docker restart <id_container>
- Container ID bisa diganti dengan nama container tersebut.
Download docker image dari dockerhub, dalam hal ini whalesayTest command image dari docker/whalesay> docker pull docker/whalesay
> docker run docker/whalesay cowsay halo dunia
- Docker run sebenarnya terdiri dari perintah
docker create + docker start
. - Melihat log dari container
> docker log <id_container>
- Menjalankan container dengan mode attach (melihat output dari container dan menampilkan pada terminal)
> docker start -a <id_container>
- Docker stop mengeluarkan SIGTERM seperti mematikan container tetapi dengan waktu 10 detik.
- Docker kill mengeluarkan SIGKILL seperti mematikan paksa container.
- Menjalankan perintah pada container yang sama dalam hal ini container redis dijalankan. Pertama jalankan container redis.
> docker run redis
- 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
- Untuk masuk ke dalam container tersebut dan menjalankan perintah tertentu
> docker exec -it <container_id> redis-cli atau > docker exec -it <container_id> bash
- 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
> docker attach Websrv
Menghapus image docker yang belum pernah di-run
> docker rmi ubuntu
> docker rm <id_container>
> docker rm `docker ps -a -q`
> docker rm -f <container_id>
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
> docker run -d -p 8080:80 --name=WebSrv2 nginx
> 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
PS C:\docker> docker info -f '{{.OSType}}/{{.Architecture}}'
windows/x86_64
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
# 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 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