logo

Docker部署教程:从零到一的完整实践指南

作者:问答酱2025.09.26 16:38浏览量:0

简介:本文详细讲解Docker的安装、镜像管理、容器运行及网络配置,提供从基础到进阶的部署方案,帮助开发者快速掌握容器化技术。

Docker部署教程:从零到一的完整实践指南

一、Docker简介与核心价值

Docker是一种开源的容器化技术,通过将应用及其依赖打包为轻量级、可移植的容器,实现”一次构建,随处运行”的跨环境部署能力。相较于传统虚拟机,Docker容器具有启动快(秒级)、资源占用低(共享内核)、环境一致性高等优势,已成为现代DevOps和微服务架构的标配工具。

典型应用场景

  1. 开发环境标准化:解决”在我机器上能运行”的痛点
  2. CI/CD流水线:集成测试环境快速构建
  3. 微服务架构:独立部署和扩展服务组件
  4. 混合云部署:跨公有云/私有云无缝迁移

二、环境准备与安装

1. 系统要求

  • Linux(推荐Ubuntu 20.04/CentOS 7+)
  • Windows 10/11(需WSL2或Hyper-V支持)
  • macOS(Intel/Apple Silicon均支持)
  • 至少4GB内存(生产环境建议8GB+)

2. 安装步骤(以Ubuntu为例)

  1. # 卸载旧版本(如有)
  2. sudo apt-get remove docker docker-engine docker.io containerd runc
  3. # 安装依赖
  4. sudo apt-get update
  5. sudo apt-get install -y apt-transport-https ca-certificates curl gnupg-agent software-properties-common
  6. # 添加Docker官方GPG密钥
  7. curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
  8. # 添加稳定版仓库
  9. sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
  10. # 安装Docker引擎
  11. sudo apt-get update
  12. sudo apt-get install -y docker-ce docker-ce-cli containerd.io
  13. # 验证安装
  14. sudo docker run hello-world

3. 配置非root用户权限

  1. sudo groupadd docker
  2. sudo usermod -aG docker $USER
  3. newgrp docker # 立即生效(或重启终端)

三、核心概念与操作

1. 镜像管理

镜像结构:分层存储(只读层+可写层)
常用命令

  1. # 搜索镜像
  2. docker search nginx
  3. # 拉取镜像
  4. docker pull nginx:latest
  5. # 查看本地镜像
  6. docker images
  7. # 删除镜像
  8. docker rmi nginx:latest
  9. # 保存镜像为tar文件
  10. docker save -o nginx.tar nginx:latest
  11. # 加载tar文件为镜像
  12. docker load -i nginx.tar

私有仓库配置(以阿里云为例):

  1. # 登录私有仓库
  2. docker login --username=your_username registry.cn-hangzhou.aliyuncs.com
  3. # 标记镜像
  4. docker tag nginx:latest registry.cn-hangzhou.aliyuncs.com/your_namespace/nginx:v1
  5. # 推送镜像
  6. docker push registry.cn-hangzhou.aliyuncs.com/your_namespace/nginx:v1

2. 容器生命周期管理

基础操作

  1. # 运行容器(前台模式)
  2. docker run -it --name my_nginx nginx /bin/bash
  3. # 后台运行容器
  4. docker run -d --name web_server -p 80:80 nginx
  5. # 进入运行中的容器
  6. docker exec -it web_server /bin/bash
  7. # 停止/启动容器
  8. docker stop web_server
  9. docker start web_server
  10. # 查看容器日志
  11. docker logs -f web_server
  12. # 删除容器
  13. docker rm -f web_server # -f强制删除运行中的容器

资源限制

  1. # 限制内存和CPU
  2. docker run -d --name resource_test \
  3. --memory="512m" \
  4. --cpus="1.5" \
  5. nginx

3. 数据持久化

方案对比
| 方案 | 适用场景 | 命令示例 |
|———————|———————————————|—————————————————-|
| 绑定挂载 | 开发环境快速调试 | -v /host/path:/container/path |
| 卷(Volume) | 生产环境数据持久化 | --mount type=volume,src=myvol,dst=/data |
| 临时文件系统 | 无状态服务 | 默认行为 |

创建数据卷

  1. docker volume create my_vol
  2. docker run -d --name vol_test -v my_vol:/data nginx

四、网络配置进阶

1. 网络模式选择

