[Docker] Docker 指令集 | 指令速查表

Image: Build | Tag | Commit | Pull/Push | Docker File | Compose File
Container: Run


Cheat Sheet | dockerlabs

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

rm / rmi

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

Tag

$ 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

Commit

$ docker commit [OPTIONS] <CONTAINER> [REPOSITORY[:TAG]]

# 執行進入 container 修改檔案後 commit
$ docker run -it ubuntu bash
$ docker ps -a
$ docker commit e04c073389d5 ubuntu:modified

Pull / Push

# 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

Run

$ 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;"]

Exec

# 進入容器
$ 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

Leave a Reply

Your email address will not be published. Required fields are marked *