Docker学习①

使用Docker镜像

获取镜像

镜像是获取容器的前提,官网的Docker Hub网站已经提供了数十万个镜像供大家开放下载。最好使用国内的镜像加速网站,本人使用的是以下网易的镜像加速:

#网易
http://hub-mirror.c.163.com

修改/etc/docker/daemon.json文件,此文件ubuntu下需自己创建并写下:
{
    "registry-mirrors":"http://hub-mirror.c.163.com"
}

然后执行
1、systemctl daemon-reload
2、systemctl restart docker

命令:docker  [image]  pull

实际使用:docker [image] pull NAME[:TAG]

参数解释:

  1. NAME:镜像仓库名称(用以区分镜像);
  2. TAG:镜像的标签(往往用来表示版本信息);

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

$docker pull ubuntu:18.04

同时,如果从非官方的仓库下载,则需要在仓库名称前指定完整的仓库地址。例如从网易蜂巢的镜像源下载ubuntu18.04镜像,可以使用如下命令,此时下载的镜像名称为hub:

docker pull hub.c.163.com/public/ubuntu18.04

pull子命令支持的选项主要包括:

  1. -a,-all-tags=true | false:是否获取仓库中的所有镜像,默认为否;
  2. --disable-content-trust:取消镜像的内容校验,默认为真;

这个时候,可以使用指令进行操作:

查看镜像信息

主要介绍Docker镜像的ls、tag和inspect子命令

1、使用image命令列出镜像

命令:docker imagesdocker image ls

【解析】

  1. 来自于哪个仓库,比如ubuntu表示ubuntu系列的基础镜像;
  2. 镜像的标签信息,比如18.04、latest表示不同的版本信息;
  3. 镜像的ID(唯一标识镜像),如果两个镜像的ID相同,说明它们实际上指向了同一个镜像;
  4. 创建时间,说明镜像的最后更新时间;
  5. 镜像大小,优秀的镜像往往体积都较小;

images子命令主要支持如下选项:

  1. -a,--all=true | false:列出所有(包括临时文件)镜像文件,默认为否;
  2. --digests=true | false:列出镜像的数字摘要值,默认为否;
  3. -f,--filter=[ ]:过滤列出的镜像,如dangling=true只显示没有被使用的镜像,也可指定带有特定标注的镜像等;
  4. --format=“TEMPLATE”:控制输出格式,如.ID代表ID信息,.Repository代表仓库信息等;
  5. --no-trunc=true | false:对输出结果中太长的部分是否进行截断,如镜像的ID信息,默认为是;
  6. -q,--quiet=true | false:仅输出ID信息,默认为否;

2、使用tag命令添加镜像标签

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

命令:docker tag

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

docker tag ubuntu:latest myubuntu:latest

3、使用inspect命令查看详细信息

命令:docker [image] inspect

例子:docker [image] inspect ubuntu:18.04

返回:一串Json格式的数据

【注】如果只要其中一项内容时,可以使用-f来指定,例如,获取镜像的Architecture:

docker [image] inspect -f {{".Architecture"}} ubuntu:18.04

4、使用history命令查看镜像历史

既然镜像文件由多个层组成,那么怎么知道每个层的内容具体是什么呢?

命令:history子命令,列出各层的创建信息

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

docker history ubuntu:18.04

搜寻镜像

主要介绍Docker镜像的search子命令

命令:docker search [option] keyword

【参数解析】

  1. -f,--filter filter:过滤输出内容;
  2. --format string:格式化输出内容;
  3. --limit int:限制输出结果个数,默认为25个;
  4. --no-trunc:不截断输出结果;

例1:搜索官方提供的带nginx关键字的镜像

例2:搜索所有收藏数超过4的关键字包括tensorflow的镜像

删除和清理镜像

主要介绍Docker镜像的rm和prune子命令

1、使用标签删除镜像

命令:docker rmi docker image rm

格式:docker rmi IMAGE [IMAGE...]

【参数解析】

  1. IMAGE可为标签或ID;
  2. -f,-force:强制删除镜像,即使有容器依赖它;
  3. -no-prune:不要清理未带标签的父镜像;

