CHAPTER 2 Docker镜像

news2024/11/26 12:29:07

docker镜像

    • 2.1 docker image 获取
      • 2.1.1 命令格式(pull)
      • 2.1.2 层(layer)
      • 2.1.3 镜像重名
    • 2.2 查看镜像信息(ls,tag,inspect,history)
      • 2.2.1 使用images命令列出镜像(ls)
      • 2.2.2 使用tag命令添加镜像标签(tag)
      • 2.2.3 使用inspect命令查看详细信息(inspect)
      • 2.2.4 使用history命令查看镜像历史(history)
    • 2.3 搜索镜像(search)
    • 2.4 删除和清理镜像(rmi,prune)
      • 2.4.1 使用标签删除镜像(rmi/rm)
      • 2.4.2 使用镜像ID来删除镜像
      • 2.4.3 清理镜像(prune)
    • 2.5 *创建镜像 (commit,import,build)
      • 2.5.1 基于已有容器创建(commit)
      • 2.5.2 基于本地模板导入(import)
      • 2.5.3 基于 Dockerfile 创建(build)
    • 2.6 存出和载入镜像(save,load)
      • 2.6.1 存出镜像(save)
      • 2.6.2 载入镜像(load)
    • 2.7 上传镜像(push)
    • 2.8 镜像命令汇总

镜像(image)是Docker三大核心概念中最重要的, 自 Docker 诞生之日起镜像就是相关社区最为热门的关键词。 Docker 运行容器前需要本地存在对应的镜像, 如果镜像不存在, Docker 会尝试先从默认镜像仓库下载(默认使用 DockerHub 公共注册服务器中的仓库), 用户也可以通过配置, 使用自定义的镜像仓库。

本章将围绕镜像这一核心概念介绍具体操作, 包括:

如何使用pull命令从 Docker Hub 仓库中下载镜像到本地;
如何查看本地已有的镜像信息和管理镜像标签;
如何在远端仓库使 用 search 命令进行搜索和过滤;
如何删除镜像标签和镜像文件;
如何创建用户定制的镜像并且保存为外部文件。
最后,还将介绍如何往DockerHub仓库中推送自己的镜像。

2.1 docker image 获取

镜像是运行容器的前提, 官方的 Docker Hub 网站已经提供了数十万个镜像供大家开放下载。 可以使用 docker [image] pull 命令直接从 Docker Hub 镜像源来下载镜像。

2.1.1 命令格式(pull)

该命令的格式:

docker [image] pull NAME [ :TAG] 

参数:

  • NAME是镜像仓库名称(用来区分镜像),
  • TAG是镜像的标签(往往用来表示版本 信息)。

通常情况下, 描述一个镜像需要包括 “名称+标签“ 信息。

例如, 获取一个Ubuntu 18.04系统精简的基础镜像可以使用如下的命令:

[root@dbc-server-554 ansible]# docker image pull ubuntu:18.04
18.04: Pulling from library/ubuntu
a055bf07b5b0: Pull complete
Digest: sha256:c1d0baf2425ecef88a2f0c3543ec43690dc16cc80d3c4e593bb95e4f45390e45
Status: Downloaded newer image for ubuntu:18.04
docker.io/library/ubuntu:18.04

对于Docker镜像来说, 如果不显式指定TAG, 则默认会选择latest标签,这会下载仓库中最新版本的镜像,例如

docker pull ubuntu
等价于
docker pull ubuntu:latest

一般来说, 镜像的latest 标签意味着该镜像的内容会跟踪最新版本的变更而变化,内容是不稳定的。因此,从稳定性上考虑,不要在生产环境中忽略镜像的标签信息或使用默认的latest标记的镜像

2.1.2 层(layer)

下载过程中可以看出 ,镜像文件一般由若干层(layer)组成 ,a055bf07b5b0这样的字符串是层的唯一id(实际上完整的id包括256比特,64个十六进制字符组成)。使用docker pull命令下载中会获取并输出镜像的各层信息。当不同的镜像包括相同的层时,本地仅存储了层的 一份内容,减小了存储空间。

