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. 生产环境建议
-
脚本安全审查:
# 检查脚本内容 cat install-docker.sh | grep -E "rm|mv|chmod|wget" -
版本锁定:
# 修改脚本中的版本变量 DOCKER_VERSION="20.10.24" -
离线部署包:
# 创建离线包 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
五、可视化工具推荐
-
Portainer:
docker run -d -p 9000:9000 \ -v /var/run/docker.sock:/var/run/docker.sock \ portainer/portainer-ce -
LazyDocker:
docker run --rm -it -v \ /var/run/docker.sock:/var/run/docker.sock \ lazyteam/lazydocker -
cAdvisor(监控):
docker run -d \ --volume=/:/rootfs:ro \ --volume=/var/run:/var/run:ro \ --publish=8081:8080 \ google/cadvisor:latest
结语
通过脚本化部署和规范化管理,可以显著提升 Docker 在生产环境中的稳定性和可维护性。建议结合 CI/CD 流程实现镜像的自动化构建和部署,同时定期进行安全扫描和版本更新。对于关键业务系统,应考虑实现容器编排(如 Kubernetes)以实现高可用部署。
浙公网安备 33010602011771号