Docker 速查手册
Docker 镜像、容器、网络、Compose、Dockerfile 常用操作速查
镜像管理(7)
拉取镜像
从 Docker Hub 拉取镜像
# 拉取最新版
docker pull nginx
# 拉取指定版本
docker pull nginx:1.25
# 拉取指定平台
docker pull --platform linux/amd64 nginx查看本地镜像
列出本地所有镜像
docker images
# 按大小排序
docker images --format '{{.Repository}}:{{.Tag}} {{.Size}}'构建镜像
从 Dockerfile 构建镜像
# 当前目录构建
docker build -t myapp:1.0 .
# 指定 Dockerfile
docker build -f Dockerfile.prod -t myapp:prod .
# 不使用缓存
docker build --no-cache -t myapp:1.0 .删除镜像
删除本地镜像
# 删除单个
docker rmi nginx:latest
# 强制删除
docker rmi -f myapp:1.0
# 删除所有无标签镜像
docker image prune镜像标签
给镜像打标签
docker tag myapp:1.0 registry.example.com/myapp:1.0推送镜像
推送镜像到仓库
# 登录
docker login registry.example.com
# 推送
docker push registry.example.com/myapp:1.0导出/导入镜像
镜像备份与恢复
# 导出
docker save -o myapp.tar myapp:1.0
# 导入
docker load -i myapp.tar容器生命周期(5)
运行容器
创建并启动容器
# 基本运行
docker run -d --name myapp nginx
# 端口映射
docker run -d -p 8080:80 nginx
# 环境变量
docker run -d -e MYSQL_ROOT_PASSWORD=123456 mysql:8
# 挂载目录
docker run -d -v /host/path:/container/path nginx
# 限制资源
docker run -d --memory=512m --cpus=1 myapp启动/停止容器
管理容器状态
docker start myapp
docker stop myapp
docker restart myapp删除容器
删除已停止的容器
# 删除单个
docker rm myapp
# 强制删除运行中的
docker rm -f myapp
# 删除所有已停止容器
docker container prune进入容器
在运行中的容器内执行命令
# 进入 bash
docker exec -it myapp bash
# 进入 sh
docker exec -it myapp sh
# 执行单条命令
docker exec myapp ls /app复制文件
容器与宿主机间复制文件
# 从容器复制到宿主机
docker cp myapp:/app/log.txt ./log.txt
# 从宿主机复制到容器
docker cp ./config.yml myapp:/app/config.yml容器信息(5)
查看运行中容器
列出正在运行的容器
# 运行中的
docker ps
# 所有容器
docker ps -a
# 只显示 ID
docker ps -q查看日志
查看容器输出日志
# 全部日志
docker logs myapp
# 实时跟踪
docker logs -f myapp
# 最后 100 行
docker logs --tail 100 myapp
# 带时间戳
docker logs -t myapp查看资源占用
实时监控容器资源使用
# 所有容器
docker stats
# 指定容器
docker stats myapp查看详细信息
查看容器/镜像的详细配置
# 容器详情
docker inspect myapp
# 获取 IP 地址
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' myapp查看端口映射
查看容器的端口映射关系
docker port myapp网络(3)
创建网络
创建 Docker 网络
# 创建桥接网络
docker network create mynet
# 指定子网
docker network create --subnet=172.20.0.0/16 mynet连接网络
将容器加入/移出网络
# 运行时指定网络
docker run -d --network mynet --name myapp nginx
# 已运行容器加入网络
docker network connect mynet myapp
# 断开网络
docker network disconnect mynet myapp查看网络
列出和检查网络
docker network ls
docker network inspect mynet数据卷(3)
创建数据卷
创建持久化数据卷
docker volume create mydata使用数据卷
挂载数据卷到容器
# 命名卷
docker run -d -v mydata:/var/lib/mysql mysql:8
# 绑定挂载(宿主机目录)
docker run -d -v $(pwd)/data:/app/data myapp
# 只读挂载
docker run -d -v mydata:/data:ro myapp查看/删除数据卷
管理数据卷
# 列出所有
docker volume ls
# 查看详情
docker volume inspect mydata
# 删除
docker volume rm mydata
# 清理未使用的
docker volume pruneDocker Compose(5)
启动服务
启动 docker-compose.yml 中的所有服务
# 后台启动
docker compose up -d
# 启动并构建
docker compose up -d --build
# 指定文件
docker compose -f docker-compose.prod.yml up -d停止服务
停止和删除 Compose 服务
# 停止
docker compose stop
# 停止并删除容器、网络
docker compose down
# 同时删除数据卷
docker compose down -v查看状态/日志
查看 Compose 服务状态
# 服务状态
docker compose ps
# 查看日志
docker compose logs -f
# 指定服务日志
docker compose logs -f web示例 Compose 文件
常见的 docker-compose.yml 结构
version: '3.8'
services:
web:
build: .
ports:
- '3000:3000'
environment:
- NODE_ENV=production
depends_on:
- db
restart: always
db:
image: mysql:8
environment:
MYSQL_ROOT_PASSWORD: 123456
MYSQL_DATABASE: myapp
volumes:
- db_data:/var/lib/mysql
ports:
- '3306:3306'
volumes:
db_data:扩缩容
调整服务实例数
docker compose up -d --scale web=3Dockerfile(4)
基础 Dockerfile
Node.js 应用的 Dockerfile 示例
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]多阶段构建
减小镜像体积的多阶段构建
# 构建阶段
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
# 运行阶段
FROM node:20-alpine
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
EXPOSE 3000
CMD ["node", "dist/main.js"]Java 应用 Dockerfile
Spring Boot 应用的 Dockerfile
FROM eclipse-temurin:17-jre-alpine
WORKDIR /app
COPY target/*.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"].dockerignore
排除不需要的文件
node_modules
.git
.env
*.md
Dockerfile
docker-compose.yml
.next
dist清理维护(2)
全面清理
清理所有未使用的资源
# 清理未使用的镜像、容器、网络、卷
docker system prune -a --volumes查看磁盘占用
查看 Docker 磁盘使用情况
docker system df
# 详细列表
docker system df -v