logo
🚀 DevOps

Docker

Docker Cheat Sheet - 快速参考指南,收录常用语法、命令与实践。

📂 分类 · DevOps🧭 Markdown 速查🏷️ 2 个标签
#docker#containers
向下滚动查看内容
返回全部 Cheat Sheets

入门指南

快速开始

创建并在后台运行容器 (Create and run container in background)

SHELL
滚动查看更多
$ docker run -d -p 80:80 docker/getting-started

  • -d - 后台模式运行 (detached mode)
  • -p 80:80 - 端口映射 主机:容器 (port mapping)
  • docker/getting-started - 使用的镜像

{.marker-none}

创建并在前台运行容器 (Create and run in foreground)

SHELL
滚动查看更多
$ docker run -it -p 8001:8080 --name my-nginx nginx

  • -it - 交互式终端模式 (interactive terminal)
  • -p 8001:8080 - 端口映射 (host:container)
  • --name my-nginx - 指定容器名称
  • nginx - 使用的镜像

{.marker-none}

常用命令速查
命令描述
docker ps列出运行中的容器
docker ps -a列出所有容器
docker images列出所有镜像
docker exec -it <container> bash进入容器终端
docker logs <container>查看容器日志
docker logs -f <container>实时查看日志
docker stop <container>停止容器
docker start <container>启动容器
docker restart <container>重启容器
docker rm <container>删除容器
docker rmi <image>删除镜像

<container> 可以是容器 ID 或容器名称

版本和信息
SHELL
滚动查看更多
# 查看 Docker 版本
$ docker --version
$ docker version

# 查看系统信息
$ docker info

# 查看磁盘使用情况
$ docker system df

# 查看实时事件
$ docker events

容器管理

启动与停止
命令描述
docker start my-nginx启动容器
docker stop my-nginx停止容器
docker restart my-nginx重启容器
docker pause my-nginx暂停容器
docker unpause my-nginx恢复容器
docker wait my-nginx阻塞直到容器停止
docker kill my-nginx强制停止 (SIGKILL)
docker attach my-nginx附加到运行中的容器
容器信息
命令描述
docker ps列出运行中的容器
docker ps -a列出所有容器
docker logs my-nginx查看日志
docker logs -f --tail 100 my-nginx实时查看最后 100 行
docker inspect my-nginx查看容器详情
docker port my-nginx查看端口映射
docker top my-nginx查看容器进程
docker stats my-nginx查看资源使用
docker diff my-nginx查看文件变更
创建容器
SHELL
滚动查看更多
docker create [options] IMAGE
  -a, --attach               # 附加标准输出/错误
  -i, --interactive          # 附加标准输入
  -t, --tty                  # 分配伪终端
      --name NAME            # 容器名称
  -p, --publish 5000:5000    # 端口映射
      --expose 5432          # 暴露端口给其他容器
  -P, --publish-all          # 发布所有暴露端口
  -v, --volume /host:/container  # 挂载卷
  -e, --env NAME=value       # 环境变量
      --env-file .env        # 从文件读取环境变量
      --network my-network   # 指定网络
      --restart always       # 重启策略
  -m, --memory 512m          # 内存限制
      --cpus 1.5             # CPU 限制

示例

SHELL
滚动查看更多
# 创建容器但不启动
$ docker create --name my_redis --expose 6379 redis:7

# 运行并自动删除
$ docker run --rm -it alpine sh

# 运行并设置重启策略
$ docker run -d --restart=unless-stopped nginx
容器操作

重命名容器 (Rename)

SHELL
滚动查看更多
$ docker rename old_name new_name

删除容器 (Remove)

SHELL
滚动查看更多
# 删除停止的容器
$ docker rm my-nginx

# 强制删除运行中的容器
$ docker rm -f my-nginx

# 删除所有停止的容器
$ docker container prune

更新容器配置 (Update)

SHELL
滚动查看更多
# 更新 CPU 和内存限制
$ docker update --cpu-shares 512 -m 300M my-nginx

