← 返回首页
🔧

Docker容器操作:生命周期管理

📂 devops ⏱ 2 min 372 words

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容器的生命周期管理,包括创建、运行、监控、调试和清理,是高效运维容器化应用的基础。