简介:本文面向开发者与运维人员,系统讲解Docker容器化部署的核心流程,涵盖环境搭建、镜像管理、容器编排、多环境部署及运维优化,帮助读者快速掌握容器化技术并实现应用高效上线。
Docker作为当前主流的容器化技术,通过轻量级虚拟化实现应用与环境的标准化封装,解决了传统部署中“环境不一致”“依赖冲突”“资源利用率低”等痛点。本文将指导读者完成从环境搭建到多容器应用部署的全流程,适合具备基础Linux操作能力的开发者、运维人员及技术团队。部署完成后,读者将掌握:
容器化部署适用于以下典型场景:
容器化部署的核心组件包括:
以Linux环境为例,执行以下命令安装Docker:
# 卸载旧版本(如有)sudo apt-get remove docker docker-engine docker.io containerd runc# 安装依赖包sudo apt-get updatesudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release# 添加官方GPG密钥curl -fsSL https://download.docker.com/linux/$(lsb_release -is | tr '[:upper:]' '[:lower:]')/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg# 添加稳定版仓库echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/$(lsb_release -is | tr '[:upper:]' '[:lower:]') $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null# 安装Docker Enginesudo apt-get updatesudo apt-get install docker-ce docker-ce-cli containerd.io# 验证安装sudo docker run hello-world
为避免每次操作需sudo,将当前用户加入docker组:
sudo usermod -aG docker $USERnewgrp docker # 立即生效
以部署Nginx为例:
# 拉取官方镜像docker pull nginx:latest# 启动容器(映射端口、挂载数据卷)docker run -d \--name my-nginx \-p 80:80 \-v /path/to/html:/usr/share/nginx/html \nginx:latest# 验证访问curl http://localhost
关键配置说明:
-d:后台运行容器-p:端口映射(主机端口:容器端口)-v:数据卷挂载(主机路径:容器路径)通过docker-compose定义多容器依赖关系(示例为WordPress+MySQL):
version: '3.8'services:db:image: mysql:5.7volumes:- db_data:/var/lib/mysqlrestart: alwaysenvironment:MYSQL_ROOT_PASSWORD: examplepassMYSQL_DATABASE: wordpressMYSQL_USER: wordpressMYSQL_PASSWORD: wordpresswordpress:depends_on:- dbimage: wordpress:latestports:- "8000:80"restart: alwaysenvironment:WORDPRESS_DB_HOST: db:3306WORDPRESS_DB_USER: wordpressWORDPRESS_DB_PASSWORD: wordpressWORDPRESS_DB_NAME: wordpressvolumes:db_data: {}
执行以下命令启动:
docker-compose up -d
FROM python:3.9-slimWORKDIR /appCOPY requirements.txt .RUN pip install --no-cache-dir -r requirements.txtCOPY . .CMD ["gunicorn", "--bind", "0.0.0.0:5000", "app:app"]
docker build -t my-flask-app:v1 .
docker tag my-flask-app:v1 registry.example.com/my-repo/my-flask-app:v1docker push registry.example.com/my-repo/my-flask-app:v1
curl或浏览器访问应用端口。
docker logs <容器ID> # 查看实时日志docker logs -f <容器ID> # 跟踪日志输出
docker stats # 实时监控容器资源占用
Dockerfile中定义HEALTHCHECK指令,或通过编排工具配置健康探针。| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| 容器启动失败 | 镜像不存在、端口冲突、资源不足 | 检查docker images、netstat -tulnp、docker stats |
| 应用无法访问 | 防火墙未放行、网络模式错误 | 检查ufw status、确认容器网络模式(bridge/host) |
| 数据丢失 | 未使用数据卷、容器被删除 | 配置持久化存储、避免直接删除容器 |
| 镜像拉取慢 | 镜像仓库访问限制 | 配置镜像加速器或使用国内托管仓库 |
--cpus和--memory限制容器资源
docker system prune -a
root用户运行容器--read-only挂载只读文件系统python:3.9-slim)本文通过单容器、多容器、镜像构建等场景,系统讲解了Docker部署的核心流程。关键步骤包括:环境准备→镜像管理→容器编排→验证监控。后续可进一步探索:
通过容器化技术,开发者可显著提升应用交付效率,降低环境差异带来的风险,为微服务架构与云原生转型奠定基础。