# 更新重启策略
$ docker update --restart=always my-nginx
在容器中执行命令
SHELL
滚动查看更多
# 进入容器 bash
$ docker exec -it my-nginx bash

# 进入容器 sh (适用于 alpine)
$ docker exec -it my-nginx sh

# 以 root 用户执行
$ docker exec -u root -it my-nginx bash

# 执行单个命令
$ docker exec my-nginx cat /etc/nginx/nginx.conf

# 设置环境变量执行
$ docker exec -e VAR=value my-nginx env
复制文件
SHELL
滚动查看更多
# 从容器复制到主机
$ docker cp my-nginx:/app/config.json ./config.json

# 从主机复制到容器
$ docker cp ./config.json my-nginx:/app/config.json

# 复制整个目录
$ docker cp my-nginx:/app/logs ./logs/

镜像管理

镜像操作
命令描述
docker images列出镜像
docker images -a列出所有镜像(含中间层)
docker rmi nginx删除镜像
docker rmi -f nginx强制删除
docker image prune删除悬空镜像
docker image prune -a删除未使用镜像
docker history nginx查看镜像历史
docker inspect nginx查看镜像详情
镜像导入导出
SHELL
滚动查看更多
# 保存镜像到文件
$ docker save nginx > nginx.tar
$ docker save -o nginx.tar nginx:latest

# 从文件加载镜像
$ docker load < nginx.tar
$ docker load -i nginx.tar

# 导出容器为镜像
$ docker export my-nginx > container.tar

# 从导出文件创建镜像
$ docker import container.tar my-image:tag
构建镜像
SHELL
滚动查看更多
# 在当前目录构建
$ docker build -t myapp:1.0 .

# 指定 Dockerfile
$ docker build -f Dockerfile.prod -t myapp:prod .

# 不使用缓存构建
$ docker build --no-cache -t myapp:1.0 .

# 传递构建参数
$ docker build --build-arg NODE_ENV=production -t myapp .

# 多平台构建
$ docker buildx build --platform linux/amd64,linux/arm64 -t myapp .
镜像标签
SHELL
滚动查看更多
# 添加标签
$ docker tag nginx:latest myregistry/nginx:v1.0

# 推送到仓库
$ docker push myregistry/nginx:v1.0

# 拉取镜像
$ docker pull nginx:latest
$ docker pull nginx:1.24-alpine

Dockerfile

基础指令
DOCKERFILE
滚动查看更多
# 基础镜像
FROM node:20-alpine

# 镜像元数据
LABEL maintainer="dev@example.com"
LABEL version="1.0"

# 设置工作目录
WORKDIR /app

# 复制文件
COPY package*.json ./
COPY . .

# 运行命令(构建时)
RUN npm ci --only=production

# 暴露端口
EXPOSE 3000

# 环境变量
ENV NODE_ENV=production

# 启动命令
CMD ["node", "server.js"]
指令详解
DOCKERFILE
滚动查看更多
# FROM - 指定基础镜像
FROM ubuntu:22.04
FROM node:20-alpine AS builder

# ARG - 构建时变量
ARG NODE_ENV=development
ARG VERSION=1.0

# ENV - 运行时环境变量
ENV PORT=3000
ENV NODE_ENV=${NODE_ENV}