2.1.3 镜像重名

读者可能会想到, 在不同的镜像仓库服务器的情况下,可能会出现镜像重名的情况。 严格地讲,镜像的仓库名称中还应该添加仓库地址(即registry, 注册服务器)作为前缀,只是默认使用的是官方DockerHub服务 ,该前缀可以忽略。 例如,
docker pull ubuntu:18.04相当于docker pull registory.hub. docker.com/ubuntu:18.04
即从默认的注册服务器DcoekrHub 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:取消镜像的内容校验,默认为真。
  • –regisotry-mirror=proxy_URL 使用镜像代理服务来加速Docker镜像获取过程,来指定镜像代理服务地址(如https:// registry.docker-en.com)

尝试运行镜像

[root@dbc-server-554 ansible]# docker run -it ubuntu:18.04 bash
root@69c9479cfafd:/# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

2.2 查看镜像信息(ls,tag,inspect,history)

2.2.1 使用images命令列出镜像(ls)

使用docker images或docker image ls 命令可以列出本地主机上已有镜像的基本信息。格式:

docker images [ls]

例如, 下面的命令列出了上一小节中下载的镜像信息:

[root@dbc-server-554 ansible]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED      SIZE
ubuntu       18.04     e28a50f651f9   7 days ago   63.1MB

在列出信息中, 可以看到几个字段信息:

  • REPOSITORY 来自于哪个仓库, 比如ubuntu表示ubuntu系列的基础镜像;
  • TAG 镜像的标记信息, 比如 18.04、 latest表示不同的版本信息。 标签只是标记, 并不能标识镜像内容;
  • IMAGE ID 镜像的ID(唯一标识镜像),如果两个镜像的ID相同,说明它们实际上指向了同一 个镜像, 只是具有不同标签名称而已;
  • CREATED 创建时间, 说明镜像最后的更新时间;
  • SIZE 镜像大小, 优秀的镜像往往体积都较小。

其中镜像的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信息, 默认为否。
[root@dbc-server-554 ansible]# docker images --digests=true
REPOSITORY   TAG       DIGEST                                                                    IMAGE ID       CREATED      SIZE
ubuntu       18.04     sha256:c1d0baf2425ecef88a2f0c3543ec43690dc16cc80d3c4e593bb95e4f45390e45   e28a50f651f9   7 days ago   63.1MB
[root@dbc-server-554 ansible]# docker images --no-trunc=true
REPOSITORY   TAG       IMAGE ID                                                                  CREATED      SIZE
ubuntu       18.04     sha256:e28a50f651f9eefbc8883ddc64704d609f3d95bf1ea9e41f873a8da68ea5ec98   7 days ago   63.1MB
[root@dbc-server-554 ansible]# docker images -f dangling=true
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE
[root@dbc-server-554 ansible]# docker images -q
e28a50f651f9

更多子命令选项还可以通过man docker-images来查看。

2.2.2 使用tag命令添加镜像标签(tag)

为了方便在后续工作中使用特定镜像,还可以使用docker tag命令来为本地镜像任意添加新的标签。
格式:

 docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]

例如,添加一个新的myubuntu: latest镜像标签:

[root@dbc-server-554 ansible]# docker tag ubuntu:18.04 myubuntu:latest
[root@dbc-server-554 ansible]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED      SIZE
myubuntu     latest    e28a50f651f9   7 days ago   63.1MB
ubuntu       18.04     e28a50f651f9   7 days ago   63.1MB

再次使用docker images列出本地主机上镜像信息, 可以看到多了一个myubuntu:latest标签的镜像,之后,用户就可以直接使用myubuntu:latest来表示这个镜像了。

细心的读者可能注意到, 这些myubuntu:latest镜像的ID跟ubuntu:latest是完全一致的,它们实际上指向了同一个镜像文件,只是别名不同而已。docker tag命令添加的标签实际上起到了类似链接的作用。

2.2.3 使用inspect命令查看详细信息(inspect)

