前言
在掌握了 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
故障排除
常见问题解决
- 容器无法启动:bash复制
docker logs containerid - 端口冲突:bash复制
netstat -tulpn | grep :3306 - 磁盘空间不足:bash复制
docker system df docker system prune
最佳实践
- 定期备份重要数据
- 使用具名卷而不是绑定挂载
- 设置合适的资源限制
- 定期清理未使用的资源
- 使用 docker-compose 管理多容器应用
总结
本文详细介绍了 Docker 容器管理和镜像操作的高级功能,通过实际的数据库部署案例,展示了 Docker 在实际项目中的应用。这些技能将帮助您更好地管理和维护 Docker 环境。
