Docker Cheat Sheet for Beginners and Advanced Users
Install Docker di ubuntu 18.04
sudo apt update
sudo apt-get install curl apt-transport-https ca-certificates software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt update
sudo apt install docker-ce
curl -sSL https://get.docker.com/ | sh
sudo usermod -aG docker $USER
Install Docker di kali linux 2020.2
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
echo 'deb [arch=amd64] https://download.docker.com/linux/debian buster stable' | sudo tee /etc/apt/sources.list.d/docker.list
sudo apt-get update
sudo apt-get install docker-ce
sudo usermod -aG docker $USER
Docker Basic
Melihat versi docker
docker version
Menampilan informasi tentang docker
docker info
Melihat docker image
docker image ls
docker images
Melihat history image
docker history <nama image/tag>
docker history alpine:3.18.4
Download docker image di Docker Hub
docker pull <nama image>:<tag>
docker pull alpine:3.18.4
Melihat daftar container berjalan
docker ps
docker container ls
Melihat semua daftar container (Termasuk yang berhenti)
docker ps -a
docker container ls -a
Membuat dan menjalankan container baru dari image
docker run <options> --name <nama container> <nama image:tag>
docker run -it --name myServer alpine:3.18.4
docker run -d --name myNginx -p 80:80 nginx:alpine3.18-slim
Docker Container Lifecycle
Menjalankan container
docker start <nama container/container id>
docker start myNginx
Menghentikan container
docker stop <nama container/container id>
docker stop myNginx
Menghentikan container (Gracefully)
docker stop <nama container/ container id>
docker stop myNginx
Menghentikan container dengan paksa (Forcefully)
docker kill <nama container/container id>
docker kill myNginx
Restart container
docker restart <nama container/ container id>
docker restart myNginx
Menghapus container
docker rm <nama container/container id>
docker rm myNginx
Docker Configurasi
Melakukan port forwarding
docker run -d --name <nama container> --publish <port host>:<port container> <image>:<tag>
docker run -d --name myNginx --publish 80:80 nginx:alpine3.18-slim
Melihat port: yang digunakan oleh container
docker port <nama container/container id>
docker port myNginx
Melihat detail config container
docker inspect <nama container/container id>
docker inspect myNginx
Melihat IP address container
docker inspect --format '{{ .NetworkSettings.IPAddress }}' <nama container/container id>
docker inspect --format '{{ .NetworkSettings.IPAddress }}' myNginx
Melihat process yang berjalan di dalam container
docker top <nama container/container id>
docker top myNginx
Container resource limit
docker run -d --name <nama_container> --memory 512m --cpus 0.5 <image>:<tag>
docker run -d --name myNginx --memory 512m --cpus 0.5 nginx:mainline.alpine3.18-slim
Menambahkan enviroment variable
docker run -d --name <nama_container> --env <image>:<tag>
docker run -d --name myMongo --publish 27017:27017 --env MONGO_INITDB_ROOT_USERNAME=username --env MONGO_INITDB_ROOT_PASSWORD=password mongo:latest
Docker Volume
Melihat daftar volume
docker volume ls
Membuat volume
docker volume create <nama volume>
Menghapus volume
docker volume rm <nama volume>
Menghubungkan volume ke container
membuat volume baru
docker volume create mongodata
docker run -d --name <nama_container> --mount "type=volume,source=nama_volume,target=containerpath" <image>:<tag>
docker run -d --name myMongo --publish 27017:27017 --mount "type=volume,source=mongodata,destination=/data/db" --env MONGO_INITDB_ROOT_USERNAME=username --env MONGO_INITDB_ROOT_PASSWORD=password mongo:latest
docker run -d --name myNginx -p 80:80 -v $(pwd)/html:/usr/share/nginx/html nginx:latest
Melakukan mounting bind
docker run -d --name <nama_container> --mount "type=bind,source=hostpath,target=containerpath" <image>:<tag>
docker run -d --name myMongo --publish 27017:27017 --mount "type=bind,source=/home/hard/Documents/docker/mongodata,destination=/data/db" --env MONGO_INITDB_ROOT_USERNAME=username --env MONGO_INITDB_ROOT_PASSWORD=password mongo:latest
Backup volume
docker run -d --name <nama_container> --mount "type=bind,source=pathhost,destination=pathhostbackup" --mount "type=volume,source=name_volume,destination=path_volume" <image>:<tag>
langkah-langkah pencadangan volume: buat volume dengan nama volumemongo
docker volume create volumemongo
buat container imgae nginx dengan nama nginxbackup
docker run -d --name nginxbackup --mount "type=bind,source=/home/hard/docker/backupmongo,destination=/backup" --mount "type=volume,source=mongodata,destination=/data" nginx:latest
jalankan container
docker container start nginxbackup
masuk ke dalam container
docker container exec -it nginxbackup /bin/bash
melakukan backup
tar cvf /backup/backup.tar.gz /data
example satu baris execute:
docker run --rm --name ubuntu --mount "type=bind,source=/home/hard/docker/backupmongo,destination=/backup" --mount "type=volume,source=mongodata,destination=/data" ubuntu:latest tar cvf /backup/backup2.tar.gz /data
Restore volume
docker container run --rm --name ubunturestore --mount "type=bind,source=pathhost,destination=pathhostbackup" --mount "type=volume,source=name_volume,destination=path_volume" ubuntu:latest bash -c "cd /data && tar xvf /backup/backup.tar.gz --strip 1"
example:
docker volume create mongorestore
docker container run --rm --name ubunturestore --mount "type=bind,source=/home/hard/docker/backupmongo,destination=/backup" --mount "type=volume,source=mongorestore,destination=/data" ubuntu:latest bash -c "cd /data && tar xvf /backup/backup.tar.gz --strip 1"
Docker Network
Melihat network
docker network ls
Membuat network
docker network create --driver <driver> <nama network>
Menghapus network
docker network rm <nama network>
Menghubungkan container ke network
membuat network baru
docker network create --driver bridge mongonetwork
docker run -d --name <nama_container> --network <nama network> image:tag
docker run -d --name mongodb --network mongonetwork --env MONGO_INITDB_ROOT_USERNAME=username --env MONGO_INITDB_ROOT_PASSWORD=password mongo:4.4.18
docker run -d --name mongoexpress --publish 8081:8081 --network mongonetwork --env ME_CONFIG_MONGODB_URL="mongodb://username:password@mongodb:27017" mongo-express:latest
Menghapus container network
docker network disconnect <nama_network> <nama_container>
docker network disconnect mongonetwork myMongo
untuk menghubungkan kembali:
docker network connect <nama_network> <nama_container>
docker network connect mongonetwork myMongo
Inspect
untuk melihat detail dari image, container, volume, dan network
docker image inspect <nama_image>
docker container inspect <nama_container>
docker volume inspect <nama_volume>
docker network inspect <nama_network>
Logs dan Debugging
Melihat log container
docker logs <nama container/container id>
docker logs myNginx
jika ingin melihat secara realtime
docker logs -f nama_container/container_id
docker logs -f myNginx
Melihat realtime penggunaan resource
docker stats <nama container/container id>
docker stats myNginx
Masuk ke dalam container yg berjalan (interactive shell)
docker exec -it <nama container/container id> bash or sh or etc
docker exec -it myNginx sh
Docker Cleanup
Perintah Prune
menghapus semua container yang tidak digunakan
docker container prune
untuk menghapus semua image yang tidak digunakan
docker image prune
untuk menghapus semua volume yang tidak digunakan
docker volume prune
untuk menghapus semua network yang tidak digunakan
docker network prune
untuk menghapus semua yang tidak digunakan kecuali volume
docker system prune
Push Image ke Docker Hub
docker login
melihat status login
cat ~/.docker/config.json
menambahkan tag
docker image tag <nama_image> <username_dockerhub>/<nama_image>:<tag>
docker image tag nginx hardhard/nginx
push image ke docker hub
docker image push <username_dockerhub>/<nama_image>:<tag>
docker image push hardhard/nginx
menambahkan tag baru
docker image tag <username_dockerhub>/<nama_image_lama>:<tag_lama> <username_dockerhub>/<nama_image_baru>:<tag_baru>
docker image tag hardhard/nginx:latest hardhard/nginx:testing
Docker Swarm
Inisialisasi Docker Swarm
docker swarm init
jika terjadi error seperti ini:
Error response from daemon: could not choose an IP address to advertise since this system has multiple addresses on interface enp0s3...
maka jalankan perintah ini:
docker swarm init --advertise-addr <ip_address>
Docker Dockerfile
Docker Service
Membuat Service
docker service create --name <nama_service> --replicas <jumlah_replicas> --publish <port_host>:<port_container> <nama_image>:<tag>
docker service create alpine ping 8.8.8.8
Melihat list service
docker service ls
Melakukan update service (scale up/down)
docker service update <id_container> --replicas <jumlah_replicas>
docker service update nginx --replicas 5
Docker build
docker build -t <nama_image> <path_dockerfile>
untuk display output
docker build -t <nama_image> <path_dockerfile> --progress=plain
tanpa cache
docker build -t <nama_image> <path_dockerfile> --no-cache
docker build -t hard:latest /home/hard/docker/dockerfile --no-cache
Contoh Dockerfile
FROM alpine:latest
RUN mkdir coba
RUN echo "Hello World" > coba/hello.txt
RUN cat coba/hello.txt
ADD coba/hello.txt coba/hello.txt
CMD cat coba/hello.txt
FROM adalah perintah untuk mendefinisikan image yang akan digunakan ADD adalah perintah untuk memasukan file ke dalam image RUN adalah perintah untuk menjalankan perintah di dalam image CMD adalah perintah untuk menjalankan perintah di dalam container
Image docker: untuk mirror Android
Untuk lebih lengkapnya bisa cek disini :
https://hub.docker.com/r/pierlo1/scrcpy
kebetulan di laptop saya menggunakan amd jadi saya menulisnya begini pierlo1/scrcpy:amd
sesuaikan dengan laptop amd, intel, / nvidia.
docker run --rm -i -t --privileged \
-v /dev/bus/usb:/dev/bus/usb \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-e DISPLAY=$DISPLAY \
pierlo1/scrcpy:amd
Image docker: web server
sudo docker run -dit --name hard-web -p 8080:80 -v /home/user/website/:/usr/local/apache2/htdocs/ httpd:2.4
cek :
sudo docker ps
Edit file :
sudo vi /home/user/website/docker.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Learn Docker at hard.com</title>
</head>
<body>
<h1>Learn Docker With Us</h1>
</body>
</html>
Untuk Stop docker :
sudo docker stop hard-web
Untuk remove :
sudo docker rm hard-web
Untuk remove container
sudo docker image remove httpd:2.4