Docker容器操作:生命周期管理
Docker容器操作:生命周期管理
容器生命周期
Docker容器有完整的生命周期:创建(created)→ 运行(running)→ 暂停(paused)→ 停止(stopped)→ 删除(deleted)。
容器创建与运行
基本操作
# 创建容器(不启动)
docker create --name mynginx nginx:latest
# 运行容器
docker run -d --name mynginx -p 80:80 nginx:latest
# 前台运行
docker run -it --rm ubuntu:22.04 bash
# 运行并自动删除
docker run --rm alpine echo "Hello"
运行参数详解
# -d: 后台运行
# -it: 交互式终端
# --name: 容器名称
# -p: 端口映射
# -v: 数据卷挂载
# -e: 环境变量
# --restart: 重启策略
# --network: 网络模式
# --cpus: CPU限制
# --memory: 内存限制
docker run -d \
--name myapp \
-p 8080:80 \
-v /data:/app/data \
-e APP_ENV=production \
--restart unless-stopped \
--cpus="2" \
--memory="1g" \
myapp:1.0
容器资源监控
# 查看容器资源使用
docker stats
# 查看容器进程
docker top mynginx
# 查看容器详细信息
docker inspect mynginx
# 查看容器文件系统变更
docker diff mynginx
# 查看容器端口映射
docker port mynginx
容器调试
进入容器
# 进入运行中的容器
docker exec -it mynginx bash
# 使用sh(适用于无bash的镜像)
docker exec -it mynginx sh
# 以特定用户进入
docker exec -it --user root mynginx bash
查看日志
# 查看容器日志
docker logs mynginx
# 实时跟踪日志
docker logs -f mynginx
# 查看最近100行日志
docker logs --tail 100 mynginx
# 查看特定时间后的日志
docker logs --since 2024-01-01T00:00:00 mynginx
# 查看日志并带时间戳
docker logs -t mynginx
容器数据管理
数据卷操作
# 创建数据卷
docker volume create mydata
# 查看数据卷
docker volume ls
docker volume inspect mydata
# 使用数据卷
docker run -d -v mydata:/data myapp:1.0
# 挂载宿主机目录
docker run -d -v /host/path:/container/path myapp:1.0
# 只读挂载
docker run -d -v /host/config:/config:ro myapp:1.0
容器与宿主机文件传输
# 从容器复制到宿主机
docker cp mynginx:/etc/nginx/nginx.conf ./nginx.conf
# 从宿主机复制到容器
docker cp ./config.conf mynginx:/etc/app/config.conf
容器网络
网络模式
# bridge模式(默认)
docker run --network bridge myapp
# host模式(使用宿主机网络)
docker run --network host myapp
# none模式(无网络)
docker run --network none myapp
# container模式(共享其他容器网络)
docker run --network container:mynginx myapp
端口映射
# 映射单个端口
docker run -p 8080:80 nginx
# 映射多个端口
docker run -p 80:80 -p 443:443 nginx
# 映射到随机端口
docker run -P nginx
# 指定绑定IP
docker run -p 127.0.0.1:8080:80 nginx
容器健康检查
# Dockerfile中定义健康检查
HEALTHCHECK --interval=30s --timeout=3s --retries=3 \
CMD curl -f http://localhost/ || exit 1
# 查看容器健康状态
docker inspect --format='{{.State.Health.Status}}' mynginx
# 查看健康检查日志
docker inspect --format='{{json .State.Health}}' mynginx | jq
容器资源限制
# CPU限制
docker run --cpus="1.5" myapp # 使用1.5个CPU
docker run --cpu-shares=512 myapp # CPU份额
# 内存限制
docker run --memory="512m" myapp
docker run --memory-swap="1g" myapp # 内存+交换分区
# IO限制
docker run --device-read-bps /dev/sda:10mb myapp
容器清理
# 停止所有运行容器
docker stop $(docker ps -q)
# 删除所有已停止容器
docker container prune
# 强制删除容器
docker rm -f mynginx
# 删除所有容器
docker rm -f $(docker ps -aq)
# 一键清理
docker system prune -a
实践:多容器应用管理
# 启动应用栈
docker-compose up -d
# 查看所有容器状态
docker-compose ps
# 查看特定服务日志
docker-compose logs -f web
# 扩展服务实例
docker-compose up -d --scale web=3
# 重建并启动
docker-compose up -d --build
总结
掌握Docker容器的生命周期管理,包括创建、运行、监控、调试和清理,是高效运维容器化应用的基础。