前言:Docker 的镜像、容器和 Docker Compose 是容器化技术的核心组件,以下是对它们的详细解析及使用场景说明。
1、Docker 镜像(Image)
-
定义:
镜像是只读模板,包含运行应用程序所需的代码、依赖、环境配置等。类似于“软件安装包”。 -
核心特性:
-
分层存储:镜像由多层文件系统叠加而成,每层可通过 Dockerfile 指令(如
FROM
,RUN
,COPY
)定义,提升复用性。 -
只读性:镜像不可修改,若需更新需重新构建。
-
版本管理:通过标签(Tag)标识版本,如
nginx:1.21
或python:3.9-slim
。
-
- 常用命令:
# 构建镜像 docker build -t my-app:1.0 .# 拉取镜像 docker pull nginx:latest# 列出本地镜像 docker images# 删除镜像 docker rmi my-app:1.0
2、Docker 容器(Container)
-
定义:
容器是镜像的运行实例,包含独立的进程、文件系统和网络空间,类似“轻量级虚拟机”。 -
核心特性:
-
临时性:默认容器停止后数据丢失,需通过卷(Volume)持久化数据。
-
隔离性:资源(CPU、内存)和网络通过命名空间隔离,可通过参数调整。
-
可写层:在镜像之上添加可写层,容器修改不影响原始镜像。
-
- 常用命令:
# 启动容器
docker run -d --name web -p 80:80 nginx# 查看运行中的容器
docker ps# 进入容器终端
docker exec -it web /bin/bash# 停止/删除容器
docker stop web
docker rm web
3、Docker Compose
-
定义:
用于定义和运行多容器应用的工具,通过 YAML 文件(docker-compose.yml
)配置服务、网络、卷等。 -
核心场景:
-
多服务编排:如同时启动 Web 服务、数据库、缓存等。
-
环境隔离:通过文件定义不同环境的配置(开发、测试)。
-
依赖管理:自动处理服务启动顺序和网络连接。
-
- 配置文件示例:
version: '3' services:web:image: nginx:latestports:- "80:80"volumes:- ./html:/usr/share/nginx/htmldb:image: postgres:13environment:POSTGRES_PASSWORD: example
- 常用命令:
# 启动所有服务 docker-compose up -d# 停止并删除容器 docker-compose down# 查看服务日志 docker-compose logs web
4、使用场景对比
镜像 → 提供应用运行的基础模板。
容器 → 基于镜像启动的独立实例。
Docker Compose → 编排多个容器,简化复杂应用的部署。
场景 | 镜像 | 容器 | Docker Compose |
---|---|---|---|
单服务运行 | 提供运行环境模板 | 启动单个实例(如运行 Nginx) | 不适用 |
多服务协作 | 构建各服务的镜像 | 分别启动多个容器 | 通过 YAML 统一管理所有服务 |
开发环境配置 | 定义开发依赖(如 Python 环境) | 运行开发服务器 | 一键启动整个开发环境(前端 + 后端 + DB) |
持续集成/交付 (CI/CD) | 构建标准化应用包 | 测试环境运行 | 在测试流程中编排多组件测试 |
5、常见问题解答
-
镜像 vs 容器:镜像是“食谱”,容器是“做好的菜”;镜像不可变,容器是动态实例。
-
数据持久化:通过卷(Volume)或绑定挂载(Bind Mount)保存数据,避免容器删除导致数据丢失。
-
多环境配置:使用多个 Compose 文件(如
docker-compose.prod.yml
)或环境变量区分不同环境。 -
性能优化:精简镜像层、使用
.dockerignore
忽略无用文件、选择合适的基础镜像(如 Alpine 版本)。
参考链接:
win10 docker,docker-compose 安装和配置 - makalo - 博客园
2025最新Docker国内可用镜像源仓库地址分享_docker_脚本之家
docker学习使用教程_docker使用教程-CSDN博客
Docker 入门教程(简明易懂、零基础篇)