LV050-镜像下载
一、镜像下载
1. 默认从Docker Hub拉取
前面我们知道使用下面的命令可以拉取镜像:
docker pull images-name # 默认不加版本号的话,是使用latest版本。默认是从镜像仓库(例如 Docker Hub)下载镜像,可能会报错,多数是因为网络的问题可以多次尝试下载。对于一些镜像,下载真的超级慢。这个时候可以使用vpn或者换一个国内的 docker 镜像下载地址(常见的有阿里云,清华源,163等)。
2. 从镜像源下载
2.1 常用镜像源
(1)默认docker镜像仓库地址:https://index.docker.io/v1/
(2)国内常见docker镜像仓库地址:
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 修改配置文件
我们可以使用下面的命令更换镜像源:
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目录,防止目录不存在,即便原来目录存在,原来目录下的文件也不会被覆盖的。我们可以执行下面的命令查看是否更新成功:
docker info会有这样的关键词出现:
# ...
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: false2.2.2 修改 docker 服务启动脚本
sudo vim /usr/lib/systemd/system/docker.service我们做如下修改:
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
3. 本地导入镜像
有时我们需要将一台电脑上的镜像复制到另一台电脑上使用,除了可以借助仓库外,还可以直接将镜像保存成一个文件,再拷贝到另一台电脑上导入使用。
根据需求不同,可以选择 docker save/load(完整镜像)或 docker export/import(容器快照)两种方式。
3.1 export 和 import
这两个命令是通过容器来导入、导出镜像。
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
这两个命令是通过镜像来保存、加载镜像文件的。这种方式将会保留镜像的所有层、元数据、标签和历史记录,适合迁移或备份完整镜像环境。
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
简单总结一下:
# 1、导出镜像到本地
docker save -o 导出的镜像名.tar 本地镜像名:镜像标签 (tar包)
docker save 本地镜像名:镜像标签 | gzip > 导出的镜像名.tar.gz (压缩包)
# 2、导入本地镜像
docker load -i xxxx.tar/.tar.gz (本地镜像)3.3 两组命令对比
| 特性 | docker save/load | docker export/import |
|---|---|---|
| 数据类型 | 完整镜像(含所有层和元数据) | 容器快照(仅文件系统状态) |
| 保留历史层 | 是 | 否 |
| 适用场景 | 迁移、备份完整镜像 | 快速创建镜像或恢复容器状态 |
| 文件生成方式 | docker save | docker export |
| 文件大小 | 镜像文件体积大 | 镜像文件体积小 |
| 是否支持多个镜像打包 | 支持 | 不支持 |
| 是否包含镜像历史 | save 保存(load 加载)的镜像,没有丢失镜像的历史,可以回滚到之前的层(layer) | export 导出(import 导入)是根据容器拿到的镜像,再导入时会丢失镜像所有的历史记录和元数据信息(即仅保存容器当时的快照状态),所以无法进行回滚操作 |
| 应用场景 | 如果我们的应用是使用 docker-compose.yml 编排的多个镜像组合,但我们要部署的客户服务器并不能连外网。这时就可以使用 docker save 将用到的镜像打个包,然后拷贝到客户服务器上使用 docker load 载入。 | 主要用来制作基础镜像,比如我们从一个 ubuntu 镜像启动一个容器,然后安装一些软件和进行一些设置后,使用 docker export 保存为一个基础镜像。然后,把这个镜像分发给其他人使用,比如作为基础的开发环境。 |
4. 直接下载其他站点镜像
docker pull hub.c.163.com/library/tomcat:latest二、创建镜像
这个可以看后面的Dockerfile部分的笔记。
参考资料