Docker容器管理
大约 6 分钟Docker指南Docker容器
Docker容器管理
什么是Docker容器
Docker容器是镜像的运行实例。可以将容器看作是一个简易版的Linux系统环境(包括root用户权限、进程空间、用户空间和网络空间等)以及运行在其中的应用程序。容器与镜像的关系类似于面向对象编程中的对象与类的关系。
容器生命周期管理
1. 创建和启动容器
# 后台运行容器
docker run -d nginx
# 前台运行容器
docker run -it ubuntu /bin/bash
# 指定容器名称
docker run --name mynginx -d nginx
# 指定端口映射
docker run -d -p 8080:80 nginx
# 指定环境变量
docker run -d -e MYSQL_ROOT_PASSWORD=123456 mysql
# 挂载数据卷
docker run -d -v /host/data:/container/data nginx
2. 查看容器状态
# 查看正在运行的容器
docker ps
# 查看所有容器(包括停止的)
docker ps -a
# 查看容器详细信息
docker inspect container_name
# 查看容器日志
docker logs container_name
# 实时查看容器日志
docker logs -f container_name
3. 停止和启动容器
# 停止容器
docker stop container_name
# 启动已停止的容器
docker start container_name
# 重启容器
docker restart container_name
# 暂停容器
docker pause container_name
# 恢复容器
docker unpause container_name
4. 删除容器
# 删除指定容器
docker rm container_name
# 强制删除正在运行的容器
docker rm -f container_name
# 删除所有停止的容器
docker container prune
# 删除所有容器
docker rm -f $(docker ps -aq)
容器交互操作
1. 进入容器
# 进入容器执行命令
docker exec -it container_name /bin/bash
# 在容器中执行单条命令
docker exec container_name ls /app
# 以root用户进入容器
docker exec -it -u root container_name /bin/bash
2. 容器间通信
# 使用容器链接(已废弃,推荐使用自定义网络)
docker run --link db:database web
# 创建自定义网络
docker network create mynetwork
# 在自定义网络中运行容器
docker run --network mynetwork --name db -d mysql
docker run --network mynetwork --name web -d nginx
3. 容器资源限制
# 限制内存使用
docker run -d --memory=512m nginx
# 限制CPU使用
docker run -d --cpus=0.5 nginx
# 限制CPU核心
docker run -d --cpuset-cpus=0,1 nginx
容器数据管理
1. 数据卷管理
# 创建数据卷
docker volume create myvolume
# 查看数据卷
docker volume ls
# 查看数据卷详细信息
docker volume inspect myvolume
# 删除数据卷
docker volume rm myvolume
# 删除所有未使用的数据卷
docker volume prune
2. 挂载数据卷
# 挂载命名数据卷
docker run -d -v myvolume:/app/data nginx
# 挂载主机目录
docker run -d -v /host/path:/container/path nginx
# 挂载临时文件系统
docker run -d --tmpfs /tmp nginx
3. 数据备份与恢复
# 备份数据卷
docker run --rm -v myvolume:/data -v $(pwd):/backup alpine tar czf /backup/backup.tar.gz -C /data .
# 恢复数据卷
docker run --rm -v myvolume:/data -v $(pwd):/backup alpine tar xzf /backup/backup.tar.gz -C /data
容器网络管理
1. 网络基础操作
# 查看网络列表
docker network ls
# 创建网络
docker network create mynetwork
# 查看网络详细信息
docker network inspect mynetwork
# 删除网络
docker network rm mynetwork
# 删除所有未使用的网络
docker network prune
2. 容器网络配置
# 将容器连接到网络
docker network connect mynetwork container_name
# 断开容器与网络的连接
docker network disconnect mynetwork container_name
# 在指定网络中运行容器
docker run --network mynetwork --name mycontainer nginx
容器健康检查
1. 配置健康检查
# 在Dockerfile中配置健康检查
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
CMD curl -f http://localhost/ || exit 1
# 运行时配置健康检查
docker run -d \
--health-cmd="curl -f http://localhost/ || exit 1" \
--health-interval=30s \
--health-timeout=3s \
--health-retries=3 \
nginx
2. 查看健康状态
# 查看容器健康状态
docker ps
# 查看详细健康信息
docker inspect container_name | grep Health
容器日志管理
1. 日志查看
# 查看容器日志
docker logs container_name
# 实时查看日志
docker logs -f container_name
# 查看最近的日志
docker logs --tail 100 container_name
# 查看指定时间段的日志
docker logs --since "2023-01-01" --until "2023-01-02" container_name
2. 日志驱动配置
# 使用json-file日志驱动
docker run -d --log-driver=json-file --log-opt max-size=10m --log-opt max-file=3 nginx
# 使用syslog日志驱动
docker run -d --log-driver=syslog --log-opt syslog-address=tcp://192.168.1.42:123 nginx
# 使用fluentd日志驱动
docker run -d --log-driver=fluentd --log-opt fluentd-address=192.168.1.42:24224 nginx
容器监控和统计
1. 资源使用统计
# 查看容器资源使用情况
docker stats
# 查看指定容器的资源使用情况
docker stats container_name
# 查看容器进程信息
docker top container_name
2. 容器性能监控
# 查看容器详细信息
docker inspect container_name
# 查看容器文件系统使用情况
docker diff container_name
容器自动重启策略
1. 配置重启策略
# 容器退出时总是重启
docker run -d --restart=always nginx
# 容器退出时重启,最多重启3次
docker run -d --restart=on-failure:3 nginx
# 除非手动停止,否则自动重启
docker run -d --restart=unless-stopped nginx
2. 修改现有容器的重启策略
# 更新容器的重启策略
docker update --restart=always container_name
容器安全配置
1. 用户权限管理
# 以非root用户运行容器
docker run -d --user 1000:1000 nginx
# 只读文件系统
docker run -d --read-only nginx
# 添加功能权限
docker run -d --cap-add=NET_ADMIN nginx
2. 安全选项
# 启用SELinux
docker run -d --security-opt label=type:container_t nginx
# 启用AppArmor
docker run -d --security-opt apparmor=profile_name nginx
常用容器管理命令总结
命令 | 说明 |
---|---|
docker run | 创建并启动容器 |
docker ps | 查看容器列表 |
docker stop | 停止容器 |
docker start | 启动容器 |
docker restart | 重启容器 |
docker rm | 删除容器 |
docker exec | 在容器中执行命令 |
docker logs | 查看容器日志 |
docker inspect | 查看容器详细信息 |
docker stats | 查看容器资源使用情况 |
docker top | 查看容器进程 |
docker attach | 连接到运行中的容器 |
docker wait | 等待容器停止 |
docker kill | 强制停止容器 |
容器管理最佳实践
1. 容器命名规范
# 使用有意义的容器名称
docker run --name web-server-01 -d nginx
docker run --name database-master -d mysql
2. 资源限制
# 合理设置资源限制
docker run -d --memory=1g --cpus=1.0 --name myapp myimage:v1.0
3. 日志管理
# 配置日志轮转
docker run -d --log-driver=json-file --log-opt max-size=100m --log-opt max-file=5 nginx
4. 健康检查
# 配置健康检查确保服务可用性
docker run -d --health-cmd="curl -f http://localhost/ || exit 1" nginx
故障排查技巧
1. 容器启动失败
# 查看容器日志
docker logs container_name
# 查看容器详细信息
docker inspect container_name
# 检查端口占用
netstat -tlnp | grep 8080
2. 容器性能问题
# 查看资源使用情况
docker stats container_name
# 查看容器进程
docker top container_name
3. 网络连接问题
# 测试容器网络连接
docker exec -it container_name ping google.com
# 查看容器网络配置
docker inspect container_name | grep -A 20 NetworkSettings
总结
Docker容器管理是容器化技术的核心技能。通过合理的容器管理,可以确保应用的稳定运行和高效维护。在实际使用中,应该遵循容器管理的最佳实践,合理配置资源限制、日志管理和健康检查,确保容器的安全性和可靠性。