Docker 使用手册
Docker 使用手册
Docker 基础命令
镜像管理
查找镜像
docker search image_name--filter/-f:按条件过滤(如stars=100)。--limit:限制返回结果数量。
拉取镜像
docker pull image_name:tag--all-tags/-a:拉取镜像的所有标签。
查看本地镜像
docker images--all/-a:列出所有镜像,包括中间层。--digests:显示镜像摘要信息。--filter/-f:按条件过滤。
删除镜像
docker rmi image_name:tag--force/-f:强制删除。docker image prune -a:删除未使用的镜像。
保存与加载镜像
docker save image_name:tag | gzip > image.tar.gz
gunzip -c image.tar.gz | docker load查看镜像历史
docker history image_name:tag--no-trunc:显示完整信息。--quiet/-q:只显示层 ID。
根据容器提交镜像
docker commit -a "nathan" -m "create new img" <container_id> image_name:tag-a:设置作者信息。-m:描述信息。--change/-c:对镜像进行配置更改。
重命名镜像
docker tag old-repo/myimage:tag new-repo/myimage:new-tag容器管理
运行容器
docker run -it --entrypoint sh image_name:tag-i:保持标准输入打开。-t:分配伪终端。--name:为容器命名。-d:后台运行。--rm:退出后自动删除。-p:端口映射(如8080:80)。-v:挂载数据卷(如/host/path:/container/path)。
查看容器日志
docker logs <container_id>
docker logs --since 10m container_id-f:实时查看日志。--tail:显示最新日志行数(如100)。--since:从指定时间开始显示日志(支持10m、1h、具体时间戳等)。--until:设置日志显示结束时间。
查看容器状态
docker ps
docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Status}}"-a/--all:列出所有容器。-q:只显示容器 ID。--filter/-f:按条件过滤。--format:以指定格式显示容器信息,可用占位符包括:{{.ID}}:容器 ID{{.Names}}:容器名称{{.Status}}:容器状态{{.Ports}}:容器端口
--latest/-l:只显示最近创建的容器。--size/-s:显示容器的文件大小。
删除容器
docker rm $(docker ps -aq)-f/--force:强制删除。-v:同时删除挂载的卷。
停止/启动/重启容器
docker stop/start/restart container_id--time/-t:设置停止超时时间(默认 10 秒)。
检查容器信息
docker inspect container_id
docker inspect --format='{{.State.Running}}' container_id使用
--format提取特定信息:{{.State.Status}}:容器状态{{.Config.Image}}:镜像名称
进入容器
docker exec -it container_id /bin/bash网络管理
查看网络
docker network ls--filter/-f:按条件过滤。
创建网络
docker network create my-network--driver:指定网络驱动类型(如bridge、host)。--subnet:指定子网(如192.168.1.0/24)。
指定网络运行容器
docker run --network my-network --name nginx -d nginx删除网络
docker network rm network_name查看详细信息
docker network inspect network_name创建带驱动配置的网络
docker network create \
--driver bridge \
--subnet=192.168.1.0/24 \
custom-network删除未使用的网络
docker network prune清理无用资源
清理未使用镜像和容器
docker image prune -a
docker system prune -a-a:删除所有未使用资源。--force/-f:跳过确认提示。
性能监控
查看资源使用情况
docker stats --no-stream --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}"查看容器进程
docker top container_id查看系统事件
docker events挂载管理
查看数据卷
docker volume ls- 列出使用中的数据
docker volume ls --filter dangling=false
检查数据卷信息
docker volume inspect <volume_name>删除数据卷
docker volume rm volume_name清理未使用的卷
docker volume prune --force系统信息
查看版本
docker version查看系统信息
docker info导出与导入
导出容器
docker export container_id > container.tar导入容器
cat container.tar | docker import - new_image_name:tag文件复制
从主机复制到容器
docker cp local_path container_id:container_path从容器复制到主机
docker cp container_id:container_path local_path登录与登出
登录 Docker 仓库
docker login--username/-u:指定用户名。--password/-p:指定密码(不推荐明文)。
登出 Docker 仓库
docker logoutDockerfile 使用指南
1. 常用指令
基础设置
FROM:指定基础镜像,通常是第一行。FROM ubuntu:20.04LABEL:添加元数据。LABEL maintainer="your-email@example.com" version="1.0"
文件与目录操作
WORKDIR:设置工作目录。WORKDIR /appCOPY和ADD:复制文件到镜像中。COPY . /app ADD http://example.com/file.tar.gz /app # 支持远程 URL 下载与解压VOLUME:声明挂载点。VOLUME ["/data"]
软件安装与命令执行
RUN:执行命令安装依赖或配置环境。RUN apt-get update && apt-get install -y python3USER:设置后续命令的执行用户。USER nonroot
容器启动行为
CMD:设置容器启动时的默认命令(可被docker run覆盖)。CMD ["python3", "app.py"]ENTRYPOINT:设置不可覆盖的默认命令。ENTRYPOINT ["python3", "app.py"]EXPOSE:声明容器监听的端口(仅文档作用)。EXPOSE 8080
2. 分阶段构建
分阶段构建用于优化镜像大小。以下是示例:
# 构建阶段
FROM node:16 AS builder
WORKDIR /app
COPY . .
RUN npm install && npm run build
# 运行阶段
FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html- 构建阶段中安装依赖和生成构建产物。
- 运行阶段中仅包含运行所需的文件。
3. docker build 命令
docker build 用于根据 Dockerfile 构建镜像。
基本语法
docker build [OPTIONS] PATH常用选项
-t:为镜像命名和标记版本。docker build -t myapp:1.0 .-f:指定 Dockerfile 文件路径。docker build -f /path/to/Dockerfile .--no-cache:禁用构建缓存,强制执行所有步骤。docker build --no-cache -t myapp .--build-arg:传递构建时参数。docker build --build-arg VERSION=1.0 -t myapp .ARG VERSION ENV APP_VERSION=$VERSION-q:仅返回镜像 ID,隐藏构建日志。docker build -q -t myapp .--target:指定目标构建阶段,在多阶段构建中,仅构建指定阶段:docker build --target builder -t app-builder .导出缓存将构建缓存保存到目录:
docker build --cache-to=type=local,dest=./cache .启用并行构建使用
--progressdocker build --progress=plain .
示例
构建镜像:
docker build -t myapp .带参数构建:
docker build --build-arg ENV=production -t myapp:prod .
4. 优化建议
- 多阶段构建:减少最终镜像大小。
- 缓存利用:将变化较小的命令置于 Dockerfile 顶部。
- 精简基础镜像:选择
alpine等轻量级镜像。 合并 RUN 命令:减少镜像层数。
RUN apt-get update && apt-get install -y python3 && apt-get clean
总结
通过合理使用 Dockerfile 指令及优化构建过程,可以高效生成体积小、性能优的镜像。docker build 提供了丰富的选项以支持复杂需求,结合分阶段构建,可满足不同场景的性能和管理需求。
Docker Compose 使用指南
常用命令
启动服务
docker-compose up -d-d:后台运行。
停止并移除服务
docker-compose down- 默认会移除容器及相关网络,但不会删除卷。
- 使用
--volumes删除所有关联卷。
docker-compose down --volumes使用
--remove-orphans删除未定义的容器。docker-compose down --remove-orphans
查看状态
docker-compose ps指定配置文件启动
docker-compose -f custom-compose.yml up -d重启服务
docker-compose restart查看实时日志
docker-compose logs -f可指定服务名查看:
docker-compose logs -f service_name
清理无用卷
docker volume prune
docker-compose.yaml 书写规范
结构
顶层字段:
version:指定 Compose 文件版本。services:定义服务。volumes:定义数据卷。networks:定义网络。
- 缩进:使用两个空格,保持层级清晰。
示例
version: "3.9"
services:
web:
image: nginx:alpine
ports:
- "8080:80"
volumes:
- web-data:/usr/share/nginx/html
networks:
- webnet
app:
build:
context: ./app
environment:
- NODE_ENV=production
depends_on:
- db
networks:
- appnet
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: example
volumes:
- db-data:/var/lib/mysql
networks:
- appnet
volumes:
web-data:
db-data:
networks:
webnet:
appnet:网络配置
自定义网络
networks: custom-network: name: my-custom-network driver: bridge使用外部网络
networks: existing-network: external: true子网和网关
networks: custom-network: driver: bridge ipam: config: - subnet: 192.168.1.0/24 gateway: 192.168.1.1
卷配置
命名卷
volumes: app-data:挂载主机目录
services: app: volumes: - /host/path:/container/path驱动与选项
volumes: my-volume: driver: local driver_opts: type: nfs o: addr=192.168.1.100,rw device: ":/path/to/dir"
Docker Compose 的 build 配置
build 配置支持更多高级功能,例如缓存、构建参数、挂载等。
完整配置示例
services:
app:
build:
context: ./app
dockerfile: Dockerfile.prod
args:
APP_ENV: "production"
cache_from:
- app-cache
target: builder
network: host
extra_hosts:
- "local.test:127.0.0.1"字段说明
context:指定构建上下文目录(通常是包含 Dockerfile 的路径)。dockerfile:自定义 Dockerfile 路径。args:传递构建参数(在 Dockerfile 中使用ARG声明)。cache_from:使用指定镜像作为构建缓存源,减少重复构建时间。target:指定构建阶段的目标,仅构建多阶段镜像中的某一阶段。network:设置构建时使用的网络模式(如host)。extra_hosts:在构建时定义额外的主机解析(类似/etc/hosts)。
更多高级用法
挂载构建时的卷(Docker BuildKit 支持)
用于在构建时临时挂载额外数据,例如私有依赖库。
services: app: build: context: . dockerfile: Dockerfile secrets: - my_secret secrets: my_secret: file: ./secrets.txt
使用 BuildKit 的缓存挂载
services: app: build: context: . dockerfile: Dockerfile cache_from: - type=local,src=./cache cache_to: - type=local,dest=./cache
实用技巧
depends_on限制定义依赖关系,但不会保证服务完全启动:
depends_on: - db
扩展字段
使用x-前缀定义共享配置:x-shared-config: environment: - LOG_LEVEL=debug services: service1: <<: *x-shared-config image: app1 service2: <<: *x-shared-config image: app2动态扩展配置
配合环境变量使用:services: app: image: "${APP_IMAGE:-default-app}:latest"
综合示例
以下是一个完整的 Compose 配置文件示例:
version: "3.9"
services:
frontend:
image: nginx:alpine
ports:
- "8080:80"
networks:
- frontend-backend
backend:
build:
context: ./backend
environment:
- APP_ENV=production
depends_on:
- db
networks:
- frontend-backend
- backend-db
db:
image: postgres:13
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
volumes:
- db-data:/var/lib/postgresql/data
networks:
- backend-db
volumes:
db-data:
networks:
frontend-backend:
backend-db:总结
通过合理配置 docker-compose.yaml 文件并利用 Compose 命令,可以轻松管理复杂的容器服务。配合网络和卷配置,能进一步优化服务间的交互与数据持久化。
4. 常用脚本示例
检查容器内文件
#!/bin/bash
if [ -z "$1" ]; then
echo "请传入要搜索的文件名"
exit 1
fi
RUNNING_CONTAINERS="$(docker ps --format '{{.Names}}')"
for CONTAINER in $RUNNING_CONTAINERS; do
if docker exec -it $CONTAINER sh -c 'test -e $1'; then
echo "Found $1 in container: $CONTAINER"
fi
done5. 常见问题与注意事项
- 镜像源加速配置
# apk镜像源加速
RUN echo "https://mirrors.aliyun.com/alpine/v3.18/main" > /etc/apk/repositories && \
echo "https://mirrors.aliyun.com/alpine/v3.18/community" >> /etc/apk/repositories && \
apk update --allow-untrusted && \
apk add --allow-untrusted --clean-protected --no-cache bash && \
rm -rf /var/cache/apk/*
# apt镜像源加速
RUN sed -i 's/deb.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list && apt-get update- 删除未使用的镜像
comm -23 <(docker images --format "{{.Repository}}:{{.Tag}}" | sort) <(kubectl get pods --all-namespaces -o jsonpath="{..image}" | tr -s '[[:space:]]' '\n' | sort) | grep emotibot | grep -v infra | xargs docker rmi