跳转到内容

Docker镜像与容器

来自代码酷
Admin留言 | 贡献2025年5月1日 (四) 01:56的版本 (Page creation by admin bot)

(差异) ←上一版本 | 已核准修订 (差异) | 最后版本 (差异) | 下一版本→ (差异)


简介[编辑 | 编辑源代码]

Docker镜像容器是Docker技术的核心概念。镜像是一个轻量级、独立的可执行软件包,包含运行应用程序所需的一切(代码、运行时、库、环境变量和配置文件)。容器是镜像的运行时实例,可以被启动、停止、移动和删除。镜像与容器的关系类似于面向对象编程中"类"与"对象"的关系。

Docker镜像[编辑 | 编辑源代码]

镜像的基本特性[编辑 | 编辑源代码]

  • 分层存储:镜像由多个只读层(Layer)组成,每一层代表Dockerfile中的一个指令
  • 内容寻址:使用SHA256哈希值唯一标识
  • 不可变性:镜像创建后内容不可更改(修改会生成新镜像)

镜像操作示例[编辑 | 编辑源代码]

# 拉取官方Ubuntu镜像
docker pull ubuntu:22.04

# 列出本地镜像
docker images

# 删除镜像
docker rmi ubuntu:22.04

输出示例:

REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
ubuntu       22.04     3f472cac8f1d   2 weeks ago   77.8MB

Docker容器[编辑 | 编辑源代码]

容器生命周期[编辑 | 编辑源代码]

stateDiagram-v2 [*] --> Created: docker create Created --> Running: docker start Running --> Stopped: docker stop Stopped --> Running: docker start Running --> Paused: docker pause Paused --> Running: docker unpause Stopped --> [*]: docker rm

容器操作示例[编辑 | 编辑源代码]

# 创建并启动容器
docker run -it --name my_container ubuntu:22.04 /bin/bash

# 列出运行中的容器
docker ps

# 停止容器
docker stop my_container

# 启动已停止的容器
docker start -ai my_container

镜像与容器关系[编辑 | 编辑源代码]

graph LR A[Dockerfile] -->|docker build| B(镜像) B -->|docker run| C(容器) C -->|修改后提交| D(新镜像)

数学表示: 容器=镜像+可写层

实际应用案例[编辑 | 编辑源代码]

场景:开发环境标准化[编辑 | 编辑源代码]

1. 开发人员创建包含特定工具链的镜像 2. 团队成员共享该镜像 3. 每个人都运行完全相同的环境

示例Dockerfile[编辑 | 编辑源代码]

FROM python:3.9-slim

WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt

CMD ["python", "app.py"]

构建并运行:

docker build -t my-python-app .
docker run -d -p 4000:80 my-python-app

高级主题[编辑 | 编辑源代码]

镜像优化技巧[编辑 | 编辑源代码]

  • 使用多阶段构建减少最终镜像大小
  • 合并RUN指令减少层数
  • 使用.dockerignore文件排除无关文件

容器数据管理[编辑 | 编辑源代码]

  • 匿名卷:docker run -v /data
  • 命名卷:docker run -v dbdata:/data
  • 绑定挂载:docker run -v /host/path:/container/path

常见问题[编辑 | 编辑源代码]

Q: 容器删除后数据会丢失吗?[编辑 | 编辑源代码]

A: 默认情况下会丢失,除非使用卷(Volume)或绑定挂载。

Q: 如何查看镜像的构建历史?[编辑 | 编辑源代码]

A: 使用docker history 镜像名命令。

总结[编辑 | 编辑源代码]

Docker镜像是应用程序及其依赖的静态快照,而容器是这些镜像的运行实例。理解这两者的区别和关系是掌握Docker技术的基础。通过分层存储和写时复制(Copy-on-Write)机制,Docker实现了高效的资源利用和快速部署。