本文由一缘原创整理,系统梳理 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、云原生领域如鱼得水。欢迎留言交流更多容器实战!