Bootstrap

【docker】镜像

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

  • 定义镜像构建规则的脚本文件。
  • 使用简单的指令(如 FROMRUNCOPY)来描述镜像构建过程。

镜像管理常用命令

命令功能
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在镜像仓库中搜索镜像。

实践操作

直观感受镜像分层和联合挂载

  • 拉取一个镜像(如 nginx),运行 docker history 查看镜像的分层信息:
    docker pull nginx
    docker history nginx
    

镜像分层和联合挂载

通过 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 savedocker 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

;