Docker 镜像全面讲解
什么是 Docker 镜像
Docker 镜像是用于创建 Docker 容器的只读模板,包含运行应用所需的文件、环境变量和配置。镜像类似于虚拟机的快照,但更轻量,提供应用的标准化部署方式。
Docker 镜像的主要特点
特点 | 描述 |
---|
轻量级 | 镜像由分层结构组成,每一层是只读的,不重复存储相同内容。 |
分层存储 | 每次更改会作为新的一层叠加在旧的镜像之上,便于管理和共享。 |
便于分发 | 镜像可以推送到公共或私有注册中心,方便其他开发者拉取和使用。 |
跨平台 | 同一镜像可以在不同的平台上运行,只需支持相同的 Docker 运行环境。 |
Docker 镜像关键概念
1. Registry(注册中心)
- 保存和分发镜像的存储服务。
- 主要有 Docker Hub(官方公共注册中心)和私有注册中心。
2. Repository(仓库)
- 仓库是镜像的集合,用于存储同一项目或应用的多个版本。
- 格式:
<registry>/<repository>:<tag>
(例如 nginx:latest
)。
3. Manifest(清单文件)
- 定义镜像的元数据,包括层信息和镜像架构等。
- 是镜像分发的关键,支持跨平台兼容。
4. Image 和 Layer
- Image(镜像) 是若干只读层(Layer)的组合。
- Layer(层) 是镜像中的增量更新单位,便于分层管理。
5. Dockerfile
- 定义镜像构建规则的脚本文件。
- 使用简单的指令(如
FROM
、RUN
、COPY
)来描述镜像构建过程。
镜像管理常用命令
命令 | 功能 |
---|
docker images | 列出本地所有镜像。 |
docker rmi | 删除指定的镜像。 |
docker tag | 为镜像添加新标签。 |
docker build | 根据 Dockerfile 构建镜像。 |
docker save | 保存镜像为文件,便于分享。 |
docker load | 从文件加载镜像到本地。 |
docker import | 从 tar 文件导入为镜像(通常结合 docker export 使用)。 |
镜像仓库操作
命令 | 功能 |
---|
docker login | 登录到镜像注册中心。 |
docker logout | 登出镜像注册中心。 |
docker pull | 从镜像仓库拉取镜像到本地。 |
docker push | 将本地镜像推送到镜像仓库。 |
docker search | 在镜像仓库中搜索镜像。 |
实践操作
直观感受镜像分层和联合挂载
镜像分层和联合挂载
通过 docker inspect
查看容器的挂载点和层信息
docker inspect <container_id>
镜像构建
基于已有容器构建镜像
运行一个容器并进行修改
docker run -it ubuntu /bin/bash
提交该容器为新的镜像
docker commit <container_id> my_custom_image:1.0
使用 docker build
构建镜像
创建一个 Dockerfile
FROM ubuntu:latest
RUN apt-get update && apt-get install -y curl
CMD ["curl", "--version"]
构建镜像
docker build -t my_image:1.0 .
镜像分享
使用 tag
命令
为镜像添加标签
docker tag my_image:1.0 myrepo/my_image:1.0
公共仓库分享
推送到 Docker Hub
docker login
docker push myrepo/my_image:1.0
使用 docker save
和 docker load
分享
保存镜像为文件
docker save -o my_image.tar my_image:1.0
加载镜像
docker load -i my_image.tar
私有注册中心搭建并分享镜像
使用 Docker 官方镜像快速搭建注册中心
docker run -d -p 5000:5000 --name registry registry:2
推送镜像到私有注册中心
docker tag my_image:1.0 localhost:5000/my_image:1.0
docker push localhost:5000/my_image:1.0
拉取镜像测试
docker pull localhost:5000/my_image:1.0