二、Docker镜像的使用

Docker 运行容器前需要本地存在对应的镜像, 如果镜像不存在, Docker 会尝试先从默认镜像仓库下载(默认使用 Docker Hub 公共注册服务器中的仓库), 用户也可以通过配置,使用自定义的镜像仓库

1.获取镜像

镜像是运行容器的前提, 官方的 Docker Hub 网站已经提供了数十万个镜像供大家开放下载。
docker pull : 从镜像仓库中拉取或者更新指定镜像
语法格式:docker pull [OPTIONS] NAME[:TAG|@DIGEST]
OPTIONS说明:

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

实例:获取nginx镜象:docker pull nginx
对于Docker镜像来说, 如果不显式指定TAG, 则默认会选择latest标签,这会下载
仓库中最新版本的镜像
在这里插入图片描述
该命令实际上下载的就是 nginx:latest镜像
注意:一般来说, 镜像的latest 标签意味着该镜像的内容会跟踪最新版本的变更而变化, 内容是不稳定的。
因此,从稳定性上考虑,不要在生产环境中忽略镜像的标签信息或使用默认的latest 标记的镜像

2.查看镜像信息

docker images : 列出本地镜像
语法格式:docker images [OPTIONS] [REPOSITORY[:TAG]]
OPTIONS说明:

-a :列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层);
--digests :显示镜像的摘要信息;
-f :显示满足条件的镜像;
--format :指定返回值的模板文件;
--no-trunc :显示完整的镜像信息;
-q :只显示镜像ID;

实例:
在这里插入图片描述
REPOSITORY: 来自于哪个仓库;
TAG: 镜像的标签信息,比如 5.7、latest 表示不同的版本信息;
IMAGE ID: 镜像的 ID, 如果您看到两个 ID 完全相同,那么实际上,它们指向的是同一个镜像,只是标签名称不同罢了;
CREATED: 镜像最后的更新时间;
SIZE: 镜像的大小,优秀的镜像一般体积都比较小,这也是我更倾向于使用轻量级的 alpine 版本的原因;

3.使用tag命令添加镜像标签

docker tag : 标记本地镜像,将其归入某一仓库。
语法格式:docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]
实例:将镜像centos:latest标记为 yu:lei 镜像。
在这里插入图片描述

4.使用inspect命令查看镜象详细信息

docker inspect : 获取容器/镜像的元数据。
语法格式:docker inspect [OPTIONS] NAME|ID [NAME|ID...]
实例:
在这里插入图片描述
输出量太多,就不一一截屏展示了。
上面代码返回的是一 个 JSON 格式的消息, 如果我们只要其中一项内容时, 可以使用 -f 来指定, 例如, 获取镜像的Id:

[root@web-nginx-01 ~]# docker inspect -f {{.Id}} centos
sha256:300e315adb2f96afe5f0b2780b87f28ae95231fe3bdd1e16b9ba606307728f55

5.使用history命令查看镜像历史

docker history : 查看指定镜像的创建历史。
语法格式:docker history [OPTIONS] IMAGE
OPTIONS说明:

--no-trunc :显示完整的提交记录;
-q :仅列出提交记录ID;

实例:
在这里插入图片描述

6.搜寻镜像

docker search : 从Docker Hub查找镜像
语法格式:docker search [OPTIONS] TERM
OPTIONS说明:

--filter , -f:根据提供的条件过滤输出
--format:格式化输出
--limit:搜索结果的最大显示数量默认值25
--no-trunc:不截断输出

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

[root@web-nginx-01 ~]# docker search --filter=is-official=true nginx
NAME      DESCRIPTION                STARS     OFFICIAL   AUTOMATED
nginx     Official build of Nginx.   14228     [OK]    

搜索所有收藏数超过 4 的关键词包括 tensorow 的镜像:

