1 Docker 容器状态管理与优化

Docker 容器的生命周期包含多个状态:Created(已创建)、Running(运行中)、Paused(暂停)、Stopped(停止)和 Deleted(删除)。理解这些状态及其转换是有效管理 Docker 容器的基础。

1.1 容器生命周期管理 (高频常用)

命令功能描述实际示例使用频率
docker run创建并启动新容器docker run -d --name my-nginx nginx:alpine⭐⭐⭐⭐⭐
docker start启动已存在的停止容器docker start my-nginx⭐⭐⭐⭐⭐
docker stop优雅停止运行中的容器 (发送 SIGTERM)docker stop my-nginx(等待10秒)⭐⭐⭐⭐⭐
docker restart重启容器docker restart my-nginx⭐⭐⭐⭐
docker pause/unpause暂停/恢复容器docker pause my-nginx⭐⭐⭐
docker kill强制停止容器 (发送 SIGKILL)docker kill my-nginx(立即停止)⭐⭐
docker rm删除已停止的容器docker rm my-nginx⭐⭐⭐⭐⭐
docker create创建容器但不立即启动docker create --name my-nginx nginx:alpine⭐⭐

1.2 容器状态查看与监控 (高频常用)

命令功能描述实际示例使用频率
docker ps查看运行中的容器docker ps -a(查看所有容器)⭐⭐⭐⭐⭐
docker logs查看容器日志输出docker logs -f my-nginx(实时跟踪)⭐⭐⭐⭐⭐
docker stats实时监控容器资源使用 (CPU/内存/网络)docker stats my-nginx⭐⭐⭐⭐
docker top查看容器内运行的进程docker top my-nginx⭐⭐⭐
docker inspect查看容器详细信息 (配置/状态/网络)docker inspect my-nginx⭐⭐⭐⭐⭐
docker events查看实时事件流 (创建/启动/停止等)docker events --filter event=die⭐⭐
docker wait等待容器停止并获取退出状态码docker wait my-nginx

1.3 容器优化策略

  • 资源限制:使用 -m--cpus等参数限制容器资源,防止单个容器耗尽主机资源。

    docker run -it --memory=512m --cpus=1.5 alpine
    
  • 自动重启策略:根据容器退出状态配置自动重启。

    docker run --restart=always nginx       # 总是重启
    docker run --restart=on-failure:5 nginx # 失败时最多重启5次
    
  • 健康检查:在 Dockerfile 中定义健康检查指令,或在运行容器时指定。

    # Dockerfile 中定义
    HEALTHCHECK --interval=30s --timeout=3s \
      CMD curl -f http://localhost/ || exit 1
    
  • 清理机制:使用 --rm选项运行临时容器,或定期使用 prune命令清理。

    docker run --rm -it ubuntu          # 退出后自动删除
    docker system prune -a              # 清理所有停止的容器、未使用的镜像和网络
    

2 Docker 容器部署及配置设置

容器部署涉及运行时的各种配置,包括网络、存储、环境变量等。

2.1 容器运行与配置 (高频常用)

docker run命令是启动容器的核心,选项繁多。

选项功能描述实际示例使用频率
-d/--detach后台运行容器docker run -d nginx⭐⭐⭐⭐⭐
--name为容器指定名称docker run --name my-web nginx⭐⭐⭐⭐⭐
-p/--publish端口映射 (主机端口:容器端口)docker run -p 8080:80 nginx⭐⭐⭐⭐⭐
-v/--volume挂载数据卷或主机目录docker run -v /host/path:/container/path nginx⭐⭐⭐⭐⭐
-e/--env设置环境变量docker run -e MY_VAR=value nginx⭐⭐⭐⭐⭐
--rm容器退出后自动删除docker run --rm -it ubuntu bash⭐⭐⭐⭐
-it交互式运行容器 (组合选项)docker run -it ubuntu bash⭐⭐⭐⭐⭐
--network指定容器网络docker run --network=my-bridge nginx⭐⭐⭐⭐
--restart设置重启策略docker run --restart=on-failure:3 nginx⭐⭐⭐
-u/--user指定运行用户docker run -u 1000:1000 nginx⭐⭐
--env-file从文件读取环境变量docker run --env-file .env nginx⭐⭐⭐

2.2 网络配置管理

Docker 提供了多种网络模式来适应不同场景。