# RUN - 执行命令
RUN apt-get update && apt-get install -y \
    curl \
    git \
    && rm -rf /var/lib/apt/lists/*

# COPY vs ADD
COPY ./src /app/src          # 推荐:简单复制
ADD https://example.com/file /app/  # 支持URL和解压

# WORKDIR - 设置工作目录
WORKDIR /app

# USER - 指定运行用户
USER node

# EXPOSE - 声明端口
EXPOSE 3000 8080

# VOLUME - 声明挂载点
VOLUME ["/data", "/logs"]

# HEALTHCHECK - 健康检查
HEALTHCHECK --interval=30s --timeout=3s \
  CMD curl -f http://localhost:3000/health || exit 1

# ENTRYPOINT vs CMD
ENTRYPOINT ["node"]        # 固定的执行命令
CMD ["server.js"]          # 默认参数,可被覆盖
多阶段构建
DOCKERFILE
滚动查看更多
# 阶段 1: 构建
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

# 阶段 2: 生产镜像
FROM node:20-alpine AS production
WORKDIR /app

# 只复制生产依赖
COPY package*.json ./
RUN npm ci --only=production && npm cache clean --force

# 从构建阶段复制产物
COPY --from=builder /app/dist ./dist

# 非 root 用户运行
USER node

EXPOSE 3000
CMD ["node", "dist/main.js"]
最佳实践
DOCKERFILE
滚动查看更多
# 1. 使用 .dockerignore
# .dockerignore 文件内容:
node_modules
.git
*.md
Dockerfile*
.env

# 2. 合并 RUN 命令减少层数
RUN apt-get update \
    && apt-get install -y --no-install-recommends \
       package1 \
       package2 \
    && rm -rf /var/lib/apt/lists/*

# 3. 使用特定版本标签
FROM node:20.10-alpine3.18
# 而不是 FROM node:latest

# 4. 利用缓存
COPY package*.json ./
RUN npm ci
COPY . .   # 代码变更不影响依赖缓存

# 5. 使用非 root 用户
RUN addgroup -g 1001 appgroup \
    && adduser -u 1001 -G appgroup -s /bin/sh -D appuser
USER appuser
Python 示例
DOCKERFILE
滚动查看更多
FROM python:3.11-slim

WORKDIR /app

# 安装依赖
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# 复制应用
COPY . .

# 非 root 用户
RUN useradd -m appuser
USER appuser

EXPOSE 8000
CMD ["python", "-m", "uvicorn", "main:app", "--host", "0.0.0.0"]
Go 示例
DOCKERFILE
滚动查看更多
# 构建阶段
FROM golang:1.21-alpine AS builder
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -o main .

# 最小化运行镜像
FROM scratch
COPY --from=builder /app/main /main
EXPOSE 8080
ENTRYPOINT ["/main"]

Docker Compose

基础配置
YAML
滚动查看更多
# docker-compose.yml
version: '3.8'

services:
    web:
        build: .
        ports:
            - '3000:3000'
        environment:
            - NODE_ENV=development
        volumes:
            - .:/app
            - /app/node_modules
        depends_on:
            - db
            - redis

    db:
        image: postgres:15-alpine
        environment:
            POSTGRES_USER: user
            POSTGRES_PASSWORD: password
            POSTGRES_DB: myapp
        volumes:
            - postgres_data:/var/lib/postgresql/data
        ports:
            - '5432:5432'

    redis:
        image: redis:7-alpine
        ports:
            - '6379:6379'

volumes:
    postgres_data:
Compose 命令
SHELL
滚动查看更多
# 启动服务
$ docker compose up
$ docker compose up -d          # 后台运行

# 构建并启动
$ docker compose up --build

# 停止服务
$ docker compose down
$ docker compose down -v        # 同时删除卷

# 查看日志
$ docker compose logs
$ docker compose logs -f web    # 实时查看特定服务

# 查看服务状态
$ docker compose ps

# 执行命令
$ docker compose exec web bash
$ docker compose run web npm test

# 扩展服务
$ docker compose up -d --scale web=3
高级配置
YAML
滚动查看更多
version: '3.8'

services:
    app:
        build:
            context: .
            dockerfile: Dockerfile.prod
            args:
                - NODE_ENV=production
        image: myapp:${TAG:-latest}
        container_name: myapp
        restart: unless-stopped
        ports:
            - '3000:3000'
        environment:
            - DATABASE_URL=postgresql://user:pass@db:5432/myapp
        env_file:
            - .env
        volumes:
            - ./uploads:/app/uploads
            - logs:/app/logs
        networks:
            - frontend
            - backend
        depends_on:
            db:
                condition: service_healthy
        healthcheck:
            test: ['CMD', 'curl', '-f', 'http://localhost:3000/health']
            interval: 30s
            timeout: 10s
            retries: 3
            start_period: 40s
        deploy:
            resources:
                limits:
                    cpus: '1'
                    memory: 512M
                reservations:
                    cpus: '0.5'
                    memory: 256M

    db:
        image: postgres:15-alpine
        volumes:
            - postgres_data:/var/lib/postgresql/data
            - ./init.sql:/docker-entrypoint-initdb.d/init.sql
        healthcheck:
            test: ['CMD-SHELL', 'pg_isready -U user -d myapp']
            interval: 10s
            timeout: 5s
            retries: 5

    nginx:
        image: nginx:alpine
        ports:
            - '80:80'
            - '443:443'
        volumes:
            - ./nginx.conf:/etc/nginx/nginx.conf:ro
            - ./certs:/etc/nginx/certs:ro
        depends_on:
            - app
        networks:
            - frontend

networks:
    frontend:
        driver: bridge
    backend:
        driver: bridge
        internal: true

volumes:
    postgres_data:
    logs:
多环境配置
YAML
滚动查看更多
# docker-compose.override.yml (开发环境,自动加载)
version: '3.8'
services:
    app:
        build:
            target: development
        volumes:
            - .:/app
            - /app/node_modules
        environment:
            - DEBUG=true
SHELL
滚动查看更多
# 使用不同配置文件
$ docker compose -f docker-compose.yml \
                 -f docker-compose.prod.yml up -d

网络管理

网络类型
SHELL
滚动查看更多
# 查看网络
$ docker network ls

# 创建网络
$ docker network create mynetwork                    # bridge (默认)
$ docker network create -d bridge mybridge           # 指定驱动
$ docker network create -d host myhost               # host 模式
$ docker network create -d overlay myoverlay         # overlay (Swarm)

# 查看网络详情
$ docker network inspect mynetwork

# 删除网络
$ docker network rm mynetwork
$ docker network prune                               # 删除未使用网络
网络操作
SHELL
滚动查看更多
# 容器连接到网络
$ docker network connect mynetwork my-nginx

# 容器断开网络
$ docker network disconnect mynetwork my-nginx

# 运行时指定网络
$ docker run -d --network mynetwork --name app nginx

# 指定 IP 地址
$ docker network create --subnet=172.18.0.0/16 mynet
$ docker run -d --network mynet --ip 172.18.0.10 nginx
自定义网络
SHELL
滚动查看更多
# 创建自定义 bridge 网络
$ docker network create \
    --driver=bridge \
    --subnet=192.168.0.0/24 \
    --gateway=192.168.0.1 \
    --ip-range=192.168.0.128/25 \
    mybridge

# 创建 overlay 网络 (Swarm)
$ docker network create \
    --driver=overlay \
    --attachable \
    myoverlay
网络模式说明
模式描述
bridge默认,容器有独立网络栈
host容器使用宿主机网络
none禁用网络
overlaySwarm 跨主机通信
macvlan容器有独立 MAC 地址

数据卷管理

卷操作
SHELL
滚动查看更多
# 创建卷
$ docker volume create myvolume

# 列出卷
$ docker volume ls

# 查看卷详情
$ docker volume inspect myvolume

# 删除卷
$ docker volume rm myvolume

# 删除未使用的卷
$ docker volume prune
挂载方式
SHELL
滚动查看更多
# Volume(推荐)
$ docker run -v myvolume:/app/data nginx
$ docker run --mount source=myvolume,target=/app/data nginx

# Bind Mount(绑定挂载)
$ docker run -v /host/path:/container/path nginx
$ docker run --mount type=bind,source=/host/path,target=/container/path nginx

# tmpfs(内存挂载)
$ docker run --tmpfs /app/temp nginx
$ docker run --mount type=tmpfs,target=/app/temp nginx

# 只读挂载
$ docker run -v myvolume:/app/data:ro nginx
备份与恢复
SHELL
滚动查看更多
# 备份卷数据
$ docker run --rm \
    -v myvolume:/data \
    -v $(pwd):/backup \
    alpine tar czf /backup/backup.tar.gz /data

# 恢复卷数据
$ docker run --rm \
    -v myvolume:/data \
    -v $(pwd):/backup \
    alpine tar xzf /backup/backup.tar.gz -C /

清理与维护

系统清理
SHELL
滚动查看更多
# 查看磁盘使用
$ docker system df
$ docker system df -v

# 清理未使用资源
$ docker system prune              # 清理悬空资源
$ docker system prune -a           # 清理所有未使用资源
$ docker system prune -a --volumes # 包括卷
容器清理
SHELL
滚动查看更多
# 停止所有容器
$ docker stop $(docker ps -q)

# 删除所有停止的容器
$ docker container prune

# 删除所有容器
$ docker rm -f $(docker ps -aq)
镜像清理
SHELL
滚动查看更多
# 删除悬空镜像
$ docker image prune

# 删除所有未使用镜像
$ docker image prune -a

# 删除所有镜像
$ docker rmi -f $(docker images -q)

# 删除指定仓库的镜像
$ docker rmi $(docker images | grep "pattern" | awk '{print $3}')
卷和网络清理
SHELL
滚动查看更多
# 删除未使用的卷
$ docker volume prune

# 删除未使用的网络
$ docker network prune

# 删除所有自定义网络
$ docker network rm $(docker network ls -q)

镜像仓库

Docker Hub
SHELL
滚动查看更多
# 登录
$ docker login
$ docker login -u username

# 登出
$ docker logout

# 搜索镜像
$ docker search nginx
$ docker search --filter=stars=100 nginx

# 拉取镜像
$ docker pull nginx
$ docker pull nginx:1.24-alpine

# 推送镜像
$ docker tag myapp:latest username/myapp:v1.0
$ docker push username/myapp:v1.0
私有仓库
SHELL
滚动查看更多
# 登录私有仓库
$ docker login myregistry.example.com

# 推送到私有仓库
$ docker tag myapp:latest myregistry.example.com/myapp:v1.0
$ docker push myregistry.example.com/myapp:v1.0

# 拉取私有镜像
$ docker pull myregistry.example.com/myapp:v1.0

# 运行本地 Registry
$ docker run -d -p 5000:5000 --name registry registry:2
$ docker tag myapp:latest localhost:5000/myapp:v1.0
$ docker push localhost:5000/myapp:v1.0
配置镜像加速
JSON
滚动查看更多
// /etc/docker/daemon.json
{
	"registry-mirrors": ["https://mirror.ccs.tencentyun.com", "https://registry.docker-cn.com"]
}
SHELL
滚动查看更多
# 重启 Docker 生效
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker

日志与监控

日志管理
SHELL
滚动查看更多
# 查看容器日志
$ docker logs my-nginx

# 实时查看日志
$ docker logs -f my-nginx

# 查看最后 N 行
$ docker logs --tail 100 my-nginx

# 查看指定时间后的日志
$ docker logs --since 2024-01-01T00:00:00 my-nginx

# 查看时间戳
$ docker logs -t my-nginx

# 组合使用
$ docker logs -f --tail 50 -t my-nginx
日志驱动配置
JSON
滚动查看更多
// /etc/docker/daemon.json
{
	"log-driver": "json-file",
	"log-opts": {
		"max-size": "10m",
		"max-file": "3"
	}
}
SHELL
滚动查看更多
# 运行时指定日志驱动
$ docker run -d \
    --log-driver json-file \
    --log-opt max-size=10m \
    --log-opt max-file=3 \
    nginx
资源监控
SHELL
滚动查看更多
# 实时资源使用
$ docker stats
$ docker stats my-nginx

# 格式化输出
$ docker stats --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}"

# 查看容器进程
$ docker top my-nginx

# 查看容器详情
$ docker inspect my-nginx
$ docker inspect --format '{{.State.Status}}' my-nginx

安全最佳实践

镜像安全
SHELL
滚动查看更多
# 扫描镜像漏洞
$ docker scout cves nginx:latest
$ docker scout quickview nginx:latest

# 使用可信镜像
$ docker trust sign myimage:tag
$ docker trust inspect myimage:tag

# 内容信任
$ export DOCKER_CONTENT_TRUST=1
$ docker pull nginx:latest  # 会验证签名
运行时安全
SHELL
滚动查看更多
# 使用非 root 用户
$ docker run --user 1000:1000 nginx

# 只读文件系统
$ docker run --read-only nginx

# 限制权限
$ docker run --cap-drop ALL --cap-add NET_BIND_SERVICE nginx

# 禁止提权
$ docker run --security-opt no-new-privileges nginx

# 限制资源
$ docker run --memory 512m --cpus 1 nginx
Dockerfile 安全
DOCKERFILE
滚动查看更多
# 使用非 root 用户
FROM node:20-alpine
RUN addgroup -g 1001 appgroup \
    && adduser -u 1001 -G appgroup -s /bin/sh -D appuser
USER appuser

# 使用只读根文件系统
# docker run --read-only ...

# 最小化镜像
FROM scratch
# 或 FROM alpine:3.18

# 不存储敏感信息
# 使用 --secret 挂载
RUN --mount=type=secret,id=npmrc,target=/root/.npmrc npm ci

常用技巧

调试技巧
SHELL
滚动查看更多
# 进入运行失败的容器
$ docker run -it --entrypoint /bin/sh myimage

# 查看容器文件系统变化
$ docker diff my-nginx

# 导出容器文件系统
$ docker export my-nginx > container.tar

# 查看镜像层
$ docker history --no-trunc myimage

# 查看容器 IP
$ docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' my-nginx
性能优化
SHELL
滚动查看更多
# 使用 BuildKit
$ DOCKER_BUILDKIT=1 docker build -t myapp .

# 并行构建
$ docker buildx build --platform linux/amd64,linux/arm64 -t myapp .

# 缓存挂载(加速构建)
RUN --mount=type=cache,target=/root/.npm npm ci

# 多阶段构建减小镜像
FROM node:20 AS builder
# ... build
FROM node:20-alpine
COPY --from=builder /app/dist ./dist
常用别名
SHELL
滚动查看更多
# ~/.bashrc 或 ~/.zshrc
alias d='docker'
alias dc='docker compose'
alias dps='docker ps'
alias dpa='docker ps -a'
alias di='docker images'
alias dex='docker exec -it'
alias dl='docker logs -f'
alias drm='docker rm -f'
alias drmi='docker rmi'
alias dsp='docker system prune -a'

相关 Cheat Sheets

1v1免费职业咨询
logo

Follow Us

linkedinfacebooktwitterinstagramweiboyoutubebilibilitiktokxigua

We Accept

/image/layout/pay-paypal.png/image/layout/pay-visa.png/image/layout/pay-master-card.png/image/layout/pay-airwallex.png/image/layout/pay-alipay.png

地址

Level 10b, 144 Edward Street, Brisbane CBD(Headquarter)
Level 2, 171 La Trobe St, Melbourne VIC 3000
四川省成都市武侯区桂溪街道天府大道中段500号D5东方希望天祥广场B座45A13号
Business Hub, 155 Waymouth St, Adelaide SA 5000

Disclaimer

footer-disclaimerfooter-disclaimer

JR Academy acknowledges Traditional Owners of Country throughout Australia and recognises the continuing connection to lands, waters and communities. We pay our respect to Aboriginal and Torres Strait Islander cultures; and to Elders past and present. Aboriginal and Torres Strait Islander peoples should be aware that this website may contain images or names of people who have since passed away.

匠人学院网站上的所有内容,包括课程材料、徽标和匠人学院网站上提供的信息,均受澳大利亚政府知识产权法的保护。严禁未经授权使用、销售、分发、复制或修改。违规行为可能会导致法律诉讼。通过访问我们的网站,您同意尊重我们的知识产权。 JR Academy Pty Ltd 保留所有权利,包括专利、商标和版权。任何侵权行为都将受到法律追究。查看用户协议

© 2017-2025 JR Academy Pty Ltd. All rights reserved.

ABN 26621887572