[root@web-nginx-01 ~]# docker search --filter=stars=4 tensorflow
NAME                                       DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
tensorflow/tensorflow                      Official Docker images for the machine learn…   1824                 
jupyter/tensorflow-notebook                Jupyter Notebook Scientific Python Stack w/ …   250                  
tensorflow/serving                         Official images for TensorFlow Serving (http…   105                  
rocm/tensorflow                            Tensorflow with ROCm backend support            59                   
xblaster/tensorflow-jupyter                Dockerized Jupyter with tensorflow              55                   [OK]
floydhub/tensorflow                        tensorflow                                      26                   [OK]
bitnami/tensorflow-serving                 Bitnami Docker Image for TensorFlow Serving     14                   [OK]
opensciencegrid/tensorflow-gpu             TensorFlow GPU set up for OSG                   12                   
emacski/tensorflow-serving                 Project images from https://github.com/emacs…   9                    
ibmcom/tensorflow-ppc64le                  Community supported ppc64le docker images fo…   5                    
tensorflow/tf_grpc_test_server             Testing server for GRPC-based distributed ru…   4                    
tokunagaken/tensorflow-keras-jupyter-py3   TensorFlow-gpu 1.13.1 Keras 2.2.4 python 3.5…   4 

7.删除和清理镜像

docker rmi : 删除本地一个或多少镜像
语法格式:docker rmi [OPTIONS] IMAGE [IMAGE...]
OPTIONS说明:

-f :强制删除;
--no-prune :不移除该镜像的过程镜像,默认移除;

实例:使用标签删除镜像
在这里插入图片描述
使用ID删除镜像
在这里插入图片描述
清理镜象(系统中可能会遗留一些临时的镜像文件, 以及一些没有被使用的镜像)

docker image prune-f

注:删除所有镜像:

docker rmi `docker images -q` 

8.创建本地镜象

  1. 使用commit命令基于已有镜像的容器创建本地镜像
    docker commit :从容器创建一个新的镜像。
    语法格式:docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
    OPTIONS说明:
-a :提交的镜像作者;
-c :使用Dockerfile指令来创建镜像;
-m :提交时的说明文字;
-p :在commit时,将容器暂停;

首先, 启动一个镜像, 并在其中进行修改操作。 例如,安装httpd软件, 之后退出,代码如下:

[root@LB-nginx-01 ~]# docker run -it centos:latest /bin/bash
[root@cc186466be29 /]# yum -y install httpd
[root@cc186466be29 /]# exit

记住容器的 ID 为cc186466be29
此时该容器与原centos:latest 镜像相比,已经发生了改变,可以使用docker commit命令来提交为一个新的镜像。
提交时可以使用 ID 或名称来指定容器:

[root@LB-nginx-01 ~]# docker commit -a "yulei" -m "myhttp" cc186466be29 http:v.10

此时查看本地镜像列表, 会发现新创建的镜像已经存在了:
在这里插入图片描述

  1. 使用Dockerfile创建镜像
    基于 Dockerfile 创建是最常见的方式。 Dockerfile 是一个文本文件,利用给定的指令描述基于某个父镜像创建新镜像的过程 。
    实例:使用Dockerfile创建一个带有httpd软件的httpd:v2.0镜像
[root@LB-nginx-01 img1]# cat Dockerfile 
FROM centos:latest 
RUN yum -y install httpd
[root@LB-nginx-01 img1]# docker build -t httpd:v2.0 .

docker build 命令用于使用 Dockerfile 创建镜像。
语法格式:docker build [OPTIONS] PATH | URL | -
OPTIONS说明:

--build-arg=[] :设置镜像创建时的变量;
--cpu-shares :设置 cpu 使用权重;
--cpu-period :限制 CPU CFS周期;
--cpu-quota :限制 CPU CFS配额;
--cpuset-cpus :指定使用的CPU id;
--cpuset-mems :指定使用的内存 id;
--disable-content-trust :忽略校验,默认开启;
-f :指定要使用的Dockerfile路径;
--force-rm :设置镜像过程中删除中间容器;
--isolation :使用容器隔离技术;
--label=[] :设置镜像使用的元数据;
-m :设置内存最大值;
--memory-swap :设置Swap的最大值为内存+swap,"-1"表示不限swap;
--no-cache :创建镜像的过程不使用缓存;
--pull :尝试去更新镜像的新版本;
--quiet, -q :安静模式,成功后只输出镜像 ID;
--rm :设置镜像成功后删除中间容器;
--shm-size :设置/dev/shm的大小,默认值是64M;
--ulimit :Ulimit配置。
--squash :将 Dockerfile 中所有的操作压缩为一层。
--tag, -t: 镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签。
--network: 默认 default。在构建期间设置RUN指令的网络模式

9.导出和载入镜像

如果要导出镜像到本地文件,可以使用 docker save 命令 。 该命令支持-o, --output string参数 , 导出镜像到指定的文件中 。
导出镜像:docker save : 将指定镜像保存成 tar 归档文件。
语法格式:docker save [OPTIONS] IMAGE [IMAGE...]
OPTIONS 说明:

-o :输出到的文件

实例: 将镜像centos:latest生成mycentos_latest.tar文档

[root@LB-nginx-01 ~]# docker save -o mycentos_latest.tar centos:latest

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

--input , -i : 指定导入的文件,代替 STDIN。
--quiet , -q : 精简输出信息。

实例:将导出的mycentos_latest.tar文件再导入到本地镜像库内

[root@LB-nginx-01 ~]# docker load < mycentos_latest.tar
[root@LB-nginx-01 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              latest              300e315adb2f        3 weeks ago         209MB

10.将镜像推送到Docker Hub

镜像构建完毕之后,我们也可以将它上传到Docker Hub上面去,这样其他人就能使用这个镜像了。比如,我们可以在组织内共享这个镜像,或者完全可以公开这个镜像。

  1. 首先注册一个Docker Hub账号:https://hub.docker.com
    在这里插入图片描述

  2. 创建个人仓库在这里插入图片描述
    在这里插入图片描述

  3. 给即将要上传的镜像打上标签(给镜像打上标签才能push)
    docker tag <existing-image> <hub-user>/<repo-name>[:<tag>] #tag不指定默认为latest
    existing-image是本地镜像
    hub-user是docker hub的账户名
    repo-name是个人仓库名称

[root@LB-nginx-01 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              ae2feff98a0c        2 weeks ago         133MB
[root@LB-nginx-01 ~]# docker tag nginx:latest evanyulei/my_nginx:v4.6
[root@LB-nginx-01 ~]# docker images
REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
evanyulei/my_nginx   v4.6                ae2feff98a0c        2 weeks ago         133MB
nginx                latest              ae2feff98a0c        2 weeks ago         133MB
  1. push镜像
    登录Docker hub账号
[root@LB-nginx-01 ~]# 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: evanyulei
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

上传镜像至Docker Hub
docker push <hub-user>/<repo-name>:<tag>

[root@LB-nginx-01 ~]# docker push evanyulei/my_nginx:v4.6 
The push refers to repository [docker.io/evanyulei/my_nginx]
4eaf0ea085df: Layer already exists 
2c7498eef94a: Mounted from library/nginx 
7d2b207c2679: Layer already exists 
5c4e5adc71a8: Layer already exists 
87c8a1d8f54f: Layer already exists 
v4.6: digest: sha256:13e4551010728646aa7e1b1ac5313e04cf75d051fa441396832fcd6d600b5e71 size: 1362

Push成功之后,可登录到dockerhub网站,查看一下刚才创建的仓库名称
在这里插入图片描述
已经显示上传的镜像,说明成功。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值