网络模式描述适用场景使用频率
bridge默认模式。容器通过 Docker 桥接网络与主机和其他容器通信。单主机内容器通信,需要端口映射⭐⭐⭐⭐⭐
host容器直接使用主机网络,无隔离。性能最好,但安全性较低。高性能需求场景,如网络密集型应用⭐⭐⭐
none禁用所有网络。容器完全隔离。安全隔离要求极高的场景
overlay支持多主机容器通信。Docker Swarm 或 Kubernetes 集群环境⭐⭐⭐ (集群)
macvlan为容器分配 MAC 地址,使其在物理网络上像一台物理设备。需要容器直接暴露在物理网络的场景⭐⭐

常用网络管理命令

# 查看网络列表
docker network ls
# 创建自定义桥接网络
docker network create --driver bridge --subnet 192.168.1.0/24 my-bridge
# 将运行中的容器连接到网络
docker network connect my-bridge my-container
# 断开容器与网络的连接
docker network disconnect my-bridge my-container
# 查看网络详细信息
docker network inspect my-bridge
# 删除网络
docker network rm my-bridge

2.3 数据持久化与卷管理

容器本身是临时的,数据持久化需要依赖卷(Volume)或绑定挂载(Bind Mount)。

方式描述优点缺点
VolumeDocker 管理的持久化数据存储,与容器生命周期分离。易于备份、迁移和管理,是 Docker 推荐的方式。位置在 Docker 存储区域,主机上直接访问稍复杂。
Bind Mount将主机上的特定目录或文件直接挂载到容器中。主机和容器之间共享文件方便,如配置文件、源代码。依赖主机目录结构,可移植性较差。
tmpfs将数据存储在内存中,仅适用于 Linux 主机。速度快,但容器停止后数据丢失。非持久化,适用于临时敏感数据。

常用数据卷命令

# 查看卷列表
docker volume ls
# 创建命名卷
docker volume create my-vol
# 查看卷详细信息
docker volume inspect my-vol
# 使用卷启动容器
docker run -d -v my-vol:/app/data nginx
# 删除未使用的卷
docker volume prune
# 绑定挂载主机目录
docker run -d -v /host/path:/container/path nginx

3 Docker 镜像管理:打包、发布、推送和拉取

镜像是容器的基础,管理镜像是 Docker 使用中的重要环节。

3.1 基础镜像操作 (高频常用)

命令功能描述实际示例使用频率
docker pull从仓库拉取镜像到本地docker pull nginx:latest⭐⭐⭐⭐⭐
docker images列出本地镜像docker images⭐⭐⭐⭐⭐
docker rmi删除本地镜像docker rmi nginx:latest⭐⭐⭐⭐
docker build根据 Dockerfile 构建镜像docker build -t my-app:latest .⭐⭐⭐⭐⭐
docker tag给镜像打标签docker tag my-app:latest my-registry/my-app:v1.0⭐⭐⭐⭐
docker push将镜像推送到远程仓库docker push my-registry/my-app:v1.0⭐⭐⭐⭐
docker save将镜像保存为 tar 文件docker save -o my-app.tar my-app:latest⭐⭐
docker load从 tar 文件加载镜像docker load -i my-app.tar⭐⭐
docker history查看镜像构建历史docker history my-app:latest⭐⭐
docker search在 Docker Hub 中搜索镜像docker search nginx⭐⭐

3.2 镜像构建 (Dockerfile)

Dockerfile 是一个包含构建镜像所需指令的文本文件。

常见 Dockerfile 指令

# 指定基础镜像
FROM alpine:3.7
# 更新系统并安装包
RUN apk update && apk add curl
# 设置工作目录
WORKDIR /app
# 复制应用程序文件
COPY app.sh .
# 设置入口点
ENTRYPOINT ["./app.sh"]

构建镜像:

docker build -t my-image:latest .

docker build支持一些有用选项:

  • --no-cache:构建时不使用缓存。
  • --pull:总是尝试拉取基础镜像的最新版本。

3.3 镜像推送与拉取

要分享镜像,需要将其推送到镜像仓库(如 Docker Hub、私有仓库)。

  1. 登录仓库

    docker login
    
  2. 标记镜像:镜像需要符合仓库的命名规范([registry-url]/[username]/[repository]:[tag])。

    docker tag my-image:latest your-username/your-repo:your-tag
    
  3. 推送镜像

    docker push your-username/your-repo:your-tag
    
  4. 拉取镜像(在其他机器上):

    docker pull your-username/your-repo:your-tag
    

