Docker 容器原理与高阶用法
本文由一缘原创整理,系统梳理 Docker 容器的原理与高阶用法,适合所有后端/DevOps/全栈开发者。
Docker 容器原理与高阶用法
Docker 是现代云原生和 DevOps 的基石。
1. 容器与虚拟机的区别
- 容器共享宿主机内核,资源占用小,启动快
- 虚拟机有完整操作系统,资源隔离更强
特性 | 容器 | 虚拟机 |
---|---|---|
启动 | 秒级 | 分钟级 |
资源 | 轻量 | 占用大 |
隔离 | 进程级 | 硬件级 |
性能 | 接近原生 | 有损耗 |
2. 镜像分层与构建原理
- 镜像由多层只读层叠加,容器运行时加一层可写层
- 每条 Dockerfile 指令生成一层
FROM python:3.10-slim
COPY . /app
RUN pip install -r /app/requirements.txt
CMD ["python", "/app/main.py"]
- 查看镜像分层:
docker history myimage:latest
3. 容器网络与端口映射
- bridge(默认)、host、none、overlay
- 端口映射:
docker run -d -p 8080:80 nginx
- 查看网络:
docker network ls
docker network inspect bridge
4. 数据卷与持久化
- 容器内数据默认不持久化,需挂载数据卷
docker run -v /host/data:/container/data myapp
- 管理数据卷:
docker volume create myvol
docker volume inspect myvol
5. Dockerfile 优化技巧
- 合理分层,减少镜像体积
- 多阶段构建
- COPY/ADD 区别,优先 COPY
- 用 .dockerignore 排除无关文件
FROM node:18 as build
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
FROM nginx:alpine
COPY --from=build /app/dist /usr/share/nginx/html
6. Docker Compose 多容器编排
- 用 docker-compose.yml 管理多服务
version: '3'
services:
web:
image: nginx
ports:
- "8080:80"
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: example
- 启动:
docker-compose up -d
7. Swarm 集群与服务编排
- 初始化 Swarm 集群:
docker swarm init
- 部署服务:
docker service create --name web -p 80:80 nginx
- 查看服务:
docker service ls
8. 常用命令与实用技巧
- 查看容器日志:
docker logs <container>
- 进入容器:
docker exec -it <container> /bin/sh
- 清理无用资源:
docker system prune -af
9. 容器安全与最佳实践
- 最小权限原则,避免 root 运行
- 定期扫描镜像漏洞(如 Trivy)
- 只开放必要端口
- 定期清理无用镜像/容器
结语
Docker 容器化是现代开发的必备技能,理解原理和高阶用法能让你在 DevOps、云原生领域如鱼得水。欢迎留言交流更多容器实战!