简介:本文详细介绍了Docker部署的全流程,涵盖基础概念、安装配置、镜像管理、容器操作及高级部署技巧,适合开发者和运维人员快速掌握Docker的实战能力。
Docker是一种基于Linux容器的轻量级虚拟化技术,通过将应用及其依赖打包为标准化单元(镜像),实现跨环境的一致性运行。其核心价值体现在:
典型应用场景包括CI/CD流水线、混合云部署、微服务拆分等。例如,某电商团队通过Docker将部署时间从2小时缩短至5分钟,故障恢复时间从30分钟降至2分钟。
# 卸载旧版本(如有)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# 添加Docker官方GPG密钥curl -fsSL https://download.docker.com/linux/ubuntu/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/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null# 安装Docker引擎sudo apt-get updatesudo apt-get install docker-ce docker-ce-cli containerd.io# 验证安装sudo docker run hello-world
sudo usermod -aG docker $USERnewgrp docker # 立即生效
重启服务:
// /etc/docker/daemon.json{"registry-mirrors": ["https://<your-id>.mirror.aliyuncs.com"]}
sudo systemctl restart docker
docker pull nginx:latest # 官方Nginx镜像docker pull mysql:5.7 # 指定版本
构建命令:
# 示例:构建Python Flask应用FROM python:3.9-slimWORKDIR /appCOPY requirements.txt .RUN pip install --no-cache-dir -r requirements.txtCOPY . .CMD ["gunicorn", "--bind", "0.0.0.0:8000", "app:app"]
docker build -t my-flask-app .
启动容器:
# 前台运行(Ctrl+C退出)docker run -it --rm ubuntu /bin/bash# 后台运行(-d)并映射端口(-p)docker run -d -p 8080:80 --name web nginx
docker ps -a # 查看所有容器docker stop web # 停止容器docker rm web # 删除容器(需先停止)docker logs -f web # 实时查看日志docker exec -it web /bin/bash # 进入运行中的容器
docker run -v /host/path:/container/path nginx
docker volume create my_voldocker run -v my_vol:/data nginx
通过docker-compose.yml定义多容器应用:
version: '3.8'services:web:image: nginx:latestports:- "80:80"volumes:- ./html:/usr/share/nginx/htmldb:image: mysql:5.7environment:MYSQL_ROOT_PASSWORD: examplevolumes:- db_data:/var/lib/mysqlvolumes:db_data:
启动命令:
docker-compose up -d # 后台启动docker-compose down # 停止并删除
docker network create my_netdocker run --network=my_net --name=service1 nginxdocker run --network=my_net --name=service2 alpine ping service1
防止单个容器占用过多资源:
docker run -it --memory="512m" --cpus="1.5" ubuntu /bin/bash
镜像安全:
docker scan my-image检查漏洞运行安全:
--read-only挂载根文件系统为只读--security-opt=no-new-privileges日志管理:
// /etc/docker/daemon.json{"log-driver": "json-file","log-opts": {"max-size": "10m","max-file": "3"}}
备份策略:
docker save -o nginx.tar nginx:latestdocker commit保存容器状态为镜像| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 容器无法启动 | 端口冲突 | 使用docker ps检查占用,修改-p参数 |
| 镜像拉取失败 | 网络问题 | 检查代理设置,尝试docker pull --platform linux/amd64 |
| 权限错误 | SELinux限制 | 临时禁用:setenforce 0,或添加--security-opt label=disable |
| 容器崩溃 | 内存不足 | 增加--memory限制或优化应用配置 |
通过系统掌握本文内容,开发者可具备独立设计、部署和维护生产级Docker应用的能力。建议从简单应用开始实践,逐步尝试复杂场景,最终实现DevOps全流程自动化。