镜像
镜像是 Docker 三大核心概念中最重要的,自 Docker 诞生之日起镜像就是相关社区最为热门的关键词
Docker 运行容器前需要本地存在对应的镜像,如果镜像不存在,Docker 会尝试先从默认镜像仓库下载(默认使用 Docker Hub 公共注册服务器中的仓库),用户也可以通过默认配置,使用自定义的镜像仓库。
获取镜像
可以使用 docker [image] pull
命令直接从 Docker Hub 镜像源来下载镜像。
该命令的格式为docker [image] pull NAME[:TAG]
其中,NAME 是镜像仓库名称(用来区分镜像),TAG 是镜像的标签(往往用来表示版本信息)。
通常情况下,描述一个镜像需要包括“名称 + 标签”信息
例如,获取一个 Ubuntu 18.04 系统的基础镜像可以使用如下的命令
| ➜ ~ docker pull ubuntu:18.04
18.04: Pulling from library/ubuntu
...
|
对于 Docker 镜像来说,如果不显式指定 TAG,则默认会选择 latest 标签,这会下载仓库中最新版本的镜像。
下面的例子将从 Docke Hub 的 Ubuntu 仓库下载一个最新版本的 Ubuntu 操作系统的镜像
| ➜ ~ docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
Digest: sha256:5d1d5407f353843ecf8b16524bc5565aa332e9e6a1297c73a92d3e754b8a636d
Status: Image is up to date for ubuntu:latest
docker.io/library/ubuntu:latest
|
该命令实际上下载的就是 ubuntu:latest 镜像。
注意:一般来说,镜像的 latest 标签意味着该镜像的内容会跟踪最新版本的变更而变化,内容是不稳定的。
因此,从稳定性上考虑,不要在生产环境中忽略镜像的标签信息或使用默认的 latest 标记的镜像
下载过程中可以看出,镜像文件一般由若干层(layer)组成,6c953ac5d795 这样的串是层的唯一 id(实际上完整的 id 包括 256 比特,64 个十六进制字符组成)。
使用 docker pull 命令下载中会获取并输出镜像的各层信息。
当不同的镜像包括相同的层时,本地仅存储了层的一份内容,减小了存储空间。
你可能会想到,在不同的镜像仓库服务器的情况下,可能会出现镜像重名的情况。
严格地讲,镜像的仓库名称中还应该添加仓库地址(即 registry,注册服务器)作为前缀,只是默认使用的是官方 Docker Hub 服务,该前缀可以忽略。
例如,docker pull ubuntu:18.04
命令相当于docker pull registry.hub.docker.com/ubuntu:18.04
命令,即从默认的注册服务器 Docker Hub Registry 中的 ubuntu 仓库来下载标记为 18.04 的镜像。
如果从非官方的仓库下载,则需要在仓库名称名称前面指定完整的仓库地址。
例如从网易蜂巢的镜像源来下载 ubuntu:18.04 镜像,可以使用如下命令,此时下载的镜像名称为 hub.c.163.com/public/ubuntu:18.04
| docker pull hub.c.163.com/public/ubuntu:18.04
|
pull 子命令支持的选项主要包括:
-a, --all-tags=true|false
: 是否获取仓库中所有镜像,默认为否
--disable-content-trust
: 取消镜像的内容校验,默认为真
另外,有时需要使用镜像代理服务来加速 Docker 镜像获取过程,可以在 Docker 服务启动配置中增加--registry-mirror=proxy_URL
来指定镜像代理服务地址(如https://registry.docker-cn.com
)
下载镜像到本地后,即可随时使用该镜像了,例如利用该镜像创建一个容器,在其中运行 bash 应用,执行打印 “Hello World”命令:
| ➜ ~ docker run -it ubuntu:18.04 bash
root@37a273e95c20:/# echo "Hello World"
Hello World
root@37a273e95c20:/# exit
exit
|
docker search
| ➜ ~ docker search ubuntu
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
ubuntu Ubuntu is a Debian-based Linux operating sys… 11157 [OK]
dorowu/ubuntu-desktop-lxde-vnc Docker image to provide HTML5 VNC interface … 450 [OK]
rastasheep/ubuntu-sshd Dockerized SSH service, built on top of offi… 246 [OK]
consol/ubuntu-xfce-vnc Ubuntu container with "headless" VNC session… 222 [OK]
ubuntu-upstart Upstart is an event-based replacement for th… 110 [OK]
...
|
| ➜ ~ docker pull ubuntu:18.04
18.04: Pulling from library/ubuntu
7595c8c21622: Pulling fs layer
d13af8ca898f: Pulling fs layer
70799171ddba: Pulling fs layer
b6c12202c5ef: Waiting
error pulling image configuration: Get https://production.cloudflare.docker.com/registry-v2/docker/registry/v2/blobs/sha256/2e/2eb2d388e1a255c98029f40d6d7f8029fb13f1030abc8f11ccacbca686a8dc12/data?verify=1595942246-RYWxPExORyfYQ1CgqtROY0F09kU%3D: Service Unavailable
|
出现上面的情况可以尝试换镜像
| ➜ ~ docker search ubuntu:18.04
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
gotoeasy/ubuntu-desktop 在 ubuntu:18.04 的基础上,安装中文桌面环境,… 1
rocm/dev-ubuntu-18.04 Docker image based on Ubuntu:18.04 with the … 1
rrvieira/ubuntu Custom image built from Ubuntu:18.04 1
ercircle/ubuntu_server java1.8,tomcat1.9,mysql 5.7 ubuntu:18.04 mys… 1 [OK]
matrix1986/rust rust build, run with ubuntu:18.04 0
nologinb/java8 My variant of oracle java8 based on ubuntu:1… 0 [OK]
arnow117/ubuntu_base essential binaries under Ubuntu:18.04 0 [OK]
...
|
daemon.json 配置文件
https://docs.docker.com/engine/reference/commandline/dockerd/
mac 所在位置:~/.docker/daemon.json
| {
"debug" : true,
"experimental" : false,
"registry-mirrors" : [
"https://registry.docker-cn.com"
]
}
|
mac 还可以在 preferences 中进行设置
| https://docker.mirrors.ustc.edu.cn
https://registry.docker-cn.com
https://cr.console.aliyun.com/
http://hub-mirror.c.163.com
|
查看镜像信息
使用 images 命令列出镜像
使用 docker images
或 docker image ls
命令可以列出本地主机上已有镜像的基本信息
| ➜ ~ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest 1e4467b07108 3 days ago 73.9MB
ubuntu 18.04 2eb2d388e1a2 3 days ago 64.2MB
clux/muslrust nightly-2020-07-09 e0dabacde3db 2 weeks ago 981MB
alpine 3.12.0 a24bb4013296 8 weeks ago 5.57MB
|
在列出信息中,可以看到几个字段信息:
- 来自于哪个仓库,比如 ubuntu 表示 ubuntu 系列的基础镜像
- 镜像的标签信息,比如 18.04、latest 表示不同的版本信息。标签只是标记,并不能标识镜像内容;
- 镜像的 ID(唯一标识镜像),如果两个镜像的 ID 相同,说明它们实际上指向了同一个镜像,只是具有不同标签名称而已
- 创建时间,说明镜像最后的更新时间
- 镜像大小,优秀的镜像往往体积都比较小
其中镜像的 ID 信息十分重要,它唯一标识了镜像。
在使用镜像 ID 的时候,一般可以使用该 ID 的前若干个字符组成的可区分串来替代完整的 ID。
TAG 信息用于标记来自同一个仓库的不同镜像。
例如 ubuntu 仓库中有多个镜像,通过 TAG 信息来区分发行版本,如 18.04、18.10 等
镜像大小信息只是表示了该镜像的逻辑体积,实际上由于相同的镜像层本地只会存储一份,物理上占用的存储空间会小于各镜像逻辑体积之和。
images 子命令主要支持如下选项,用户可自行进行尝试
-a, --all=true|false
: 列出所有(包括临时文件)镜像文件,默认为否
--digests=true|false
: 列出镜像的数字摘要值,默认为否
-f, --filter=[]
: 过滤列出的镜像,如dangling=true
只显示没有被使用的镜像;也可指定带有特定标注的镜像等
--format="TEMPLATE"
:控制输出格式,如 ID 代表 ID 信息,Repository 代表仓库信息等
--no-trunc=true|false
: 对输出结果中太长的部分是否进行截断,如镜像的 ID 信息,默认为是
-q, --quiet=true|false
: 仅输出 ID 信息,默认为否
其中,还支持对输出结果进行控制的选项,如-f, --filter=[], --no-trunc=true|false、-q, --quiet=true|false
等。
使用 tag 命令添加镜像标签
为了方便在后续工作中使用特定镜像,还可以使用 docker tag 命令来为本地镜像任意添加新的标签。
例如,添加一个新的 myubuntu:latest 镜像标签
| ➜ ~ docker tag ubuntu:latest myubuntu:latest
➜ ~ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
myubuntu latest 1e4467b07108 3 days ago 73.9MB
ubuntu latest 1e4467b07108 3 days ago 73.9MB
ubuntu 18.04 2eb2d388e1a2 3 days ago 64.2MB
|
可以看到多了一个myubuntu:latest
标签的镜像,之后,用户就可以直接使用 `myubuntu:latest 来表示这个镜像了
可以发现,myubuntu:latest
镜像的 ID 跟ubuntu:latest
是完全一致的,它们实际上指向了同一个镜像文件,只是别名不同而已。
docker tag
命令添加的标签实际上起到了类似链接的作用
使用 inspect 命令查看详细信息
使用docker [image] inspcet
命令可以获取该镜像的详细信息,包括制作者、适应架构、各层的数字摘要等:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 | docker inspect ubuntu:18.04
[
{
"Id": "sha256:2eb2d388e1a255c98029f40d6d7f8029fb13f1030abc8f11ccacbca686a8dc12",
"RepoTags": [
"ubuntu:18.04"
],
"RepoDigests": [
"ubuntu@sha256:a61728f6128fb4a7a20efaa7597607ed6e69973ee9b9123e3b4fd28b7bba100b"
],
"Parent": "",
"Comment": "",
"Created": "2020-07-24T14:38:22.027273323Z",
...
]
|
上面代码返回的是一个 JSON 格式的消息,如果我们只要其中的一项内容时,可以使用 -f
来指定,例如,获取镜像的 Architecture:
| ➜ ~ docker inspect -f {{".Architecture"}} ubuntu:18.04
amd64
|
使用 history 命令查看镜像历史
既然镜像文件由多个层组成,那么怎么知道各个层的内容具体是什么呢?
这时候可以使用 history 子命令,该命令将列出各层的创建信息
例如,查看 ubuntu:18.04 镜像的创建过程,可以使用如下命令:
| ➜ ~ docker history ubuntu:18.04
IMAGE CREATED CREATED BY SIZE COMMENT
2eb2d388e1a2 3 days ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
<missing> 3 days ago /bin/sh -c mkdir -p /run/systemd && echo 'do… 7B
<missing> 3 days ago /bin/sh -c set -xe && echo '#!/bin/sh' > /… 745B
<missing> 3 days ago /bin/sh -c [ -z "$(apt-get indextargets)" ] 987kB
<missing> 3 days ago /bin/sh -c #(nop) ADD file:7d9bbf45a5b2510d4… 63.2MB
|
注意,过长的命令被自动截断了,可以使用前面提到的--no-trunc
选项来输出完整命令
搜寻镜像
使用 docker search 命令可以搜索 Docker Hub 官方仓库中的镜像。
语法为docker search [option] keyword
。支持的命令选项主要包括:
-f, --filter filter
: 过滤输出内容
--format string
: 格式化输出内容
--limit int
: 限制输出结果个数,默认为 25 个
--no-trunv
: 不截断输出结果
例如,搜索官方提供的带 nging 关键字的镜像,如下所示:
| ➜ ~ docker search --filter=is-official=true nginx
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
nginx Official build of Nginx. 13519 [OK]
|
再比如,搜索所有收藏数超过 4 的关键词包括 tensorflow 的镜像
1
2
3
4
5
6
7
8
9
10
11
12 | ➜ ~ docker search --filter=stars=4 tensorflow
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
tensorflow/tensorflow Official Docker images for the machine learn… 1728
jupyter/tensorflow-notebook Jupyter Notebook Scientific Python Stack w/ … 227
tensorflow/serving Official images for TensorFlow Serving (http… 94
xblaster/tensorflow-jupyter Dockerized Jupyter with tensorflow 54 [OK]
rocm/tensorflow Tensorflow with ROCm backend support 48
floydhub/tensorflow tensorflow 24 [OK]
bitnami/tensorflow-serving Bitnami Docker Image for TensorFlow Serving 14 [OK]
opensciencegrid/tensorflow-gpu TensorFlow GPU set up for OSG 12
ibmcom/tensorflow-ppc64le Community supported ppc64le docker images fo… 5
tensorflow/tf_grpc_test_server Testing server for GRPC-based distributed ru… 4
|
可以看到返回了很多包含关键字的镜像,其中包括镜像名字、描述、收藏数(表示该镜像的受欢迎程度)、是否官方创建等。
默认的输出结果将按照星级评价进行排序
删除和清理镜像
使用标签删除镜像
使用docker rmi
或docker image rm
命令可以删除镜像,命令格式为docker rmi IMAGE[IMAGE...]
,其中 IMAGE 可以为标签或 ID
支持选项包括:
-f, -force
: 强制删除镜像,即使有容器依赖它
-no-prune
: 不要清理未带标签的父镜像
例如,要删除掉myubuntu:latest
镜像,可以使用如下命令:
| ➜ ~ docker rmi myubuntu:latest
Untagged: myubuntu:latest
|
你可能会想到,本地的ubuntu:latest
镜像是否会受到此命令的影响。
无须担心,当同一个镜像拥有多个标签的时候,docker rmi
命令只是删除了该镜像多个标签中的指定标签而已,并不影响镜像文件。
因此上述操作相当于只是删除了镜像的一个标签副本而已。
保险起见,再次查看本地的镜像,发现ubuntu:latest
镜像仍然存在:
| ➜ ~ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest 1e4467b07108 4 days ago 73.9MB
ubuntu 18.04 2eb2d388e1a2 4 days ago 64.2MB
|
但当镜像只剩下一个标签的时候就要小心了,此时再使用 docker rmi 命令会彻底删除镜像
例如通过执行docker rmi
命令来删除只有一个标签的镜像,可以看出会删除这个镜像文件的所有文件层
| ➜ ~ docker rmi busybox:latest
Untagged: busybox:latest
Untagged: busybox@sha256:4f47c01fa91355af2865ac10fef5bf6ec9c7f42ad2321377c21e844427972977
Deleted: sha256:018c9d7b792b4be80095d957533667279843acf9a46c973067c8d1dff31ea8b4
Deleted: sha256:514c3a3e64d4ebf15f482c9e8909d130bcd53bcc452f0225b0a04744de7b8c43
|
使用镜像 ID 来删除镜像
当使用docker rmi
命令,并且后面跟上镜像的 ID(也可以是能进行区分的部分 ID 串前缀)时,会先尝试删除所有指向该镜像的标签,然后删除该镜像文件本身。
注意,当有该镜像创建的容器存在时,镜像文件默认是无法被删除的,例如:先利用 ubuntu:18.04 镜像创建一个简单的容器来输出一段话:
| ➜ ~ docker run ubuntu:18.04 echo 'hello! I an here'
hello! I an here
|
使用docker ps -a
命令可以看到本机上存在的所有容器:
| ➜ ~ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
db91281ec5c5 ubuntu:18.04 "echo 'hello! I an h…" 45 seconds ago Exited (0) 44 seconds ago sweet_ishizaka
|
可以看到,后台存在一个退出状态的容器,是刚基于 ubuntu:18.04 镜像创建的
试图删除该镜像,Docker 会提示有容器正在运行,无法删除
| ➜ ~ docker rmi ubuntu:18.04
Error response from daemon: conflict: unable to remove repository reference "ubuntu:18.04" (must force) - container db91281ec5c5 is using its referenced image 2eb2d388e1a2
|
如果要想强行删除镜像,可以使用-f
参数:
| ➜ ~ docker rmi -f ubuntu:18.04
Untagged: ubuntu:18.04
Untagged: ubuntu@sha256:a61728f6128fb4a7a20efaa7597607ed6e69973ee9b9123e3b4fd28b7bba100b
Deleted: sha256:2eb2d388e1a255c98029f40d6d7f8029fb13f1030abc8f11ccacbca686a8dc12
|
注意,通常并不推荐使用-f
参数来强制删除一个存在容器依赖的镜像。
正确的做法是,先删除依赖该镜像的所有容器,再来删除镜像。
首先删除容器 db91281ec5c5
| ➜ ~ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
db91281ec5c5 2eb2d388e1a2 "echo 'hello! I an h…" 5 minutes ago Exited (0) 5 minutes ago sweet_ishizaka
➜ ~ docker rm db91281ec5c5
db91281ec5c5
|
然后使用 ID 来删除镜像,此时会正常打印出删除的各层信息
1
2
3
4
5
6
7
8
9
10
11
12 | ➜ ~ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest 1e4467b07108 4 days ago 73.9MB
alpine 3.12.0 a24bb4013296 8 weeks ago 5.57MB
➜ ~ docker rmi ubuntu
Untagged: ubuntu:latest
Untagged: ubuntu@sha256:5d1d5407f353843ecf8b16524bc5565aa332e9e6a1297c73a92d3e754b8a636d
Deleted: sha256:1e4467b07108685c38297025797890f0492c4ec509212e2e4b4822d367fe6bc8
Deleted: sha256:7515ee845913c8df9826c988341a09e0240e291c66bdc436a067e070d7910a1f
Deleted: sha256:50ebe6a0675f1ed7ca499a2ec7d8cc993d495dd66ca1035c218ec5efcb6fbb8c
Deleted: sha256:2515e0ecfb82d58c004c4b53fcf9230d9eca8d0f5f823c20172be01eec587ccb
Deleted: sha256:ce30112909569cead47eac188789d0cf95924b166405aa4b71fb500d6e4ae08d
|
清理镜像
使用 Docker 一段时间后,系统中可能会遗留一些临时的镜像文件,以及一些没有被使用的镜像,可以通过docker image prune
命令来进行清理。
支持选项包括:
-a, -all
: 删除所有无用镜像,不光是临时镜像
-filter filter
: 只清理符合给定过滤器的镜像
-f, -force
: 强制删除镜像,而不进行提示确认
例如,如下命令会自动清理临时的遗留镜像文件层,最后会提示释放的存储空间
| docker image prune -f
...
Total reclaimed space: 1.4GB
|
| docker images | grep none | awk '{print $3}' | xargs docker rmi
|
创建镜像
创建镜像的方法主要有三种:基于已有镜像的容器创建、基于本地模板导入、基于 Dockerfile 创建
基于已有容器创建
该方法主要是使用dockr [container] commit
命令
命令格式为docker [container] commit [options] container[respository[:tag]]
,主要选项包括:
-a, --author=""
: 作者信息
-c, --change=[]
: 提交的时候执行 Dockerfile 指令,包括 CMD|ENTRYPOINT|ENV|EXPOSE|LABEL|ONBUILD|USER|VOLUME|WORKDIR
等
-m, --message=""
: 提交信息
-p, --pause=true
: 提交时暂停容器运行
下面将演示如何使用该命令创建一个新镜像。
首先,启动一个镜像,并在其中进行修改操作。
例如,创建一个 test 文件,之后退出,代码如下
| ➜ ~ docker run -it ubuntu:18.04 /bin/bash
root@32c1a033cc33:/# touch test
root@32c1a033cc33:/# exit
exit
|
记住容器的 ID 为32c1a033cc33
此时该容器与原 ubuntu:18.04 镜像相比,已经发生了改变,可以使用docker [container] commit
命令来提交为一个新的镜像。
提交时可以使用 ID 或名称来指定容器
| ➜ ~ docker commit -m "Added a new file" -a "Docker Newbee" 32c1a033cc33 test:0.1
sha256:c464799e79eedb1e90c62aceae93082c07275f2472a55ac4bd907b838e672c6b
|
执行顺利的话,会返回新创建镜像的 ID 信息,此时查看本地镜像列表,会发现新创建的镜像已经存在了:
| ➜ ~ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
test 0.1 c464799e79ee About a minute ago 64.2MB
|
基于本地模板导入
用户也可以直接从一个操作系统模板文件导入一个镜像,主要使用docker [container] import
命令。
命令格式为docker [image] import [options] file | URL | -[repository[:tag]]
要直接导入一个镜像,可以使用 OpenVZ 提供的模板来创建,或者用其他已导出的镜像模板来创建。
OpenVZ 模板的下载地址为 https://download.openvz.org/template/precreated/
例如,下载了 ubuntu-14.04 的模板压缩包ubuntu-14.04-x86_64-minimal.tar.gz
,之后使用以下命令导入即可
| ➜ Downloads cat ubuntu-14.04-x86_64-minimal.tar.gz | docker import - ubuntu:14.04
sha256:f2e5b3306e87be1678f079103296c2bde6aff87289fe9cc2791e1f06ee721624
➜ Downloads docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 14.04 f2e5b3306e87 About a minute ago 215MB
➜ Downloads docker run -ti ubuntu:14.04 /bin/bash
root@c1dbe30e9bef:/# cat /etc/issue
Ubuntu 14.04.5 LTS \n \l
root@c1dbe30e9bef:/# exit
exit
|
基于 Dockerfile 创建
基于 Dockerfile 创建是最常见的方式。
Dockerfile 是一个文本文件,利用给定的指令描述基于某个父镜像创建新镜像的过程
下面给出 Dockerfile 的一个简单示例,基于 ubuntu:18.04 镜像安装 Python3 环境,构成一个新的 python:3 镜像:
| FROM ubuntu:18.04
LABEL version="1.0" maintainer="zhaoyz@nocilanto.com"
RUN apt-get update && \
apt-get install -y python3 && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
|
创建镜像的过程可以使用docker [image] build
命令,编译成功后本地将多处一个python:3
镜像
1
2
3
4
5
6
7
8
9
10
11
12
13 | docker build -t python:3 .
➜ ~ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
python 3 eb2a7cf1220a 9 seconds ago 99.6MB
➜ ~ docker run -ti --rm python:3 /bin/bash
root@600c74b27fd0:/# python3
Python 3.6.9 (default, Jul 17 2020, 12:50:27)
[GCC 8.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
root@600c74b27fd0:/# python3 --version
Python 3.6.9
root@600c74b27fd0:/#
|
存出和载入镜像
用户可以使用docker [image] save
和docker [image] load
命令来存出和载入镜像
存出镜像
如果要导出镜像到本地文件,可以使用docker [image] save
命令。
该命令支持-o、-output string
参数,导出镜像到指定的文件中
例如,导出本地的ubuntu:18.04
镜像为文件ubuntu_18.04.tar
,如下所示:
| docker save -o ubuntu_18.04.tar ubuntu:18.04
|
之后,用户就可以通过复制ubuntu_18.04.tar
文件将该镜像分享给他人
载入镜像
可以使用docker [image] load
将导出的 tar 文件再导入到本地镜像库。
支持-i、-input string
选项,从指定文件中读入镜像内容
例如,从文件ubuntu_18.04.tar
导入镜像到本地镜像列表,如下所示:
| docker load -i ubuntu_18.04.tar
|
或者
| docker load < ubuntu_18.04.tar
|
这将导入镜像及其相关的元数据信息(包括标签等)。
导入成功后,可以使用 docker images 命令进行查看,与原镜像一致
| ➜ Desktop docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 18.04 2eb2d388e1a2 5 days ago 64.2MB
➜ Desktop docker rmi ubuntu:18.04
Untagged: ubuntu:18.04
Untagged: ubuntu@sha256:a61728f6128fb4a7a20efaa7597607ed6e69973ee9b9123e3b4fd28b7bba100b
➜ Desktop docker load -i ubuntu_18.04.tar
Loaded image: ubuntu:18.04
➜ Desktop docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 18.04 2eb2d388e1a2 5 days ago 64.2MB
|
上传镜像
可以使用docker [image] push
命令上传镜像到仓库,默认上传到 Docker Hub 官方仓库(需要登录)。
命令格式为docker [image] push NAME[:TAG]|[REGISTRY_HOST[:REGISTRY_PORT]/]NAME[:TAG]
用户在 Docker Hub 网站注册后可以上传自制的镜像
例如,用户 nocilantro 上传本地的test:latest
镜像,首先需要登录 docker hub,例如 mac 可以点击左上角 docker 图标进行登录;
可以先添加的标签nocilantro/test:latest
,然后用docker [image] push
命令上传镜像
| ➜ Desktop docker tag test:latest nocilantro/test:latest
docker push nocilantro/test:latest
|
上传完后可以再上 docker hub 检查一下