模式 特点
bridge(默认) 容器通过虚拟网桥通信,可自定义子网
host 容器直接使用主机网络栈(性能最高,但安全性降低)
none 无网络配置,需手动配置
overlay 跨主机网络(用于Swarm集群)

自定义桥接网络

  1. docker network create --driver bridge my_bridge --subnet 172.18.0.0/16
  2. docker run -d --name net_test --network my_bridge nginx

2. 端口映射与负载均衡

  1. # 单容器端口映射
  2. docker run -d -p 8080:80 nginx
  3. # 多容器负载均衡(需配合反向代理)
  4. # 启动多个实例
  5. for i in {1..3}; do
  6. docker run -d --name web_$i -e VIRTUAL_HOST=example.com nginx
  7. done

五、Docker Compose编排

1. 基础配置示例(docker-compose.yml)

  1. version: '3.8'
  2. services:
  3. web:
  4. image: nginx:latest
  5. ports:
  6. - "80:80"
  7. volumes:
  8. - ./html:/usr/share/nginx/html
  9. depends_on:
  10. - db
  11. db:
  12. image: mysql:5.7
  13. environment:
  14. MYSQL_ROOT_PASSWORD: example
  15. MYSQL_DATABASE: app_db
  16. volumes:
  17. - db_data:/var/lib/mysql
  18. volumes:
  19. db_data:

2. 常用命令

  1. # 启动服务
  2. docker-compose up -d
  3. # 查看服务状态
  4. docker-compose ps
  5. # 扩展服务实例
  6. docker-compose scale web=3
  7. # 重建服务
  8. docker-compose up -d --build --no-deps
  9. # 停止服务
  10. docker-compose down

六、生产环境最佳实践

1. 安全加固

  • 定期更新基础镜像(如nginx:alpine
  • 使用非root用户运行容器:
    1. RUN groupadd -r appuser && useradd -r -g appuser appuser
    2. USER appuser
  • 限制容器能力:
    1. docker run --cap-drop=ALL --cap-add=NET_BIND_SERVICE nginx

2. 监控方案

  • Prometheus+Grafana:通过cAdvisor采集容器指标
  • Docker内置统计
    1. docker stats
  • 日志集中管理:ELK栈或Fluentd+Elasticsearch

3. 持续集成示例(GitHub Actions)

  1. name: Docker CI
  2. on:
  3. push:
  4. branches: [ main ]
  5. jobs:
  6. build:
  7. runs-on: ubuntu-latest
  8. steps:
  9. - uses: actions/checkout@v2
  10. - name: Build Docker image
  11. run: docker build -t myapp .
  12. - name: Login to Docker Hub
  13. uses: docker/login-action@v1
  14. with:
  15. username: ${{ secrets.DOCKER_HUB_USERNAME }}
  16. password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
  17. - name: Push image
  18. run: |
  19. docker tag myapp ${{ secrets.DOCKER_HUB_USERNAME }}/myapp:latest
  20. docker push ${{ secrets.DOCKER_HUB_USERNAME }}/myapp:latest

七、常见问题解决方案

1. 端口冲突处理

  1. # 查找占用端口的进程
  2. sudo lsof -i :8080
  3. # 修改容器端口映射
  4. docker run -d -p 8081:80 nginx # 将主机8081映射到容器80

2. 镜像拉取失败

  1. # 配置镜像加速器(以阿里云为例)
  2. sudo mkdir -p /etc/docker
  3. sudo tee /etc/docker/daemon.json <<-'EOF'
  4. {
  5. "registry-mirrors": ["https://<your-id>.mirror.aliyuncs.com"]
  6. }
  7. EOF
  8. sudo systemctl daemon-reload
  9. sudo systemctl restart docker

3. 容器无法访问外网

  1. # 检查DNS配置
  2. docker run --rm alpine cat /etc/resolv.conf
  3. # 指定DNS服务器
  4. docker run -d --dns 8.8.8.8 --dns 8.8.4.4 nginx

八、进阶方向建议

  1. 容器编排:学习Kubernetes或Docker Swarm
  2. 服务网格:探索Istio/Linkerd实现服务治理
  3. 安全审计:使用Clair或Trivy进行镜像漏洞扫描
  4. 性能优化:研究cgroups和namespace的深度调优

通过系统掌握本文介绍的Docker部署技术,开发者可以显著提升应用交付效率,降低环境差异导致的故障率。建议从简单应用开始实践,逐步过渡到复杂微服务架构的容器化部署。

相关文章推荐

发表评论

活动