4 Docker Compose 详细讲解

Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。通过一个 YAML 文件(默认名为 docker-compose.yml)来配置所有服务,然后用一条命令即可启动所有服务。

4.1 核心概念与优势

  • 单文件配置:使用 YAML 文件定义应用的所有服务、网络、卷。
  • 一键操作:一条命令启动、停止、重建所有服务。
  • 环境隔离:Compose 默认会为项目创建独立的网络,避免项目间干扰。
  • 变量与扩展:支持环境变量和扩展字段,便于配置复用。

4.2 docker-compose.yml 文件结构解析

一个典型的 docker-compose.yml文件包含以下部分:

version: '3'  # 指定 Compose 文件格式的版本

services:     # 定义各个服务(容器)
  web:        # 服务名称
    image: nginx:latest  # 使用的镜像
    ports:
      - "8080:80"       # 端口映射 (主机:容器)
    volumes:
      - ./html:/usr/share/nginx/html  # 挂载数据卷或目录
    networks:
      - my-network      # 连接到的网络
    depends_on:
      - database        # 依赖关系,先启动 database

  database:   # 另一个服务
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: example_password
    volumes:
      - db_data:/var/lib/mysql  # 使用命名卷
    networks:
      - my-network

volumes:      # 定义卷(如果不在上面声明,Compose 会自动创建)
  db_data:

networks:     # 定义网络(如果不在上面声明,Compose 会自动创建)
  my-network:

4.3 常用 Docker Compose 命令 (高频常用)

命令功能描述使用频率
docker-compose up创建并启动所有服务。-d在后台运行。⭐⭐⭐⭐⭐
docker-compose down停止并删除所有容器、网络。-v同时删除卷。⭐⭐⭐⭐⭐
docker-compose ps列出本项目中的所有容器。⭐⭐⭐⭐
docker-compose logs查看所有服务的日志。-f实时跟踪。⭐⭐⭐⭐
docker-compose start启动已存在的服务容器。⭐⭐⭐
docker-compose stop停止运行中的服务容器,不删除。⭐⭐⭐
docker-compose restart重启服务容器。⭐⭐⭐
docker-compose exec在运行中的服务容器中执行命令。⭐⭐⭐⭐
docker-compose build构建或重新构建服务的镜像。⭐⭐⭐
docker-compose pull拉取服务所需的镜像。⭐⭐
docker-compose config验证并查看 Compose 文件配置。⭐⭐

4.4 Docker Compose 实战示例:部署 WordPress

这是一个经典的多容器应用示例(WordPress + MySQL):

version: '3'

services:
  db:
    image: mysql:5.7
    volumes:
      - db_data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: somewordpress
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress

  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    ports:
      - "8000:80"
    restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
      WORDPRESS_DB_NAME: wordpress
    volumes:
      - ./wp-content:/var/www/html/wp-content

volumes:
  db_data:

部署步骤

  1. 将上述内容保存为 docker-compose.yml
  2. 在终端中运行 docker-compose up -d
  3. 打开浏览器访问 http://localhost:8000即可看到 WordPress 安装界面。
  4. 要停止并清理,运行 docker-compose down -v

5 总结与高频命令速查表

5.1 学习建议

  • 先掌握基础:熟练使用 docker run, docker ps, docker logs, docker stop, docker rm, docker images, docker build等核心命令。
  • 理解生命周期:明白容器的创建、运行、暂停、停止和删除状态及其转换。
  • 重视数据持久化:弄清 Volume 和 Bind Mount 的区别与适用场景。
  • 活用 Docker Compose:对于多容器应用,Compose 能极大提升效率。
  • 多实践:在本地尝试运行不同的容器(Nginx, MySQL, Redis等),修改配置,体验整个流程。

5.2 终极高频命令速查表

类别超高频命令 (每天用)次高频命令 (经常用)
容器生命周期docker run, docker ps, docker stop, docker rm, docker logsdocker start, docker restart, docker exec
镜像管理docker build, docker images, docker pulldocker tag, docker push, docker rmi
网络与存储docker network ls, docker volume lsdocker network create, docker volume create
Composedocker-compose up, docker-compose down, docker-compose logsdocker-compose ps, docker-compose exec
文章作者: 嘿手大叔
本文链接:
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 i·Space
学习记录 Docker
喜欢就支持一下吧
打赏
微信 微信
支付宝 支付宝