Appearance
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 需要不断实践,建议将常用命令保存为脚本或别名以提高效率。