Docker介绍
Docker 是一个开源容器化平台,主要作用是通过将应用程序及其依赖环境打包成轻量级、可移植的容器,实现跨环境的一致性部署与运行。其核心价值包括:
- 环境隔离:容器内的应用与宿主机及其他容器相互隔离,确保运行环境的独立性。
- 标准化交付:通过镜像(Image)封装代码、库和配置,消除“在我机器上能运行”的问题。
- 资源高效:共享宿主机内核,相比虚拟机(VM)更节省内存和计算资源,启动速度更快。
- 跨平台部署:一次构建的容器可在 Linux、Windows、云服务器等多种环境中运行。
- 简化运维:支持快速创建、复制、销毁容器,便于弹性扩展和持续集成/持续部署(CI/CD)。
Docker 已成为现代云原生应用开发和微服务架构的基础设施,显著提升了软件交付效率和系统可靠性。
一、Docker架构解析
-
核心组件
-
核心概念对比
概念 说明 类比 Image 只读模板,包含应用及其运行环境 虚拟机ISO镜像 Container 镜像的运行实例,具有可写层 运行中的虚拟机 Registry 镜像仓库(默认Docker Hub) 应用商店 Volume 持久化数据存储方案 外接硬盘
二、容器生命周期管理
1. 基础操作命令
# 运行容器(示例运行Nginx)
docker run -d -p 8080:80 --name my_nginx nginx:1.23 # 查看运行中的容器
docker ps
# 查看所有容器(含已停止)
docker ps -a# 停止/启动容器
docker stop my_nginx
docker start my_nginx# 删除容器
docker rm my_nginx
2. 容器交互模式
# 进入容器bash终端
docker exec -it my_nginx /bin/bash# 查看容器日志
docker logs -f my_nginx# 拷贝文件
docker cp local.txt my_nginx:/app/config.txt
三、镜像深度管理
1. 镜像操作全流程
# 拉取镜像(指定版本)
docker pull ubuntu:22.04# 查看本地镜像
docker images# 标记镜像
docker tag nginx:1.23 myrepo/nginx:v1# 推送镜像到私有仓库
docker push myrepo/nginx:v1# 删除镜像
docker rmi nginx:1.23
2. 镜像构建(Dockerfile)
# 多阶段构建示例
FROM golang:1.20 AS builder
WORKDIR /app
COPY . .
RUN go build -o myapp .FROM alpine:3.18
WORKDIR /app
COPY --from=builder /app/myapp .
CMD ["./myapp"]
构建命令:docker build -t myapp:v1 .
四、存储与网络配置
1. 数据持久化方案
类型 | 特点 | 适用场景 |
---|---|---|
Volume | Docker管理,存储在/var/lib/docker | 数据库数据 |
Bind Mount | 映射宿主机目录 | 配置文件同步 |
tmpfs mount | 内存临时存储 | 敏感临时数据 |
# 创建数据卷
docker volume create db_vol# 使用数据卷
docker run -v db_vol:/var/lib/mysql mysql:8.0
2. 网络模式详解
模式 | 特点 |
---|---|
bridge | 默认模式,NAT网络(172.17.0.0/16) |
host | 共享宿主机网络栈 |
none | 无网络连接 |
overlay | 跨主机容器通信(Swarm集群) |
# 创建自定义网络
docker network create my_net# 容器加入指定网络
docker run --net=my_net redis:7.0
五、多容器编排(Docker Compose)
1. 典型docker-compose.yml
version: '3.8'services:web:image: nginx:1.23ports:- "8080:80"volumes:- ./html:/usr/share/nginx/htmldepends_on:- dbdb:image: postgres:15environment:POSTGRES_PASSWORD: examplevolumes:- pgdata:/var/lib/postgresql/datavolumes:pgdata:
2. 常用命令
docker-compose up -d # 启动服务
docker-compose down # 停止并删除
docker-compose logs -f # 查看日志
六、安全最佳实践
-
容器安全准则
- 禁止使用
--privileged
特权模式 - 设置用户权限:
docker run -u 1001:1001 ...
- 定期扫描镜像漏洞:
docker scan nginx:1.23
- 配置资源限制:
docker run -m 512m --cpus=1.5 ...
- 禁止使用
-
生产环境建议
- 使用只读文件系统:
--read-only
- 配置健康检查:
HEALTHCHECK --interval=30s --timeout=3s \CMD curl -f http://localhost/ || exit 1
- 使用只读文件系统:
七、高级应用场景
-
集群管理
# 初始化Swarm集群 docker swarm init# 部署服务 docker service create --replicas 3 nginx:1.23
-
CI/CD集成示例
# Jenkins Pipeline片段 stage('Build Image') {docker.build("myapp:${env.BUILD_ID}") } stage('Deploy') {docker.withRegistry('https://registry.example.com', 'docker-creds') {image.push()} }
知识拓展建议:
- 容器运行时比较(containerd vs cri-o)
- 云原生技术栈(Kubernetes + Docker)
- 服务网格(Istio)与容器监控(Prometheus)