Docker 极简入门实战大纲
什么是 Docker
-
容器化技术的核心概念
容器是一种轻量级的虚拟化技术,将应用及其依赖打包成标准化的单元,与主机共享操作系统内核
示例:可以将一个Python Web应用及其依赖(如Flask、Redis)打包到一个容器中 -
Docker 与传统虚拟机的区别
- 虚拟机需要完整的操作系统(Guest OS),而容器共享主机OS内核
- 虚拟机启动慢(分钟级),容器启动快(秒级)
- 虚拟机资源占用高,容器资源占用低
-
核心组件
- 镜像(Image):只读模板,包含创建容器所需的所有文件和配置
- 容器(Container):镜像的运行实例,具有可写层
- 仓库(Repository):存储和分发镜像的集中位置,如Docker Hub
安装与配置 Docker
-
不同操作系统的安装方法
- Windows:通过Docker Desktop安装(需要WSL 2)
- macOS:下载Docker.dmg安装包
- Linux(Ubuntu示例):
sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io
-
验证安装是否成功
docker --version # 查看版本 docker run hello-world # 运行测试容器 -
配置国内镜像加速
修改/etc/docker/daemon.json(Linux示例):{ "registry-mirrors": ["https://your-mirror.mirror.aliyuncs.com"] }然后重启服务:
sudo systemctl restart docker
Docker 基础命令实战
镜像管理
- 拉取镜像:
docker pull nginx:latest(指定版本标签) - 查看本地镜像:
docker images(显示REPOSITORY, TAG, IMAGE ID等) - 删除镜像:
docker rmi nginx(先确保没有运行中的容器使用该镜像)
容器管理
- 运行容器:
docker run -d -p 8080:80 --name my_nginx nginx # -d: 后台运行 # -p: 端口映射(主机端口:容器端口) - 查看容器:
docker ps(运行中的容器)
docker ps -a(所有容器) - 容器生命周期管理:
docker stop/start/restart my_nginx - 进入容器终端:
docker exec -it my_nginx bash(交互式终端)
自定义 Docker 镜像(Dockerfile)
-
编写简单 Dockerfile(示例构建Python应用镜像):
FROM python:3.9-slim WORKDIR /app COPY requirements.txt . RUN pip install -r requirements.txt COPY . . CMD ["python", "app.py"] -
构建镜像:
docker build -t my-python-app .
(注意最后的小点表示当前目录是构建上下文) -
运行验证:
docker run -p 5000:5000 my-python-app
数据管理与网络配置
-
数据卷挂载:
docker run -v /host/data:/container/data mysql
(即使容器删除,/host/data中的数据仍会保留) -
容器网络:
- 默认bridge网络:容器获得独立IP,通过端口映射访问
- host网络:容器直接使用主机网络栈
示例:docker run --network=host nginx
实战案例
-
部署Nginx Web服务:
docker run -d -p 80:80 -v $(pwd)/html:/usr/share/nginx/html nginx(将主机当前目录下的html文件夹映射到容器)
-
运行MySQL并持久化数据:
docker run -d -p 3306:3306 \ -v mysql_data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=123456 \ mysql:5.7 -
Docker Compose初步:
编写docker-compose.yml定义多容器应用(如Web+DB)
常见问题与调试技巧
- 查看日志:
docker logs -f my_container(-f持续输出) - 清理资源:
docker system prune(删除停止的容器、未使用的网络和悬空镜像)
docker system prune -a(额外删除未被任何容器引用的镜像) - 常见问题解决:
- 端口冲突:
netstat -tulnp | grep 8080查找占用端口的进程 - 权限问题:使用
--privileged或调整Linux权限
- 端口冲突:
进阶学习方向
示例配置:
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
depends_on:
- redis
redis:
image: "redis:alpine"
Docker Swarm/Kubernetes集群管理
Docker Swarm
Docker原生的集群管理工具,适合中小规模部署:
Kubernetes
更强大的容器编排平台,适合大规模生产环境:
集群管理要点:
镜像优化技术
多阶段构建
# 构建阶段
FROM golang:1.16 AS builder
WORKDIR /app
COPY . .
RUN go build -o myapp .
# 最终阶段
FROM alpine:latest
WORKDIR /root/
COPY --from=builder /app/myapp .
CMD ["./myapp"]
减小镜像体积的方法
CI/CD中的Docker应用
GitLab CI集成示例:
stages:
- build
- test
- deploy
build_image:
stage: build
script:
- docker build -t myapp:$CI_COMMIT_SHA .
- docker push myapp:$CI_COMMIT_SHA
test_image:
stage: test
script:
- docker run myapp:$CI_COMMIT_SHA npm test
deploy_prod:
stage: deploy
script:
- kubectl set image deployment/myapp myapp=myapp:$CI_COMMIT_SHA
when: manual
CI/CD最佳实践:
安全最佳实践
-
Docker高级应用与最佳实践
Docker Compose多容器编排
Docker Compose是一个用于定义和运行多容器Docker应用程序的工具。通过一个YAML文件(通常命名为docker-compose.yml)来配置应用程序的服务,然后使用单个命令即可创建并启动所有服务。
典型应用场景:
- 开发环境标准化配置
- 微服务架构的本地测试
- 包含数据库、缓存、消息队列等的复合应用部署
- 使用
docker swarm init初始化Swarm集群 - 通过
docker service create部署服务 - 支持服务发现、负载均衡和滚动更新
- 自动故障转移和节点管理
- Pod作为最小部署单元
- 通过Deployment管理应用生命周期
- Service提供稳定的网络端点
- Ingress处理外部访问路由
- 节点角色管理(master/worker)
- 资源配额和限制
- 网络插件选择(Calico、Flannel等)
- 存储卷管理
- 监控和日志收集方案
- 使用Alpine等轻量级基础镜像
- 合并RUN指令减少镜像层
- 及时清理不需要的中间文件
- 使用
.dockerignore排除非必要文件 - 考虑使用Distroless镜像
- 为每次提交构建唯一标签的镜像
- 实现自动化测试流水线
- 蓝绿部署或金丝雀发布策略
- 镜像签名验证
- 制品仓库管理(Nexus、Harbor等)
-
非root用户运行容器
FROM alpine RUN adduser -D myuser USER myuser -
镜像扫描
- 使用Trivy、Clair等工具扫描漏洞
- CI流程中加入扫描环节
- 定期更新基础镜像
-
其他安全措施
- 限制容器资源使用
- 配置只读文件系统
- 最小化容器权限
- 使用安全上下文(Kubernetes)
- 网络隔离策略
- 密钥管理(Vault或Kubernetes Secrets)
-
运行时保护
- 启用seccomp和AppArmor
- 禁止特权模式运行
- 监控异常行为
更多推荐



所有评论(0)