Image: Build | Tag | Commit | Pull/Push | Docker File | Compose File
Container: Run
Command-line interfaces (CLIs) from Docker Docs:
CLI Auto-completion:
Config - 環境設定
$ docker login
$ docker logout
# Login username 參數
$ docker login -u YOUR-USER-NAME
Common - 通用指令
# Show docker disk usage
$ docker system df
$ docker rm [OPTIONS] CONTAINER [CONTAINER...]
$ docker rmi [OPTIONS] IMAGE [IMAGE...]
# 刪除所有 Containers
$ docker rm -vf $(docker ps -aq)
# 刪除所有 Images
$ docker rmi -f $(docker images -aq)
Image - 映像檔
$ docker image ls
$ docker images
# 查看 image
$ docker image inspect <IMAGE>
$ docker inspect nginx
# 查看 image 歷程
$ docker image history <IMAGE>
$ docker history nginx
$ docker image rm <IMAGE-ID>/<REPOSITORY[:TAG]>
# Force removal
$ docker image rm 91c90ac2b061 -f
# 刪除未使用 images (預設條件為未使用&無名)
$ docker image prune
$ docker image prune -a
Build (Path 下需要有 Dockerfile)
# docker build 為 docker image build 捷徑指令,兩者相同
$ docker image build <PATH>
$ docker build <PATH>
# 設定支援的平台架構
$ docker build --platform linux/amd64 .
$ docker build --platform linux/arm64 .
# tag 參數命名 repository
$ docker build -t <REPOSITORY>:<TAG> <PATH>
$ docker build -t username/myrepo .
$ docker build -t username/myrepo:lastest .
$ docker image tag <SOURCE_IMAGE[:TAG]> <TARGET_IMAGE[:TAG]>
# 命名名稱對應遠端 repository
$ docker tag myimage <YOUR-USER-NAME>/myimage
# 設定 Tag
$ docker image tag myimage:v1.0 myimage:v2.0
$ docker image tag 91c90ac2b061 myimage:amd64
# Untag - 若 image 剩下唯一則刪除
$ docker image rm user/repo:tagname
$ docker commit [OPTIONS] <CONTAINER> [REPOSITORY[:TAG]]
# 執行進入 container 修改檔案後 commit
$ docker run -it ubuntu bash
$ docker ps -a
$ docker commit e04c073389d5 ubuntu:modified
# docker 提供 pull / push 指令捷徑
$ docker image pull <NAME[:TAG|@DIGEST]>
$ docker pull <NAME[:TAG|@DIGEST]>
# By Digest
$ docker pull nginx@sha256:da86ecb516d88a5b0579cec8687a75f974712cb5091560c06ef6c393ea4936ee
# --all-tags
$ docker push -a username/myrepo
Container control - 容器操作
# List containers
$ docker ps
$ docker ps -a
# 查看 container
$ docker inspect e04c073389d5
$ docker run <IMAGE>
$ docker run user/repo:lastest
# Detach - 在背景執行
$ docker run -d 91c90ac2b061
# 使用 --interactive --tty 在背景執行
$ docker run -itd ubuntu
# 覆蓋 CMD (使用 bash 進入容器)
$ docker run -itd ubuntu bash
# Port 映射 --publish
$ docker run -p 80:8080 91c90ac2b061
$ docker run -dp 8080:8080 91c90ac2b061
# 指定僅對應到 localhost port 上 (不映射到 host 其他網卡)
$ docker run -dp 127.0.0.1:8080:8080 nginx
# 停止運行 container
$ docker stop
$ docker stop $(docker ps -q)
Run 主要是執行 image Dockerfile 定義的 CMD,若沒有或 CMD 執行完成則結束 container run,要常駐 container run 的話 CMD 就需要是常駐執行並輸出,如以下
Dockerfile
:
FROM ubuntu
RUN apt-get update && apt-get install -y nginx
COPY nginx.conf /etc/nginx/nginx.conf
CMD ["nginx", "-g", "daemon off;"]
# 進入容器
$ docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
# 使用 Bash Shell 進入容器
$ docker exec -it e04c073389d5 bash
Volumes / Bind mounts
# 建立 volume
$ docker volume create myvolume
# 列出 volumes
$ docker volume ls
# 查看 volume
$ docker volume inspect myvolume
# Volume mounts
$ docker run --mount type=volume,src=myvolume,target=/data 91c90ac2b061
# 刪除 volume
$ docker volume rm myvolume
# Bind mounts
$ docker run --mount type=bind,src="$(pwd)",target=/share 91c90ac2b061
$ docker run -dp :3000:3000 -w /app --mount type=bind,src="$(pwd)",target=/app node:18-alpine \
sh -c "yarn install && yarn run dev"
Manifest
# 查看遠端 nginx latest manifest,列出各種平台 Digest
$ docker manifest inspect nginx:latest
# 自行建立 manifest list,每個 manifest 來源自遠端 repo
$ docker manifest create <MANIFEST_LIST> <MANIFEST> <[MANIFEST...]>
$ docker manifest create user/repo user/repo:arm64 user/repo:amd64
# 查看建立完成的 local manifest
$ docker manifest inspect user/repo
# Push manifest 至遠端
$ docker manifest push user/repo
Docker File
Dockerfile reference | Docker Documentation
Dockerfile
:
FROM username/ubuntu:nginx-phpfpm
CMD service nginx start && service php-fpm start && tail -f /var/log/nginx/access.log
Compose File
Compose Overview | Docker Documentation
compose.yaml
:
services:
frontend:
image: nginx:latest
ports:
- "127.0.0.1:80:80"
# Bind mount
volumes:
- /Users/nick_tsai/_github:/usr/share/nginx/html/my-pages
networks:
default: {}
networks:
default:
完成 compose file 後,可以在相同目錄下快速上線或下線 service:
$ docker-compose up -d
$ docker compose -f docker-compose.yml up -d
# Service down
$ docker-compose down