Docker镜像与容器
外观
简介[编辑 | 编辑源代码]
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容器[编辑 | 编辑源代码]
容器生命周期[编辑 | 编辑源代码]
容器操作示例[编辑 | 编辑源代码]
# 创建并启动容器
docker run -it --name my_container ubuntu:22.04 /bin/bash
# 列出运行中的容器
docker ps
# 停止容器
docker stop my_container
# 启动已停止的容器
docker start -ai my_container
镜像与容器关系[编辑 | 编辑源代码]
数学表示:
实际应用案例[编辑 | 编辑源代码]
场景:开发环境标准化[编辑 | 编辑源代码]
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实现了高效的资源利用和快速部署。