例:要删掉myubuntu:latest镜像,可以使用如下命令

【注】

  1. 当指定了标签进行删除操作时,删除的仅仅的标签对应的镜像,其余的不作改变;
  2. 当镜像只剩下一个标签时,此时使用删除命令会彻底删除镜像;

2、使用镜像ID来删除镜像

【注】当有该镜像的容器存在时,镜像文件默认是无法被删除的,如果想要强制删除,必须使用-f参数。

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

3、清理镜像

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

命令:docker image prune

【参数解析】

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

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

创建镜像

创建镜像的方法主要有三种:

  1. 基于已有镜像的容器创建;
  2. 基于本地模板导入;
  3. 基于Dockerfile创建;

主要介绍Docker的commit、import和build子命令

1、基于已有容器创建

主要使用docker [container] commit子命令

命令:docker [container] commit [OPTIONS] CONTAINER [REPOSITORY [:TAG] ]

【参数解析】

  1. -a,--author=“”:作者信息;
  2. -c,--change=[ ]:提交的时候执行Dockerfile指令,包括CMD | ENTRYPOINT | ENV | EXPOSE | LABEL | ONBUILD | USER | VOLUME | WORKDIR等;
  3. -m,--message=“”:提交信息;
  4. -p,--pause=true:提交时暂停容器运行;

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

首先,启动一个镜像,并在其中进行修改操作。例如,创建一个test文件,之后退出:

【注】记住容器的ID为197fd52cbe8a

此时该容器与原镜像相比,已经发生了改变,可以使用docker [container] commit命令来提交成为一个新的镜像

【注】Docker技术入门与实战一书中,在上图箭头处会多一个[ container ],作修改如图。

顺利的话,会返回新创建镜像的ID信息,如上图。

2、基于本地模板导入

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

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

3、基于Dockerfile创建

Dockerfile是一个文本文件,利用给定的指令描述基于某个父镜像创建新镜像的过程。

使用docker build,用户可以创建一个连续执行多个命令行指令的自动化构建的镜像。

Docker镜像是分层结构,由只读层组成,每个只读层表示Dockerfile指令。这些层被堆叠起来,每一层都是前一层变化的增量。例如:

FROM ubuntu:18.04
COPY . /app
RUN make /app
CMD python /app/app.py

上面没条指令的含义:

  • FROM :创建一个基础镜像层(基于ubuntu:18.04),之后的指令都是基于该层的。因此一个 Dockerfile 中 FROM 是必备的指令,并且必须是第一条指令。
  • COPY :将docker客户端当前目录中的文件全部 copy 到容器中的/app目录中。
  • RUN :使用make构建应用程序,RUN 指令是用来执行命令行命令的。
  • CMD :指定在容器中运行什么命令。

当您运行一个镜像像并生成一个容器时,将在底层层上添加一个新的可写层(“容器层”)。对正在运行的容器所做的所有更改,如写入新文件、修改现有文件和删除文件,都被写入这个可写的容器层。

存储和载入镜像

主要介绍Docker镜像的save和load子命令。

命令:docker [image] savedocker [image] load

1、存入镜像

命令:docker [image] save

【参数支持】

  • -o、-output string参数,导出镜像到指定的文件中

例:导出本地的ubuntu18.04镜像为文件ubuntu_18.04.tar.gz

之后,即可通过分享tar.gz包将该镜像分享给他人。

2、载入镜像

可以使用docker [image] load将导出的tar文件再导入到本地镜像库。

【参数支持】

  • -i、-input string选项,从指定文件中读入镜像内容

例:从文件ubuntu_18.04.tar.gz导入镜像到本地镜像列表

上传镜像

主要介绍Docker镜像的push子命令

命令:docker [image] push NAME[:TAG] | [REGISTRY_HOST [:REGISTRY_PORT] / ] NAME [:TAG]

使用docker [image] push上传镜像到仓库,默认上传到Docker Hub官方仓库(需要登录)。

发布了90 篇原创文章 · 获赞 6 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_37160123/article/details/103238118