Docker 镜像、容器和 Docker Compose的区别

前言:Docker 的镜像、容器和 Docker Compose 是容器化技术的核心组件,以下是对它们的详细解析及使用场景说明。


​1、Docker 镜像(Image)​

  • ​定义​ ​:

    镜像是只读模板,包含运行应用程序所需的代码、依赖、环境配置等。类似于"软件安装包"。

  • ​核心特性​​:

    • ​分层存储​ ​:镜像由多层文件系统叠加而成,每层可通过 Dockerfile 指令(如 FROM, RUN, COPY)定义,提升复用性。

    • ​只读性​​:镜像不可修改,若需更新需重新构建。

    • ​版本管理​ ​:通过标签(Tag)标识版本,如 nginx:1.21python:3.9-slim

  • ​常用命令​

    bash 复制代码
    # 构建镜像
    docker build -t my-app:1.0 .
    
    # 拉取镜像
    docker pull nginx:latest
    
    # 列出本地镜像
    docker images
    
    # 删除镜像
    docker rmi my-app:1.0

​2、Docker 容器(Container)​

  • ​定义​ ​:

    容器是镜像的运行实例,包含独立的进程、文件系统和网络空间,类似"轻量级虚拟机"。

  • ​核心特性​​:

    • ​临时性​​:默认容器停止后数据丢失,需通过卷(Volume)持久化数据。

    • ​隔离性​​:资源(CPU、内存)和网络通过命名空间隔离,可通过参数调整。

    • ​可写层​​:在镜像之上添加可写层,容器修改不影响原始镜像。

  • ​常用命令​

bash 复制代码
# 启动容器
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 服务、数据库、缓存等。

    • ​环境隔离​​:通过文件定义不同环境的配置(开发、测试)。

    • ​依赖管理​​:自动处理服务启动顺序和网络连接。

  • ​配置文件示例​

    cs 复制代码
    version: '3'
    services:
      web:
        image: nginx:latest
        ports:
          - "80:80"
        volumes:
          - ./html:/usr/share/nginx/html
      db:
        image: postgres:13
        environment:
          POSTGRES_PASSWORD: example
  • ​常用命令​

    bash 复制代码
    # 启动所有服务
    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 入门教程(简明易懂、零基础篇)

相关推荐
ldj20206 小时前
Docker的docker-compose类比Spring的ApplicationContext
spring·docker
ldj20206 小时前
docker 自定义网桥作用
docker·容器
java叶新东老师6 小时前
k8s常用命令
云原生·容器·kubernetes
土豆丶杨8 小时前
centos 配置docker
docker·eureka·centos
杰哥的狗8 小时前
nacos连接失败,启动失败常见问题
linux·docker
DarkAthena9 小时前
【GaussDB】构建一个GaussDB的Docker镜像
数据库·docker·gaussdb
张火火isgudi13 小时前
CentOS8 使用 Docker 搭建 Jellyfin 家庭影音服务器
服务器·docker·容器
qq_4477053114 小时前
宝塔通过docker部署JupyterHub指南【常见错误处理】
运维·docker·容器
tanxiaomi14 小时前
docker 从主机复制文件到容器外进行编辑
运维·docker·容器
hzulwy15 小时前
docker与k8s的容器数据卷
docker·eureka·kubernetes