Skip to content
On this page

Docker 速查表

基础命令

镜像管理

bash
# 搜索镜像
docker search nginx

# 拉取镜像
docker pull nginx
docker pull nginx:alpine

# 查看本地镜像
docker images
docker images -a  # 显示所有镜像

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

# 构建镜像
docker build -t my-app:latest .
docker build -t my-app:v1.0 --build-arg ARG_NAME=value .

# 给镜像打标签
docker tag source_image:tag target_image:tag

容器管理

bash
# 运行容器
docker run nginx
docker run -d nginx                    # 后台运行
docker run -it -p 8080:80 nginx        # 端口映射,交互模式
docker run --name my-nginx nginx       # 指定容器名称
docker run -e ENV_VAR=value nginx      # 设置环境变量
docker run -v /host/path:/container/path nginx  # 挂载卷

# 查看容器
docker ps                              # 运行中的容器
docker ps -a                           # 所有容器
docker top container_name              # 容器进程

# 容器生命周期
docker start container_name
docker stop container_name
docker restart container_name
docker pause container_name
docker unpause container_name
docker kill container_name

# 删除容器
docker rm container_name
docker rm $(docker ps -aq)             # 删除所有停止的容器
docker container prune                 # 清理所有停止的容器

容器交互

bash
# 进入容器
docker exec -it container_name /bin/sh
docker exec -it container_name bash

# 查看容器日志
docker logs container_name
docker logs -f container_name          # 实时查看
docker logs --tail 50 container_name   # 查看最后50行

# 查看容器详细信息
docker inspect container_name

# 复制文件
docker cp container_name:/path/to/file /host/path
docker cp /host/path container_name:/path/to/file

Dockerfile 指令

基础指令

docker
FROM ubuntu:20.04                    # 基础镜像
MAINTAINER author@example.com         # 维护者信息(已废弃,使用 LABEL)
LABEL maintainer="author@example.com" # 维护者信息

RUN apt-get update && apt-get install -y package  # 执行命令
CMD ["executable", "param1", "param2"]           # 默认命令
ENTRYPOINT ["executable"]                        # 入口点
EXPOSE 80                                      # 暴露端口

ENV NODE_ENV=production            # 设置环境变量
ADD src/ /app/src/                 # 复制文件(支持远程URL)
COPY . /app                        # 复制文件
WORKDIR /app                       # 设置工作目录
USER daemon                        # 设置用户
VOLUME ["/data"]                   # 创建挂载点

构建参数和元数据

docker
ARG BUILD_NUMBER                     # 定义构建参数
ARG DEFAULT_VALUE=default            # 带默认值的参数

ONBUILD RUN echo "Running on build"  # 触发器指令
STOPSIGNAL signal                    # 停止信号
HEALTHCHECK --interval=5m --timeout=3s --retries=3 \
  CMD curl -f http://localhost/ || exit 1  # 健康检查
SHELL ["/bin/bash", "-c"]           # 设置shell

Docker Compose

基础命令

bash
# 启动服务
docker-compose up                    # 启动所有服务
docker-compose up -d                 # 后台启动
docker-compose up service_name       # 启动特定服务
docker-compose up --build            # 构建后启动

# 停止服务
docker-compose down                  # 停止并删除容器
docker-compose stop                  # 停止服务但保留容器
docker-compose start                 # 启动已停止的服务

# 查看服务
docker-compose ps                    # 查看服务状态
docker-compose logs                  # 查看日志
docker-compose logs -f               # 实时查看日志
docker-compose logs service_name     # 查看特定服务日志

# 构建和执行
docker-compose build                 # 构建服务
docker-compose build --no-cache      # 不使用缓存构建
docker-compose exec service_name command  # 在服务中执行命令

docker-compose.yml 示例

yaml
version: '3.8'

services:
  web:
    build: .
    ports:
      - "8000:8000"
    environment:
      - DEBUG=1
    depends_on:
      - redis
      - db
    volumes:
      - .:/code

  redis:
    image: redis:alpine

  db:
    image: postgres:13
    environment:
      POSTGRES_DB: myapp
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
    volumes:
      - postgres_data:/var/lib/postgresql/data

volumes:
  postgres_data:

networks:
  frontend:
    driver: bridge
  backend:
    driver: bridge

实用技巧

清理系统

bash
# 清理未使用的对象
docker system prune                  # 清理未使用的容器、网络、镜像
docker system prune -a               # 同时清理所有未使用的镜像
docker system prune --volumes        # 同时清理未使用的卷

# 查看磁盘使用情况
docker system df                     # 系统磁盘使用情况
docker system df -v                  # 详细磁盘使用情况

