Docker 自动化部署与容器管理实践指南

一、基于脚本的 Docker 自动化部署方案

1. 脚本化部署的优势

  • 一键安装:简化复杂部署流程
  • 版本控制:确保环境一致性
  • 批量部署:支持大规模集群快速部署
  • 可审计:所有操作记录明确

2. 完整部署流程

# 1. 获取自动化部署包(内网源示例)
wget http://192.168.16.253/Linux92/Docker/day08-/softwares/oldboyedu-autoinstall-docker-docker-compose.tar.gz

# 2. 解压部署包
tar xf oldboyedu-autoinstall-docker-docker-compose.tar.gz

# 3. 执行安装(生产环境建议先审查脚本内容)
./install-docker.sh i

# 4. 验证安装
docker version

3. 脚本卸载流程

# 安全卸载(保留数据卷)
./install-docker.sh r

# 完全卸载(清理所有数据)
./install-docker.sh r --purge

4. 生产环境建议

  1. 脚本安全审查

    # 检查脚本内容
    cat install-docker.sh | grep -E "rm|mv|chmod|wget"
    
  2. 版本锁定

    # 修改脚本中的版本变量
    DOCKER_VERSION="20.10.24"
    
  3. 离线部署包

    # 创建离线包
    tar czf docker-offline-bundle.tar.gz docker/* install-docker.sh
    

二、Docker 镜像与容器管理精要

1. 镜像仓库体系

仓库类型 示例地址 特点
Docker Hub docker.io/library/nginx 官方默认,需网络加速
阿里云镜像 registry.cn-hangzhou.aliyuncs.com/namespace 国内加速,企业级支持
私有仓库 registry.yourcompany.com:5000 内网专用,完全可控

2. 镜像生命周期管理

# 1. 拉取镜像(显式指定版本)
docker pull registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1

# 2. 查看镜像详情
docker inspect <IMAGE_ID>

# 3. 镜像标签管理
docker tag old-image:1.0 new-registry/new-image:2.0

# 4. 清理无用镜像
docker image prune -a --filter "until=24h"

3. 容器操作全流程

基础操作

# 1. 启动容器(生产推荐写法)
docker run -d \
  --name web-app \
  -p 88:80 \
  -v /data/config:/etc/nginx \
  --restart unless-stopped \
  registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1

# 2. 查看容器状态
docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Status}}\t{{.Ports}}"

# 3. 容器日志查看
docker logs -f --tail 100 web-app

高级管理

# 1. 资源限制
docker update --memory 512m --cpus 1 web-app

# 2. 网络配置
docker network create --driver bridge app-net

# 3. 批量操作
docker stop $(docker ps -aq) && docker rm $(docker ps -aq)

三、生产环境最佳实践

1. 镜像管理规范

  • 标签策略

    • v1.2.3:语义化版本
    • git-<commit-hash>:精确对应代码版本
    • 20240501:日期版本
  • 分层优化

    # 基础层
    FROM alpine:3.18
    # 依赖层
    RUN apk add --no-cache nginx
    # 应用层
    COPY dist/ /usr/share/nginx/html
    

2. 容器运行时安全

# 1. 只读文件系统
docker run --read-only -v /tmp:/tmp:rw

# 2. 用户隔离
docker run -u 1001:1001

# 3. 能力限制
docker run --cap-drop ALL --cap-add NET_BIND_SERVICE

3. 监控与排错

# 1. 资源监控
docker stats --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}"

# 2. 故障诊断
docker exec -it web-app sh -c "nginx -t"

# 3. 事件审计
docker events --filter 'event=die' --since '2024-05-01'

四、常见问题解决方案

1. 镜像拉取失败处理

# 1. 配置镜像加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://<your-mirror>.mirror.aliyuncs.com"]
}
EOF
sudo systemctl restart docker

# 2. 代理设置
export HTTP_PROXY=http://proxy.example.com:8080
export HTTPS_PROXY=http://proxy.example.com:8080

2. 端口冲突处理

# 1. 查找占用进程
ss -tulnp | grep :88

# 2. 动态修改映射
docker stop web-app
docker commit web-app temp-image
docker run -d -p 8080:80 temp-image

3. 数据持久化方案

# 1. 命名卷(推荐)
docker volume create app-data
docker run -v app-data:/var/lib/mysql

# 2. 主机目录
docker run -v /host/path:/container/path

# 3. 存储驱动
docker info | grep -i storage

五、可视化工具推荐

  1. Portainer

    docker run -d -p 9000:9000 \
      -v /var/run/docker.sock:/var/run/docker.sock \
      portainer/portainer-ce
    
  2. LazyDocker

    docker run --rm -it -v \
      /var/run/docker.sock:/var/run/docker.sock \
      lazyteam/lazydocker
    
  3. cAdvisor(监控):

    docker run -d \
      --volume=/:/rootfs:ro \
      --volume=/var/run:/var/run:ro \
      --publish=8081:8080 \
      google/cadvisor:latest
    

结语

通过脚本化部署和规范化管理,可以显著提升 Docker 在生产环境中的稳定性和可维护性。建议结合 CI/CD 流程实现镜像的自动化构建和部署,同时定期进行安全扫描和版本更新。对于关键业务系统,应考虑实现容器编排(如 Kubernetes)以实现高可用部署。

posted on 2025-04-01 18:09  Leo-Yide  阅读(291)  评论(0)    收藏  举报