美文网首页
1.Docker入门之使用Docker镜像

1.Docker入门之使用Docker镜像

作者: clazzXY | 来源:发表于2020-02-28 20:13 被阅读0次

获取镜像

可以使用 docker [image] pull 命令直接从 Docker Hub 镜像源来下载镜像。 该 命 令的格式为 docker [image] pull NAME [:TAG] 。

其中,NAME是镜像仓库名称(用来区分镜像),TAG 是镜像的标签(往往用来表示版本信息)。通常情况下,描述一个镜像需要包括"名称+标签"信息。

一例
获取Ubuntu18.04系统的基础镜像

$ docker pull ubuntu:18.04
18.04: Pulling from library/ubuntu
423ae2b273f4: Pull complete
de83a2304fa1: Pull complete
f9a83bce3af0: Pull complete
b6b53be908de: Pull complete
Digest: sha256:04d48df82c938587820d7b6006f5071dbbffceb7ca01d2814f81857c631d44df
Status: Downloaded newer image for ubuntu:18.04
docker.io/library/ubuntu:18.04`

对于Docker镜像来说,如果不显示指定TAG,则默认选择latest标签

Digest为一个唯一的id,256个比特,64个十六进制字符组成。

镜像的仓库中应该有添加仓库的地址作为前缀,只是使用默认的DockerHub服务可以忽略前缀。

如例如docker pull ubuntu:18.04命令相当千docker pull registry.hub.docker.com/ubuntu:18.04命令,即从默认的注册服务器DocekrHub Registry中的 ubuntu 仓库来下载标记为18.04的镜像。

如果从非官方的仓库下载,需要指定全完整的厂库地址。如从网易蜂巢下载镜像

docker pull hub.c.163.com/public/ubuntu:18.04

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

  • -a,-all-tag=true|false:是否获取远程仓库中的所有镜像,默认为否
  • --disable-content-trust:取消镜像的内容校验,more为真

另外,我们可以使用镜像代理服务来加速Docker镜像获取过程,可以在Docker服务启动配置中增加 registy-mirror=proxy_url来指定镜像代理服务

镜像下载到本地之后,即可以使用该镜像了,例如创建一个容器并运行bash应用,执行打印Hello World的命令:

# hukai @ hukaideMacBook-Pro in ~ [22:12:02]
$ docker run -it ubuntu:18.04 bash
root@c8aa5f15bb6b:/# echo 'Hello World!'
Hello World!
root@c8aa5f15bb6b:/# exit
exit

查看镜像信息

使用images命令列出镜像

docker images / docker images ls命令可以列出本地主机上已有的镜像的基本信息。

例如

hukai @ hukaideMacBook-Pro in ~ [22:31:53]
$ docker images
REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
ubuntu                18.04               72300a873c2c        4 days ago          64.2MB
mysql                 5.7                 d5cea958d330        5 days ago          440MB
nginx                 latest              2073e0bcb60e        3 weeks ago         127MB
openresty/openresty   latest              3c9e8cc37fa4        4 weeks ago         84.8MB
  • REPOSITORY 来自于哪个仓库
  • TAG 表示镜像的版本
  • IMAGE ID 唯一镜像标识 如果两个镜像相同,说明他实际上指向了同一个镜像,只是标签名称略有不同
  • CREATED 镜像最后的修改时间
  • SIZE 镜像的大小

images子命令主要支出以下选项

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

其中, 还支持对输出结果进行控制的选项,如 -f,--filter=[]、--no-trunc=true |false、-q、--quiet=true|false等。

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

使用tag命令添加镜像标签

为了方便在后续的工作中使用特定的镜像,还可以使用docker tag命令为本地镜像添加新的标签,如给ubuntu添加
docker tag ubuntu:18.04 myubuntu:latest

$ docker images
REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
myubuntu              latest              72300a873c2c        4 days ago          64.2MB
ubuntu                18.04               72300a873c2c        4 days ago          64.2MB
mysql                 5.7                 d5cea958d330        5 days ago          440MB
nginx                 latest              2073e0bcb60e        3 weeks ago         127MB
openresty/openresty   latest              3c9e8cc37fa4        4 weeks ago         84.8MB

可见增加了一个镜像标签,IMAGEID还是一致的,所以docker tag起到了类似链接的作用

使用inspect命令来查询详细信息

使用 docker inspect [image] ubuntu:18.04
当只要使用其中的一项的时候
docker inspect -f {{".Architecture"}} ubuntu:18.04

使用history命令来查看历史镜像

镜像文件由很多成构成,如何知道各个层的内容具体是什么呢?这个时候可以使用history子命令
docker history ubuntu:18.04

搜寻镜像

使用docker search可以搜索Docker Hub官方仓库中的镜像。语法为docker search [option] keyword。支持的命令有

  • -f,--filter filter:过滤输出的内容
  • --format string:格式化输出内容
  • --limit int 限制输出个数,默认为25个
  • --no-trunc:不截断输出。

例如搜索官方带nginx关键字的镜像
docker search --filter=is-official=true nginx
再如搜索收藏超过4的包含TensorFlow关键字的镜像
docker search --filter=stars=4 tensorflow

删除和清理镜像

使用标签删除镜像

使用docker rmi或者docker image rm命令可以删除镜像,命令格式为docker rmi IMAGE [IMAGE...]其中IMAGE可以为标签或者ID

支持的选项包括

  • -f,-force:强制删除镜像,即使有容器依赖它;
  • -no-prune:不要清理未带父标签的镜像。

如,要删除myubuntu:latest 镜像可以使用如下命令
docker rmi myubuntu:latest
此时只删除掉了一个TAG副本,原来的ubuntu:18.04镜像还在。当然,如果删掉一个没有副本的image,整个镜像将会被全部删除。

使用镜像ID来删除镜像

当使用docker rmi命令,并且后面跟上镜像的ID(也可以是能进行区分的部分ID串前缀)时,会尝试先删除所有指向该镜像的标签,然后删除镜像本身

注意,当该进行创建的容器存在的时候,镜像文件默认是无法被删除的。如先使用ubuntu:18.04镜像创建一个简单的容器并输出一段话:
docker run ubuntu:18.04 echo 'hello docker!'

使用docker ps -a可以看到本机存在的所有容器
可以看到,后台存在一个退出状态的容器,是基于ubuntu镜像创建的,如果试图删除该镜像,Docker会提示有容器正在运行,无法删除。如果需要删除的话需要加上-f参数。但是通常不建议使用该方式。正确的做法是,先删除依赖该镜像的所有容器,然后再来删除镜像。

首先删除容器docker rm [CONTAINER ID],删除完之后使用docker rmi IMAGEID删除镜像。

清理镜像

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

支持选项包括:

  • -a,-all:删除所有无用的镜像,不光是临时镜像
  • -filter filter:只清理符合给定过滤器的镜像;
  • -f,-force:强制删除镜像,而不进行提示确认。
    例如,如下命令会自动清理临时的遗留镜像文件层,最后会提示释放空间:
    docker image prune -f

创建镜像

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

基于已有容器创建

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

命令格式docker [container] commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]],主要选项包括:

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

下面介绍如何使用命令创建一个新的镜像。

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

# hukai @ hukaideMacBook-Pro in ~ [10:21:35]
$ docker run -it ubuntu:latest /bin/bash
root@15b1129203d6:/# touch test
root@15b1129203d6:/# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  test  tmp  usr  var
root@15b1129203d6:/# exit
exit

如下创建一个新的镜像

# hukai @ hukaideMacBook-Pro in ~ [10:22:31]
$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS                      PORTS               NAMES
15b1129203d6        ubuntu:latest       "/bin/bash"              About a minute ago   Exited (0) 46 seconds ago                       hungry_brattain
c4a53b2a7970        nginx               "nginx -g 'daemon of…"   5 days ago           Exited (0) 5 days ago                           webserver

# hukai @ hukaideMacBook-Pro in ~ [10:23:17]
$ docker commit -m 'Add a new file' -a 'hukai' 15b11 ubuntubash:0.1
sha256:925cf7380c958dc5b9d709f37d3b290d455da7818562fb98af9e348888370e51

# hukai @ hukaideMacBook-Pro in ~ [10:26:46]
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntubash          0.1                 925cf7380c95        8 seconds ago       64.2MB
ubuntu              latest              72300a873c2c        5 days ago          64.2MB
mysql               5.7                 d5cea958d330        5 days ago          440MB
nginx               latest              2073e0bcb60e        3 weeks ago         127MB

# hukai @ hukaideMacBook-Pro in ~ [10:26:54]

基于Dockerfile创建

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

下面给出一个Dockerfile的简单示例,基于debian:stretch-slim镜像安装Python3环境的镜像

FROM debian:stretch-slim

LABEL version="1.0" maintainer="docker user <docker_user@github>"

RUN apt-get update && apt-get install -y python3 && apt-get clean && rm -rf /var/lib/apt/list/*

使用docker build -f xxxx来创建

存出和载入镜像

存出镜像

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

如导出nginx镜像到本地

# hukai @ hukaideMacBook-Pro in ~ [11:03:23]
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              72300a873c2c        5 days ago          64.2MB
mysql               5.7                 d5cea958d330        6 days ago          440MB
nginx               latest              2073e0bcb60e        3 weeks ago         127MB

# hukai @ hukaideMacBook-Pro in ~ [11:03:32]
$ docker save -o nginx_back.tar nginx:latest

载入镜像

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

# hukai @ hukaideMacBook-Pro in ~ [11:06:28]
$ docker load -i nginx_back.tar
Loaded image: nginx:latest

上传镜像

用户可以使用docker push命令上传到镜像库中,默认上传到Docker Hub官方仓库中

一例

# hukai @ hukaideMacBook-Pro in ~ [11:22:20] C:1
$ docker tag  nginx:latest iceco1a/mytest:v0.1

# hukai @ hukaideMacBook-Pro in ~ [11:22:44]
$ docker push iceco1a/mytest:v0.1
The push refers to repository [docker.io/iceco1a/mytest]
22439467ad99: Pushed
b4a29beac87c: Pushed
488dfecc21b1: Pushed
v0.1: digest: sha256:62f787b94e5faddb79f96c84ac0877aaf28fb325bfc3601b9c0934d4c107ba94 size: 948

相关文章

网友评论

      本文标题:1.Docker入门之使用Docker镜像

      本文链接:https://www.haomeiwen.com/subject/lpyrhhtx.html