# 清理特定类型对象
docker container prune               # 清理停止的容器
docker image prune                   # 清理悬空镜像
docker volume prune                  # 清理未使用的卷
docker network prune                 # 清理未使用的网络

监控和调试

bash
# 监控资源使用
docker stats                         # 实时监控所有容器
docker stats container_name          # 监控特定容器

# 查看容器详细信息
docker inspect container_name        # 查看容器详细信息
docker inspect --format='{{.State.Running}}' container_name  # 查看特定字段

# 网络管理
docker network ls                    # 列出网络
docker network create mynetwork      # 创建网络
docker network connect network_name container_name  # 连接容器到网络
docker network disconnect network_name container_name  # 断开连接

安全命令

安全扫描

bash
# 使用 Trivy 扫描镜像
trivy image my-app:latest

# Docker 内置安全扫描
docker scan my-app:latest

运行时安全选项

bash
# 以只读模式运行
docker run --read-only my-app

# 限制能力
docker run --cap-drop=ALL --cap-add=NET_BIND_SERVICE my-app

# 使用用户命名空间
docker run --userns=host my-app

# 安全选项
docker run --security-opt no-new-privileges my-app

高级功能

多阶段构建

docker
# 构建阶段
FROM node:16-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

# 运行阶段
FROM node:16-alpine AS production
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY --from=builder /app/dist ./dist
EXPOSE 3000
CMD ["node", "dist/server.js"]

BuildKit 特性

bash
# 启用 BuildKit
export DOCKER_BUILDKIT=1
docker build -t my-app .

# 使用 BuildKit 特性
# syntax=docker/dockerfile:1.4
FROM node:16-alpine
RUN --mount=type=cache,target=/root/.npm npm ci

多平台构建

bash
# 创建构建器
docker buildx create --name mybuilder --use

# 构建多平台镜像
docker buildx build --platform linux/amd64,linux/arm64 -t my-app:latest .

# 推送多平台镜像
docker buildx build --platform linux/amd64,linux/arm64 -t my-app:latest --push .

环境变量和配置

常用环境变量

bash
# Docker 客户端配置
export DOCKER_HOST=tcp://localhost:2376
export DOCKER_CERT_PATH=/path/to/certs
export DOCKER_TLS_VERIFY=1

# 构建时启用 BuildKit
export DOCKER_BUILDKIT=1

# 内容信任
export DOCKER_CONTENT_TRUST=1

.dockerignore 示例

# 忽略文件示例
node_modules
npm-debug.log
.git
.gitignore
README.md
.env
.nyc_output
coverage
*.log
.DS_Store
.vscode

故障排除

常见问题诊断

bash
# 查看 Docker 系统信息
docker info

# 查看 Docker 版本
docker version

# 查看容器详细信息
docker inspect container_name

# 检查端口映射
docker port container_name

# 测试网络连接
docker run --rm -it busybox ping google.com

调试技巧

bash
# 以交互模式运行容器
docker run -it --rm -v /tmp:/tmp alpine sh

# 使用调试镜像
docker run --rm -it --privileged --pid=host appropriate/curl

# 查看构建历史
docker history image_name

性能优化

资源限制

bash
# 限制内存和 CPU
docker run -m 512m --cpus="1.0" my-app

# 在 docker-compose.yml 中
services:
  app:
    image: my-app
    deploy:
      resources:
        limits:
          cpus: '1.0'
          memory: 512M
        reservations:
          cpus: '0.5'
          memory: 256M

日志优化

bash
# 配置日志轮转
docker run --log-driver json-file \
  --log-opt max-size=10m \
  --log-opt max-file=3 \
  my-app

# 在 docker-compose.yml 中
services:
  app:
    image: my-app
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"

常用组合命令

快速清理

bash
# 清理所有未使用的对象
docker system prune -a --volumes

# 停止并删除所有容器
docker stop $(docker ps -aq) && docker rm $(docker ps -aq)

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

# 删除所有卷
docker volume rm $(docker volume ls -q)

状态检查

bash
# 查看所有容器状态
docker ps -a --format "table {{.Names}}\t{{.Image}}\t{{.Status}}\t{{.Ports}}"

# 查看镜像大小
docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}"

# 查看卷使用情况
docker volume ls -q | xargs -I {} sh -c 'echo -n "{}: "; docker volume inspect {} --format "{{.UsageData.Size}}"' 2>/dev/null

小结

这份速查表涵盖了 Docker 的主要功能和常用命令。在日常使用中,可以根据需要快速查找相应的命令和配置。记住,熟练使用 Docker 需要不断实践,建议将常用命令保存为脚本或别名以提高效率。