Docker 容器管理与镜像操作

前言

在掌握了 Docker 的基础操作后,本文将深入介绍容器的高级管理功能和镜像操作,包括容器状态管理、镜像的导入导出,以及实际的数据库部署案例。

容器状态管理

查看容器列表

# 查看运行中的容器
docker ps

# 查看所有容器(包括已停止的)
docker ps -a

# 查看最后运行的容器
docker ps -l

# 使用新的命令格式
docker container ls

容器详细信息

# 查看容器详细信息
docker inspect containerid

# 查看容器资源使用情况
docker stats containerid

日志管理

查看容器日志

# 查看所有日志
docker container logs [container ID or NAMES]

# 实时查看日志
docker logs -f containerid

# 查看最近的日志
docker logs --tail 100 containerid

# 带时间戳的日志
docker logs -t containerid

日志管理最佳实践

# 限制日志大小
docker run --log-opt max-size=10m --log-opt max-file=3 nginx

镜像操作

保存镜像到本地文件

# 保存单个镜像
docker save -o centos_image.docker centos

# 保存多个镜像
docker save -o images.tar centos:latest ubuntu:latest

加载镜像

# 从文件加载镜像
docker load -i centos_image.docker

# 或者使用管道
docker load < centos_image.docker

镜像管理

# 查看本地镜像
docker images

# 删除镜像
docker rmi imageid

# 清理未使用的镜像
docker image prune

# 查看镜像历史
docker history imagename

实际部署案例

MySQL 数据库部署

docker run -p 3306:3306 \
  --name mysql \
  -v /data/mysql/logs:/logs \
  -v /data/mysql/data:/var/lib/mysql \
  -e MYSQL_ROOT_PASSWORD=123456 \
  -d mysql

参数详解:

  • -p 3306:3306:端口映射
  • --name mysql:容器名称
  • -v /data/mysql/logs:/logs:日志目录挂载
  • -v /data/mysql/data:/var/lib/mysql:数据目录挂载
  • -e MYSQL_ROOT_PASSWORD=123456:设置环境变量
  • -d:后台运行

PostgreSQL 数据库部署

bash复制docker run --name postgres \
  -e POSTGRES_PASSWORD=123456 \
  -p 5432:5432 \
  -v /data/pg/:/var/lib/postgresql/data:z \
  -d postgres

注意:这里使用了 :z 标志来解决 SELinux 权限问题。

连接到数据库

# 连接到 MySQL
docker exec -it mysql mysql -u root -p

# 连接到 PostgreSQL
docker exec -it postgres psql -U postgres

容器网络管理

创建自定义网络

# 创建网络
docker network create mynetwork

# 在指定网络中运行容器
docker run --network mynetwork --name app1 nginx
docker run --network mynetwork --name app2 mysql

容器互联

# 使用 link(已废弃,但仍可用)
docker run --name web --link mysql:db nginx

# 现代方式:使用自定义网络
docker network create app-network
docker run --network app-network --name mysql-db mysql
docker run --network app-network --name web-server nginx

数据备份与恢复

MySQL 数据备份

# 备份数据库
docker exec mysql mysqldump -u root -p123456 database_name > backup.sql

# 恢复数据库
docker exec -i mysql mysql -u root -p123456 database_name < backup.sql

PostgreSQL 数据备份

# 备份数据库
docker exec postgres pg_dump -U postgres database_name > backup.sql

# 恢复数据库
docker exec -i postgres psql -U postgres database_name < backup.sql

容器监控

资源监控

# 查看容器资源使用
docker stats

# 查看特定容器
docker stats mysql postgres

# 查看容器进程
docker top containerid

健康检查

# 运行带健康检查的容器
docker run --name web \
  --health-cmd="curl -f http://localhost/ || exit 1" \
  --health-interval=30s \
  --health-timeout=10s \
  --health-retries=3 \
  nginx

故障排除

常见问题解决

  1. 容器无法启动:bash复制docker logs containerid
  2. 端口冲突:bash复制netstat -tulpn | grep :3306
  3. 磁盘空间不足:bash复制docker system df docker system prune

最佳实践

  1. 定期备份重要数据
  2. 使用具名卷而不是绑定挂载
  3. 设置合适的资源限制
  4. 定期清理未使用的资源
  5. 使用 docker-compose 管理多容器应用

总结

本文详细介绍了 Docker 容器管理和镜像操作的高级功能,通过实际的数据库部署案例,展示了 Docker 在实际项目中的应用。这些技能将帮助您更好地管理和维护 Docker 环境。

hjq

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注