在本章节中,我们将学习如何有效地监控和管理 Docker 容器,包括使用命令行工具和图形化界面(Portainer)进行容器管理。

注意: 该部分所需要的容器我们可以利用上一节 docker compose 出来的容器来演示。

1. 容器管理基础

1.1 容器生命周期管理

以下是一些最常用的容器管理命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 列出所有容器(包括停止的容器)
docker ps -a

# 仅列出运行中的容器
docker ps

# 启动容器
docker start <container_id>

# 停止容器
docker stop <container_id>

# 重启容器
docker restart <container_id>

# 删除容器(需要先停止)
docker rm <container_id>

# 强制删除运行中的容器
docker rm -f <container_id>

1.2 容器资源监控

Docker 提供了多种方式来监控容器的资源使用情况:

1
2
3
4
5
6
7
8
9
10
11
# 实时查看容器资源使用状态
docker stats

# 查看容器详细信息
docker inspect <container_id>

# 查看容器内进程
docker top <container_id>

# 查看容器端口映射
docker port <container_id>

2. 容器日志与调试

2.1 日志查看

1
2
3
4
5
6
7
8
9
10
11
# 查看容器日志
docker logs <container_id>

# 实时查看最新日志
docker logs -f <container_id>

# 查看最近 100 行日志
docker logs --tail 100 <container_id>

# 显示时间戳
docker logs -t <container_id>

3. 实践练习: 使用 Portainer 对 docker 进行可视化管理

Portainer 是一个轻量级的 Docker 管理工具,提供了直观的 Web 界面来管理 Docker 环境。

3.1 安装 Portainer

1
2
3
4
5
6
7
8
9
10
# 创建 Portainer 数据卷
docker volume create portainer_data

# 运行 Portainer 容器
docker run -d -p 9000:9000 \
--name portainer \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce:latest

image-20250626025405357

安装完成后,在 cnb 上我们可以通过添加一个 9000 的端口映射来实现外网访问, 可以按照如下步骤来配置。

image-20250626025213242

点击这个浏览器图标,就可以访问 Portainer 了。

docker run ... (部署 Portainer)

这条命令虽然长,但每一部分都有其精确的用途,我们来逐一分解:

  • -d: 以分离 (detached) 模式在后台运行容器,这对于一个需要长期运行的服务是必须的。
  • -p 9000:9000:
    • 进行端口映射。将宿主机的 9000 端口映射到容器内部的 9000 端口。
    • Portainer 的 Web 服务默认在容器的 9000 端口上运行。通过这个映射,你就可以在你的电脑浏览器中通过访问 http://localhost:9000 来打开 Portainer 的管理界面了。
  • --name portainer: 给容器起一个易于识别的名字 portainer
  • --restart=always:
    • 这是一个重启策略 (Restart Policy)。它告诉 Docker 守护进程:“如果这个 portainer 容器因为任何原因(比如程序崩溃、服务器重启)而停止运行,请总是 (always) 自动把它重新启动起来。”
    • 这对于像 Portainer 这样的基础管理服务至关重要,能确保它的高可用性。其他常见的策略还有 on-failure(只在因错误退出时重启)和 unless-stopped(除非被手动停止,否则总是重启)。
  • -v /var/run/docker.sock:/var/run/docker.sock:
    • 这是整条命令中最核心、最特殊的部分。这是一个绑定挂载
    • /var/run/docker.sock 是什么? 它不是一个普通文件,而是一个 **Unix 套接字 (Unix Socket)**。你可以把它想象成是宿主机上一个特殊的“文件管道”,所有对 Docker 的操作指令(比如你在终端输入的 docker ps, docker run 等命令)实际上都是通过这个管道发送给在后台运行的 Docker 守护进程(Docker Daemon)来执行的。
    • 挂载它的作用: 通过这个绑定挂载,你相当于把宿主机上通往 Docker 引擎的“内部电话线”直接接进了 portainer 容器内部。这样一来,Portainer 程序就可以通过这个 socket 文件,向宿主机的 Docker 引擎发送指令并接收信息,从而实现对所有容器、镜像、卷、网络的全面监控和管理。
  • -v portainer_data:/data:
    • 这是一个卷挂载。它将我们第一步创建的 portainer_data 卷挂载到容器内部的 /data 目录。
    • portainer/portainer-ce 这个镜像被设计为将其所有的持久化数据(用户账户、环境配置、栈定义等)都存储在 /data 目录下。这个挂载确保了这些数据被安全地写入到 portainer_data 卷中,而不是容器短暂的文件系统里。
  • portainer/portainer-ce:latest:
    • 指定要使用的镜像:来自 portainer 官方仓库的社区版(portainer-ce)的最新(latest)版本。

✅【额外建议或常见错误】

  1. ❗️安全警告:Docker Socket 的权限
    • /var/run/docker.sock 挂载到容器内部,意味着你给予了这个容器极高的权限。一个能够访问 Docker Socket 的容器,理论上可以在宿主机上做任何事情(因为它能以任何方式启动任何其他容器,比如挂载宿主机根目录),这等同于宿主机的 root 权限
    • 因此,你必须绝对信任你所使用的镜像portainer/portainer-ce 是官方镜像,是可信的。但绝不要将 Docker Socket 挂载给任何来源不明或你不信任的镜像。
  2. 下一步操作
    • 当这个命令成功运行后,打开你的浏览器,访问 http://localhost:9000
    • Portainer 会引导你完成初始化设置:首先是创建一个 admin 管理员用户并设置一个健壮的密码
    • 接着,它会让你选择要管理的环境。因为你把 Docker Socket 挂载进来了,所以直接选择“Local”环境并点击连接即可。随后,你就能在仪表盘上看到所有正在运行的 Docker 资源了。
  3. 常见错误:忘记挂载数据卷
    • 如果漏掉了 -v portainer_data:/data 这一行,Portainer 依然可以运行。但是,你所有的设置(创建的用户名、密码等)都会保存在容器的临时文件系统中。一旦你因为升级或其他原因删除了这个 Portainer 容器,所有设置都会丢失,下次启动又得从头开始。

3.2 Portainer 主要功能

image-20250626025852004

  1. 仪表盘概览

    • 查看环境整体状态
    • 监控资源使用情况
    • 查看事件日志
  2. 容器管理

    • 创建、启动、停止、删除容器
    • 查看容器日志和统计信息
    • 进入容器终端
    • 修改容器配置
  3. 镜像管理

    • 拉取和删除镜像
    • 构建新镜像
    • 推送镜像到仓库
  4. 网络管理

    • 创建和管理 Docker 网络
    • 配置容器网络连接
  5. 数据卷管理

    • 创建和删除数据卷
    • 管理数据卷权限