Skip to content
60.Docker»01.Docker简介»LV050-镜像下载.md

LV050-镜像下载

一、镜像下载

1. 默认从Docker Hub拉取

前面我们知道使用下面的命令可以拉取镜像:

shell
docker pull images-name # 默认不加版本号的话,是使用latest版本。

默认是从镜像仓库(例如 Docker Hub)下载镜像,可能会报错,多数是因为网络的问题可以多次尝试下载。对于一些镜像,下载真的超级慢。这个时候可以使用vpn或者换一个国内的 docker 镜像下载地址(常见的有阿里云,清华源,163等)。

2. 从镜像源下载

2.1 常用镜像源

(1)默认docker镜像仓库地址:https://index.docker.io/v1/

(2)国内常见docker镜像仓库地址:

text
https://mirror.ccs.tencentyun.com # 腾讯云
http://hub-mirror.c.163.com # 网易
https://dockerhub.azk8s.cn  # 上海蓝云网络科技有限公司

镜像源可以添加多个,根据自己的网络环境选择速度快的,azk8s.cn 这个域名是上海蓝云网络科技有限公司的。

Tips:上海蓝云网络科技有限公司于2013年3月成立,由世纪互联与门为在中国境内提供Windows Azure和 Office 365 服务而成立,为世纪互联的全资子公司。

2.2 更换镜像源

2.2.1 修改配置文件

我们可以使用下面的命令更换镜像源:

shell
mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors":[
    "https://mirror.ccs.tencentyun.com",
    "http://hub-mirror.c.163.com",
    "https://dockerhub.azk8s.cn"
  ]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

我们在安装了docker服务后,默认在就会生成 /etc/docker 目录了,以上命令再次创建了/etc/docker目录,防止目录不存在,即便原来目录存在,原来目录下的文件也不会被覆盖的。我们可以执行下面的命令查看是否更新成功:

shell
docker info

会有这样的关键词出现:

shell
# ...
 Experimental: false
 Insecure Registries:
  ::1/128
  127.0.0.0/8
Registry Mirrors:
  http://hub-mirror.c.163.com/
  https://dockerhub.azk8s.cn/
 Live Restore Enabled: false
2.2.2 修改 docker 服务启动脚本
shell
sudo vim /usr/lib/systemd/system/docker.service

我们做如下修改:

text
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
# 修改为
ExecStart=/usr/bin/dockerd -H fd:// --registry-mirror=https://kvuwuws2.mirror.aliyuncs.com --containerd=/run/containerd/containerd.sock
image-20260307194146412

3. 本地导入镜像

有时我们需要将一台电脑上的镜像复制到另一台电脑上使用,除了可以借助仓库外,还可以直接将镜像保存成一个文件,再拷贝到另一台电脑上导入使用。

根据需求不同,可以选择 docker save/load(完整镜像)或 docker export/import(容器快照)两种方式。

3.1 export 和 import

这两个命令是通过容器来导入、导出镜像。

shell
docker ps -a  # 查看本机容器

# docker export [options] container
docker export container-id > images-name.tar  # 根据容器 ID 将镜像导出成一个文件

# docker import [options] file|URL|- [REPOSITORY[:TAG]]
docker import - images-name < images-name.tar # 将这个镜像文件导入

docker images # 查看镜像

3.2 save 和 load

这两个命令是通过镜像来保存、加载镜像文件的。这种方式将会保留镜像的所有层、元数据、标签和历史记录,适合迁移或备份完整镜像环境。

shell
docker images # 查看本机所有的镜像

docker save image-id > image-name.tar               # 根据镜像 ID 或者镜像名 将镜像保存成一个文件
docker save -o image-name.tar image-id              # 根据镜像 ID 或者镜像名 将镜像保存成一个文件

docker load < image-name.tar                        # 导入通过 docker save 导出的完整镜像文件,保留所有元数据。
docker load -i image-name.tar

# 导入后镜像名称和标签与原镜像一致,若需重命名,需使用 docker tag 命令:
docker tag <原镜像ID> <新镜像名:新标>

Tips:扩展功能

  • 导出多个镜像docker save -o combined.tar image1:tag1 image2:tag2
  • 压缩导出文件docker save image:tag | gzip > image.tar.gz

简单总结一下:

shell
# 1、导出镜像到本地
docker save -o 导出的镜像名.tar 本地镜像名:镜像标签 (tar包)
docker save 本地镜像名:镜像标签 | gzip > 导出的镜像名.tar.gz (压缩包)

# 2、导入本地镜像
docker load -i xxxx.tar/.tar.gz (本地镜像)

3.3 两组命令对比

特性docker save/loaddocker export/import
数据类型完整镜像(含所有层和元数据)容器快照(仅文件系统状态)
保留历史层
适用场景迁移、备份完整镜像快速创建镜像或恢复容器状态
文件生成方式docker savedocker export
文件大小镜像文件体积大镜像文件体积小
是否支持多个镜像打包支持不支持
是否包含镜像历史save 保存(load 加载)的镜像,没有丢失镜像的历史,可以回滚到之前的层(layer)export 导出(import 导入)是根据容器拿到的镜像,再导入时会丢失镜像所有的历史记录和元数据信息(即仅保存容器当时的快照状态),所以无法进行回滚操作
应用场景如果我们的应用是使用 docker-compose.yml 编排的多个镜像组合,但我们要部署的客户服务器并不能连外网。这时就可以使用 docker save 将用到的镜像打个包,然后拷贝到客户服务器上使用 docker load 载入。主要用来制作基础镜像,比如我们从一个 ubuntu 镜像启动一个容器,然后安装一些软件和进行一些设置后,使用 docker export 保存为一个基础镜像。然后,把这个镜像分发给其他人使用,比如作为基础的开发环境。

4. 直接下载其他站点镜像

shell
docker pull hub.c.163.com/library/tomcat:latest

二、创建镜像

这个可以看后面的Dockerfile部分的笔记。

参考资料

Docker使用save与export导入导出镜像和容器的方法与区别-开发者社区-阿里云

Docker - 实现本地镜像的导出、导入(export、import、save、load)

莫道桑榆晚 为霞尚满天.