使用docker [image] inspect命令可以获取该镜像的详细信息,包括制作者、适应架构、各层的数字摘要等,格式

docker inspect [OPTIONS] NAME|ID [NAME|ID...]
 -f, --format=""      Format the output using the given Go template
 -h, --help[=false]      help for inspect
 -s, --size[=false]      Display total file sizes if the type is container
[root@dbc-server-554 ansible]# docker inspect e28
[
    {
        "Id": "sha256:e28a50f651f9eefbc8883ddc64704d609f3d95bf1ea9e41f873a8da68ea5ec98",
        "RepoTags": [
            "myubuntu:latest",
            "ubuntu:18.04"
        ],
        "RepoDigests": [
            "ubuntu@sha256:c1d0baf2425ecef88a2f0c3543ec43690dc16cc80d3c4e593bb95e4f45390e45"
        ],
        "Parent": "",
        "Comment": "",
        "Created": "2023-01-02T18:48:56.081327405Z",
        ...

此处以及后续使用IMAGE ID参数,只要能确定ID,只写前几位即可
上面代码返回的是一个 JSON 格式的消息, 如果我们只要其中一项内容时, 可以使 用-f来指定, 例如, 获取镜像的Architecture:

[root@dbc-server-554 ansible]# docker image inspect -f {{.Architecture}} e28
amd64
[root@dbc-server-554 ansible]# docker image inspect -f {{.Os}} e28
linux

2.2.4 使用history命令查看镜像历史(history)

既然镜像文件由多个层组成,那么怎么知道各个层的内容具体是什么呢?这时候可以使用history子命令,该命令将列出各层的创建信息。
格式:

 docker history [OPTIONS] IMAGE
 --format=""      Pretty-print images using a Go template
 -h, --help[=false]      help for history
 -H, --human[=true]      Print sizes and dates in human readable format
 --no-trunc[=false]      Don't truncate output
 -q, --quiet[=false]      Only show image IDs

例如,查看ubuntu:18.04镜像的创建过程,可以使用如下命令:

[root@dbc-server-554 ansible]# docker image history e28
IMAGE          CREATED      CREATED BY                                      SIZE      COMMENT
e28a50f651f9   7 days ago   /bin/sh -c #(nop)  CMD ["bash"]                 0B
<missing>      7 days ago   /bin/sh -c #(nop) ADD file:132da97f77ddc534d…   63.1MB

使用--no-trunc=true显示长信息

[root@dbc-server-554 ansible]# docker image history --no-trunc=true e28
IMAGE                                                                     CREATED      CREATED BY                                                                                          SIZE      COMMENT
sha256:e28a50f651f9eefbc8883ddc64704d609f3d95bf1ea9e41f873a8da68ea5ec98   7 days ago   /bin/sh -c #(nop)  CMD ["bash"]                                                                     0B
<missing>                                                                 7 days ago   /bin/sh -c #(nop) ADD file:132da97f77ddc534ddb931a461d83ac2aa601dd4481360c874eac33b6c3470d9 in /    63.1MB

2.3 搜索镜像(search)

使用docker search命令可以搜索Docker Hub官方仓库中的镜像。格式:

 docker search [OPTIONS] TERM
OPTIONS
       -f, --filter=      Filter output based on conditions provided
       --format=""      Pretty-print search using a Go template
       -h, --help[=false]      help for search
       --limit=25      Max number of search results
       --no-trunc[=false]      Don't truncate output

例如, 搜索官方提供的带 nginx关键字的镜像

[root@dbc-server-554 ansible]# docker search -f=is-official=true nginx
NAME      DESCRIPTION                STARS     OFFICIAL   AUTOMATED
nginx     Official build of Nginx.   17920     [OK]

再比如, 搜索所有收藏数超过 4 的关键词包括httpd的镜像:

[root@dbc-server-554 ansible]# docker search --filter=stars=4 httpd
NAME                      DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
httpd                     The Apache HTTP Server Project                  4291      [OK]
centos/httpd-24-centos7   Platform for running Apache httpd 2.4 or bui…   45
centos/httpd                                                              36                   [OK]

可以看到返回了很多包含关键字的镜像, 其中包括镜像名字、 描述、 收藏数(表示该镜像 的受欢迎程度)、 是否官方创建、 是否自动创建等。默认的输出结果将按照星级评价进行排序。

2.4 删除和清理镜像(rmi,prune)

2.4.1 使用标签删除镜像(rmi/rm)

使用docker rmi docker image rm命令可以删除镜像, 命令格式为

docker rmi [OPTIONS] IMAGE [IMAGE...]

其中 IMAGE可以为标签或 ID。 支持选项包括:

  • -f, -force: 强制删除镜像, 即使有容器依赖它;
  • -no-prune: 不要清理未带标签的父镜像。
[root@dbc-server-554 ansible]# docker rmi myubuntu
Untagged: myubuntu:latest
[root@dbc-server-554 ansible]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED      SIZE
ubuntu       18.04     e28a50f651f9   7 days ago   63.1MB

读者可能会想到, 本地的ubuntu:latest 镜像是否会受到此命令的影响。 无须担心, 当同一个镜像拥有多个标签的时候, docker rmi 命令只是删除了该镜像多个标签中的指定 标签而巳, 并不影响镜像文件。 因此上述操作相当于只是删除了镜像 0458a4468cbc的一 个标签副本而已。如果按指定ID删除,则会删除镜像本身。

2.4.2 使用镜像ID来删除镜像

当使用 docker rmi 命令, 并且后面跟上镜像的 ID(也可以是能进行区分的部分 ID 串前缀)时, 会先尝试删除所有指向该镜像的标签, 然后删除该镜像文件本身。
注意,当有该镜像创建的容器存在时,镜像文件默认是无法被删除的,例如: 先利用 ubuntu:18.04镜像创建一个简单的容器来输出一段话:

[root@dbc-server-554 ansible]# docker run -it e28 echo "hello world"
hello world

使用docker ps -a命令可以看到本机上存在的所有容器:

[root@dbc-server-554 ansible]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                CREATED          STATUS                      PORTS     NAMES
fe01b86f100c   e28            "echo 'hello world'"   14 seconds ago   Exited (0) 13 seconds ago             interesting_lumiere
69c9479cfafd   ubuntu:18.04   "bash"                 3 hours ago      Exited (0) 3 hours ago                angry_hofstadter

可以看到,后台存在一个退出状态的容器,是刚基于ubuntu:18.04镜像创建的。试图删除该镜像,Docker会提示有容器正在运行,无法删除:

[root@dbc-server-554 ansible]# docker rmi ubuntu:18.04
Error response from daemon: conflict: unable to remove repository reference "ubuntu:18.04" (must force) - container fe01b86f100c is using its referenced image e28a50f651f9

如果要想强行删除镜像, 可以使用-f参数:

$ docker rmi -f ubuntu:18.04

注意, 通常并不推荐使用-f参数来强制删除一个存在容器依赖的镜像。 正确的做法是, 先删除依赖该镜像的所有容器, 再来删除镜像。
首先删除容器e28a50f651f9:

$ docker rm e28a50f651f9 

然后使用ID来删除镜像, 此时会正常打印出删除的各层信息

2.4.3 清理镜像(prune)

使用Docker一段时间后, 系统中可能会遗留一些临时的镜像文件, 以及一些没有被使用的镜像, 可以通过docker image prune命令来进行清理(prune:消减 )。格式:

docker image prune [OPTIONS]

支待选项包括:

-a, -all: 删除所有无用镜像, 不光是临时镜像;
-filter FILTER: 只清理符合给定过滤器的镜像;
-f, -force: 强制删除镜像, 而不进行提示确认。

例如, 如下命令会自动清理临时的遗留镜像文件层, 最后会提示释放的存储空间:

$ docker image prune -f 
... 
Total reclaimed space: 1.4 GB 

2.5 *创建镜像 (commit,import,build)

创建镜像的方法主要有三种: 基于已有镜像的容器创建、 基于本地模板导入、 基于Dockerfile创建。

2.5.1 基于已有容器创建(commit)

该方法主要是使用 docker [container] commit命令。格式:

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
OPTIONS
       -a,   --author=""       Author  (e.g.,  "John  Hannibal  Smith  hannibal@a-team.com  ⟨mailto:hannibal@a-
       team.com⟩")
       -c, --change=      提交的时候执行Dockerfile指令, 包括CMD,ENTRYPOINT,ENV,EXPOSE,LABEL,ONBUILD,USER,VOLUME,WORKDIR等; 
       -m, --message=""      Commit message
       -p, --pause[=true]      Pause container during commit

下面将演示如何使用该命令创建一个新镜像:

  1. 启动一个镜像, 并在其中进行修改操作。例如, 创建一个hello文件
[root@dbc-server-554 ansible]# docker run -it e28 bash
root@944742a90200:/# touch hello
root@944742a90200:/# ls
bin  boot  dev  etc  hello  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
  1. 此时该容器与原 ubuntu:18.04 镜像相比, 已经发生了改变, 可以使用docker [container] commit命令来提交为一个新的镜像。提交时可以使用 ID 或名称来指定容器:
[root@dbc-server-554 ansible]# docker commit -m "add a new file [hello]" -a "yurq" 944742a90200 hello:0.1
sha256:faae2335ff33a81fe1c3c305a0296002556af1506db9a986bc9c69426e059955
[root@dbc-server-554 ansible]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
hello        0.1       faae2335ff33   7 seconds ago   63.1MB
ubuntu       18.04     e28a50f651f9   7 days ago      63.1MB

2.5.2 基于本地模板导入(import)

用户也可以直接从一个操作系统模板文件导人一个镜像,主要使用 docker [container] import 命令。 命令格式为

docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]

要直接导人一个镜像,可以使用 OpenVZ 提供的模板来创建,或者用其他已导出的镜像 模板来创建。
OPENVZ 模板的下载地址为 http://openvz.org/Download/templates/precreated

[root@dbc-server-554 docker]# cat centos-7-x86_64-minimal.tar.gz |docker import - centos:7
sha256:2d8840b29c99c35ff00ef66b2e4707ea22d61b513736df406f4987a46d0aa57f
[root@dbc-server-554 docker]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
centos       7         2d8840b29c99   3 seconds ago    435MB
hello        0.1       faae2335ff33   38 minutes ago   63.1MB
ubuntu       18.04     e28a50f651f9   7 days ago       63.1MB

2.5.3 基于 Dockerfile 创建(build)

基于 Dockerfile 创建是最常见的方式。 Dockerfile 是一个文本文件,利用给定的指令描述基于某个父镜像创建新镜像的过程。
下面给出 Dockerfile 的一个简单示例,基于centos7镜像构建一个新的centos镜像:

[root@dbc-server-554 docker]# cat dockerfile
FROM centos:7
LABEL version="1.0" maintainer="newbee"
[root@dbc-server-554 docker]# docker build -t centos:test .
Sending build context to Docker daemon  145.6MB
Step 1/2 : FROM centos:7
 ---> 2d8840b29c99
Step 2/2 : LABEL version="1.0" maintainer="newbee"
 ---> Running in b61ec2c18c24
Removing intermediate container b61ec2c18c24
 ---> 286c9503509f
Successfully built 286c9503509f
Successfully tagged centos:test

Dockerfile强大的构建功能远远不止于此,而且非常关键。更多使用 Dockerfile 的技巧将将在后面进行介绍。

2.6 存出和载入镜像(save,load)

本节主要介绍 Docker 镜像的 save 和 load 子命令。 用户可以使用docker [image] savedocker [image] load命令来存出和载入镜像。

2.6.1 存出镜像(save)

要导出镜像到本地文件,可以使用 docker [image] save 命令。该命令支持 -o、--output string 参数,导出镜像到指定的文件中。 格式:

 docker save [OPTIONS] IMAGE [IMAGE...]
OPTIONS
       -h, --help[=false]      help for save
       -o, --output=""      Write to a file, instead of STDOUT

示例:

[root@dbc-server-554 docker]# docker save -o centos7.tar centos:test
[root@dbc-server-554 docker]# ls
centos7.tar  centos-7-x86_64-minimal.tar.gz  dockerfile

存出的tar文件可以分享给其他人,通过下面load命令载入使用

2.6.2 载入镜像(load)

可以使用 docker [image] load 将导出的 tar 文件再导人到本地镜像库。支持 -i、--input string 选项,从指定文件中读入镜像内容。 格式:

 docker load [OPTIONS] IMAGE.tar
OPTIONS
       -h, --help[=false]      help for load
       -i, --input=""      Read from tar archive file, instead of STDIN
       -q, --quiet[=false]      Suppress(删除) the load output

示例:

Loaded image: centos:test
[root@dbc-server-554 docker]# docker rmi 286
Untagged: centos:test
Deleted: sha256:286c9503509fe18eb2d48c9eef585ee6bb8571c116781bad6f7956a33e05520d
[root@dbc-server-554 docker]# docker load -i centos7.tar
Loaded image: centos:test
[root@dbc-server-554 docker]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED             SIZE
centos       test      286c9503509f   13 minutes ago      435MB
centos       7         2d8840b29c99   23 minutes ago      435MB
hello        0.1       faae2335ff33   About an hour ago   63.1MB
ubuntu       18.04     e28a50f651f9   7 days ago          63.1MB

不使用-i,也可以使用重定向<,结果相同,例如:

docker load < centos7.tar

2.7 上传镜像(push)

本节主要介绍 Docker 镜像的 push 子命令。 可以使用docker [image] push命令上 传镜像到仓库,默认上传到 Docker Hub 官方仓库(需要登录)。 命令格式为

docker [image] push NAME[:TAG] | [REGISTRY_HOST[:REGISTRY_PORT]/]NAME[:TAG]
OPTIONS
       -a, --all-tags[=false]      Push all tagged images in the repository
       --disable-content-trust[=true]      Skip image signing
       -h, --help[=false]      help for push
       -q, --quiet[=false]      Suppress verbose output

用户在 Docker Hub 网站注册后可以上传自制的镜像。

[root@dbc-server-554 docker]# docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: yurq
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded
[root@dbc-server-554 docker]# docker tag hello:0.1 yurq/hello:0.1
[root@dbc-server-554 docker]# docker push yurq/hello:0.1
The push refers to repository [docker.io/yurq/hello]
2f8d78308466: Pushed
101b05ef38e1: Mounted from library/ubuntu
0.1: digest: sha256:6aa6a023469f4e2710f516aed3a9950902d8f03c21360a4b50f930202d58d2f0 size: 736

第一次上传时,会提示输入登录信息或进行注册,之后登录信息会记录到本地~/ . docker 目录下。
dockerhub
以后可以通过docker pull yurq/hello:0.1下载镜像进行使用

2.8 镜像命令汇总

命令说明
docker [image] pull NAME [ :TAG]获取镜像
docker images [ls]列出镜像
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]添加标签
docker inspect [OPTIONS] NAMEID [NAME
docker history [OPTIONS] IMAGE镜像构建历史
docker search [OPTIONS] TERM查找镜像
docker rmi [OPTIONS] IMAGE [IMAGE…]删除镜像
docker image prune [OPTIONS]清理镜像
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]创建镜像(基于已有容器创建)
docker import [OPTIONS] fileURL
docker build -t centos:test .创建镜像(基于 Dockerfile 创建).指当前路径
docker save [OPTIONS] IMAGE [IMAGE…]存出镜像
docker load [OPTIONS] IMAGE.tar载入镜像
docker [image] push NAME[:TAG][REGISTRY_HOST[:REGISTRY_PORT]/]NAME[:TAG]
docker login登录https://hub.docker.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/153833.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

uni-app:小程序开发总结

内容持续更新中~~~&#x1f618;uniapp项目起步:工具下载在Dcloud 官网上下载 HBuilderX 开发工具,以及微信开发者工具.(同时你要在微信开发者文档进行小程序注册,拿到 ID, HBuilderX 和 微信开发者工具 你都要进行注册登录)项目创建我们可以通过HBuilderX 来进行基础版的项目创…

【阶段三】Python机器学习12篇:机器学习项目实战:朴素贝叶斯模型的算法原理与朴素贝叶斯分类模型

本篇的思维导图: 朴素贝叶斯模型的算法原理 朴素贝叶斯是贝叶斯模型当中最简单的一种,其算法核心为如下所示的贝叶斯公式: 其中P(A)为事件A发生的概率,P(B)为事件B发生的概率,P(A|B)表示在事件B发生的条件下事件A发生的概率,同理P(B|A)则表示在事件A发…

2023-01-10 clickhouse-聚合函数的源码再梳理

https://cloud.tencent.com/developer/article/1815441 1.IAggregateFunction接口梳理 话不多说&#xff0c;直接上代码&#xff0c;笔者这里会将所有聚合函数的核心接口代码全部列出&#xff0c;一一梳理各个部分&#xff1a; 构造函数 IAggregateFunction(const DataTypes …

Android设置本地字体文件ttf

目录 前言 ①使用typeface 方式 一、创建加载字体实例 二、使用步骤 1.在Application中加载字体 2.在xml中使用 ②使用fontFamily 方式 1、在res/font下导入ttf文件 2、在xml中使用 总结 前言 产品告诉UI设计设计图时要使用炫酷字体。因为Android不像网页项目可以使用…

如何使用Jasper导出用户列表数据?

场景说明在使用JasperjaspersoftStudio导出用户列表数据导出(如下图)是比较简单的&#xff0c;就是把用户列表数据&#xff0c;一个List集合放到 JRBeanCollectionDataSource中即可。但是如果有多个List集合需要导出呢&#xff0c;这个应该怎么办?比如&#xff1a;一个用户的集…

用Python发邮件(附完整源代码)

目录 一、背景 1.1、前言 1.2、说明 二、SMTP协议 2.1、SMTP协议作用 2.2、SSL作用 三、步骤 3.1、开启QQ邮箱SMTP 四、代码 4.1、完整源代码 五、结果 5.1、代码运行结果 六、总结 6.1、总结 一、背景 1.1、前言 写了一个简陋的2023年12306自动化购票程序&…

微服务保护 - Sentinel

1.概念&#xff1a; 一&#xff1a;sentinel 介绍 随着微服务的流行&#xff0c;服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式服务架构的轻量级流量控制产品&#xff0c;主要以流量为切入点&#xff0c;从流量控制、熔断降级、系统负载保护等多个维度来帮助…

黑马学ElasticSearch(六)

目录&#xff1a; &#xff08;1&#xff09;搜索结果处理-排序 &#xff08;2&#xff09;搜索结果处理-分页 &#xff08;3&#xff09;搜索结果处理-高亮 &#xff08;1&#xff09;搜索结果处理-排序 评分降序、价格升序查询 第二 第三 一旦进行了排序_score就没有值了 …

Qt 自定义流程图 diagram

Qt 自定义流程图 diagram前言程序执行效果程序源码下载图形视图框架成员介绍重写QGraphicsItem程序源码介绍重点代码前言 本文将对QGraphicsScene, QGraphicsView,QGraphicsItem这三个类进行简单介绍&#xff0c;并通过diagram流程图项目对自定义QGraphicsItem操作进行演示讲解…

Docker从无到有

随着各个软件的版本越来越多&#xff0c;软件开发、使用环境愈发复杂&#xff0c;Docker日益受到广泛应用。本文记录下从零开始了解、使用docker的各个步骤。 Docker有3个基本概念: Image&#xff0c;镜像。镜像就是系统的快照。静态。每个Image以<Repo Name>:<Tag …

求助:程序员得了结膜炎+干眼症怎么办?

大概是2022年12月初开始&#xff0c;我就感觉眼睛有看东西有点肿胀和模糊&#xff0c;还有就是总想眯眼。本来以为就是用眼过度导致的疲劳&#xff0c;想着周六周日好好休息一下应该就好了&#xff0c;但是没想到不仅没好还加重了。不得已去了医院求助医生。 我去的是杭州的浙…

TS:镜像构建过程中go下载第三方包失败-2023.1.8(已解决)

title: TS&#xff1a;镜像构建过程中go下载第三方包失败-2023.1.8(已解决) date: 2023-1-10 categories: Golang tags:Golang TS&#xff1a;镜像构建过程中go下载第三方包失败-2023.1.8(已解决) 注意&#xff1a;一定要注意项目代码里go版本和自己机器go版本是否一致&#x…

5.2中断系统中的设备树——Linux对中断处理的框架及代码流程简述

当发生中断时&#xff0c;CPU会跳到一个固定的地址去执行代码&#xff0c;这个固定的地址就被称为中断向量。 以ARM920T为例&#xff0c;它的中断向量默认是地址24&#xff08;0x18&#xff09;的地方。那么&#xff0c;就可以在这里放一条跳转指令。 一系列的跳转指令用来处…

基于配置系统和流水线的热更新方案

文章目录背景方案调研具体方案方案优缺点背景 最近我们要在一个新的 App 上增加热更新的能力&#xff0c;按照以往的设计思路&#xff0c;需要后台一起参与&#xff0c;并提供对应的接口&#xff0c;具体的接口如下&#xff1a; 接口参数返回值备注uploadBasePkgappVersion&a…

接口管理工具YApi怎么用?颜值高、易管理、超好用

众多接口管理工具如雨后春笋搬冒出。让人欣慰的是&#xff0c;有许多优秀作品来自国内&#xff0c;包含YApi和rap。看着中文的官网&#xff0c;熟悉的汉语&#xff0c;不禁让人暗爽。当然这也就带来另一个弊端&#xff0c;因为使用基数少&#xff0c;所以参考资料少。我们想学习…

Linux时间的获取与使用

Linux系统时间有两种。 &#xff08;1&#xff09;日历时间。该值是自协调世界时(UTC)1970年1月1日00:00:00这个特定时间以来所经过的秒数累计值。基本数据类型用time_t保存。最后通过转换才能得到我们平时所看到的24小时制或者12小时间制的时间。 &#xff08;2&#xff09;…

使用WSL获得Ubuntu系统环境

文章目录使用WSL获得Ubuntu系统环境为什么要用WSL什么是WSLWSL部署安装Windows Terminal软件使用WSL获得Ubuntu系统环境 为什么要用WSL WSL作为Windows10系统带来的全新特性&#xff0c;正在逐步颠覆开发人员既有的选择。 传统方式获取Linux操作系统环境&#xff0c;是安装完…

凯撒加密Caesar cipher

凯撒加密的由来凯撒加密正是凯撒大帝发明的&#xff0c;是一种古典的加密凯撒率军征服高卢&#xff0c;袭击日耳曼和不列颠&#xff0c;古罗马开启了走出意大利&#xff0c;征服全欧洲的征程仅用8年时间征服高卢后&#xff0c;凯撒率军越过卢比孔河&#xff0c;驱赶政敌&#x…

振弦采集模块参数配置工具的使用

振弦采集模块参数配置工具的使用 通常情况下&#xff0c;在计算机端对模块进行测试、读写时&#xff0c;可使用一些通用的免费工具完成&#xff0c;如基于 MODBUS 通讯协议的调试工具 MODSCAN、通用串口调试助手等&#xff0c; 这些工具可以通过网络搜索下载使用&#xff0c;在…

03【Response、ServletContext】

文章目录03【Response、ServletContext】一、HTTP响应概述1.1 什么是HTTP响应&#xff1a;1.2 响应信息的组成&#xff1a;1.2.1 响应行1.2.2 响应头1.2.3 响应体1.3 Http协议小结二、HttpServletResponse对象2.1 设置响应行2.2.1 设置响应状态码2.2.2 常见响应码1&#xff09;…