Docker部署教程:从零到一的完整实践指南
2025.09.26 16:38浏览量:0简介:本文详细讲解Docker的安装、镜像管理、容器运行及网络配置,提供从基础到进阶的部署方案,帮助开发者快速掌握容器化技术。
Docker部署教程:从零到一的完整实践指南
一、Docker简介与核心价值
Docker是一种开源的容器化技术,通过将应用及其依赖打包为轻量级、可移植的容器,实现”一次构建,随处运行”的跨环境部署能力。相较于传统虚拟机,Docker容器具有启动快(秒级)、资源占用低(共享内核)、环境一致性高等优势,已成为现代DevOps和微服务架构的标配工具。
典型应用场景:
- 开发环境标准化:解决”在我机器上能运行”的痛点
- CI/CD流水线:集成测试环境快速构建
- 微服务架构:独立部署和扩展服务组件
- 混合云部署:跨公有云/私有云无缝迁移
二、环境准备与安装
1. 系统要求
- Linux(推荐Ubuntu 20.04/CentOS 7+)
- Windows 10/11(需WSL2或Hyper-V支持)
- macOS(Intel/Apple Silicon均支持)
- 至少4GB内存(生产环境建议8GB+)
2. 安装步骤(以Ubuntu为例)
# 卸载旧版本(如有)sudo apt-get remove docker docker-engine docker.io containerd runc# 安装依赖sudo apt-get updatesudo apt-get install -y apt-transport-https ca-certificates curl gnupg-agent software-properties-common# 添加Docker官方GPG密钥curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -# 添加稳定版仓库sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"# 安装Docker引擎sudo apt-get updatesudo apt-get install -y docker-ce docker-ce-cli containerd.io# 验证安装sudo docker run hello-world
3. 配置非root用户权限
sudo groupadd dockersudo usermod -aG docker $USERnewgrp docker # 立即生效(或重启终端)
三、核心概念与操作
1. 镜像管理
镜像结构:分层存储(只读层+可写层)
常用命令:
# 搜索镜像docker search nginx# 拉取镜像docker pull nginx:latest# 查看本地镜像docker images# 删除镜像docker rmi nginx:latest# 保存镜像为tar文件docker save -o nginx.tar nginx:latest# 加载tar文件为镜像docker load -i nginx.tar
私有仓库配置(以阿里云为例):
# 登录私有仓库docker login --username=your_username registry.cn-hangzhou.aliyuncs.com# 标记镜像docker tag nginx:latest registry.cn-hangzhou.aliyuncs.com/your_namespace/nginx:v1# 推送镜像docker push registry.cn-hangzhou.aliyuncs.com/your_namespace/nginx:v1
2. 容器生命周期管理
基础操作:
# 运行容器(前台模式)docker run -it --name my_nginx nginx /bin/bash# 后台运行容器docker run -d --name web_server -p 80:80 nginx# 进入运行中的容器docker exec -it web_server /bin/bash# 停止/启动容器docker stop web_serverdocker start web_server# 查看容器日志docker logs -f web_server# 删除容器docker rm -f web_server # -f强制删除运行中的容器
资源限制:
# 限制内存和CPUdocker run -d --name resource_test \--memory="512m" \--cpus="1.5" \nginx
3. 数据持久化
方案对比:
| 方案 | 适用场景 | 命令示例 |
|———————|———————————————|—————————————————-|
| 绑定挂载 | 开发环境快速调试 | -v /host/path:/container/path |
| 卷(Volume) | 生产环境数据持久化 | --mount type=volume,src=myvol,dst=/data |
| 临时文件系统 | 无状态服务 | 默认行为 |
创建数据卷:
docker volume create my_voldocker run -d --name vol_test -v my_vol:/data nginx
四、网络配置进阶
1. 网络模式选择
| 模式 | 特点 |
|---|---|
| bridge(默认) | 容器通过虚拟网桥通信,可自定义子网 |
| host | 容器直接使用主机网络栈(性能最高,但安全性降低) |
| none | 无网络配置,需手动配置 |
| overlay | 跨主机网络(用于Swarm集群) |
自定义桥接网络:
docker network create --driver bridge my_bridge --subnet 172.18.0.0/16docker run -d --name net_test --network my_bridge nginx
2. 端口映射与负载均衡
# 单容器端口映射docker run -d -p 8080:80 nginx# 多容器负载均衡(需配合反向代理)# 启动多个实例for i in {1..3}; dodocker run -d --name web_$i -e VIRTUAL_HOST=example.com nginxdone
五、Docker Compose编排
1. 基础配置示例(docker-compose.yml)
version: '3.8'services:web:image: nginx:latestports:- "80:80"volumes:- ./html:/usr/share/nginx/htmldepends_on:- dbdb:image: mysql:5.7environment:MYSQL_ROOT_PASSWORD: exampleMYSQL_DATABASE: app_dbvolumes:- db_data:/var/lib/mysqlvolumes:db_data:
2. 常用命令
# 启动服务docker-compose up -d# 查看服务状态docker-compose ps# 扩展服务实例docker-compose scale web=3# 重建服务docker-compose up -d --build --no-deps# 停止服务docker-compose down
六、生产环境最佳实践
1. 安全加固
- 定期更新基础镜像(如
nginx:alpine) - 使用非root用户运行容器:
RUN groupadd -r appuser && useradd -r -g appuser appuserUSER appuser
- 限制容器能力:
docker run --cap-drop=ALL --cap-add=NET_BIND_SERVICE nginx
2. 监控方案
- Prometheus+Grafana:通过cAdvisor采集容器指标
- Docker内置统计:
docker stats
- 日志集中管理:ELK栈或Fluentd+Elasticsearch
3. 持续集成示例(GitHub Actions)
name: Docker CIon:push:branches: [ main ]jobs:build:runs-on: ubuntu-lateststeps:- uses: actions/checkout@v2- name: Build Docker imagerun: docker build -t myapp .- name: Login to Docker Hubuses: docker/login-action@v1with:username: ${{ secrets.DOCKER_HUB_USERNAME }}password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}- name: Push imagerun: |docker tag myapp ${{ secrets.DOCKER_HUB_USERNAME }}/myapp:latestdocker push ${{ secrets.DOCKER_HUB_USERNAME }}/myapp:latest
七、常见问题解决方案
1. 端口冲突处理
# 查找占用端口的进程sudo lsof -i :8080# 修改容器端口映射docker run -d -p 8081:80 nginx # 将主机8081映射到容器80
2. 镜像拉取失败
# 配置镜像加速器(以阿里云为例)sudo mkdir -p /etc/dockersudo tee /etc/docker/daemon.json <<-'EOF'{"registry-mirrors": ["https://<your-id>.mirror.aliyuncs.com"]}EOFsudo systemctl daemon-reloadsudo systemctl restart docker
3. 容器无法访问外网
# 检查DNS配置docker run --rm alpine cat /etc/resolv.conf# 指定DNS服务器docker run -d --dns 8.8.8.8 --dns 8.8.4.4 nginx
八、进阶方向建议
- 容器编排:学习Kubernetes或Docker Swarm
- 服务网格:探索Istio/Linkerd实现服务治理
- 安全审计:使用Clair或Trivy进行镜像漏洞扫描
- 性能优化:研究cgroups和namespace的深度调优
通过系统掌握本文介绍的Docker部署技术,开发者可以显著提升应用交付效率,降低环境差异导致的故障率。建议从简单应用开始实践,逐步过渡到复杂微服务架构的容器化部署。

发表评论
登录后可评论,请前往 登录 或 注册