Docker - 镜像

一:镜像简介

镜像是一个Docker的可执行文件,其中包括运行应用程序所需的所有代码内容、依赖库、环境变量和配置文件等

通过镜像可以创建一个或多个容器

二:镜像管理

1.获取镜像

镜像是运行容器的模板,官方 Docker Hub 仓库已经提供了许多镜像共开发者使用

如果我们需要获取某 个镜像则可以去 docker 仓库下载所需的镜像

官方镜像仓库

https://hub.docker.com/

语法

docker pull [仓库的URl]/[名称空间]/[仓库名称]:[版本号]

默认使用官方仓库

# 例如:安装redis的命令docker pull redis(下面是它完整的)
docker pull docker.io/library/redis:latest

实例

docker pull redis

2.查看已下载的镜像列表

语法

docker images
docker image ls

选项

选项 释义
-a 列出所有(包括临时文件)镜像文件
-q 仅显示镜像 ID
列出镜像的数字摘要值

显示的参数

名称 释义
REPOSITORY 镜像仓库中的镜像名称
TAG 镜像版本
IMAGE ID 镜像ID(不完整,其余隐藏了)
CREATED 镜像创建日期(多久之前创建)
SIZE 镜像大小

其中镜像的 ID 信息十分重要,它唯一标识了镜像(全球唯一)

在使用镜像 ID 的时候,一般可以使用该 ID 的前若干个 字符组成的可区分串来替代完整的 ID

TAG 信息用于标记来自同一个仓库的不同镜像

TAG 在同一个仓库中是唯一的

镜像大小信息只是表示了该镜像的逻辑体积大小,实际上由于相同的镜像层本地只会存储一份,物理上占用 的存储空间会小于各镜像逻辑体积之和

3.为镜像添加标签

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

语法

docker tag [原镜像ID] [新的名称]:[新的版本号]
docker tag [原镜像名称]:[版本号] [新的名称]:[新的版本号]
docker tag [原镜像仓库URL]/[原命名空间]/[原仓库名称]:[版本号] [新的名称]:[新的版本号]

实例

docker tag redis:latest redis:latest1

这只会添加标签,并不能修改,并且添加的标签和原镜像名的ID相同

4.登录

docker login [选项] [仓库URL] 
docker login --username=用户名 [仓库URL] 
cd /etc/docker

5.推送命令

# 先给镜像打标签
docker tag [镜像ID] [仓库URL]/[命名空间]/[仓库名称]:[镜像版本号]

# 推送
docker push [完整的仓库名称/镜像名称]
docker push [仓库URL]/[命名空间]/[仓库名称]:[镜像版本号]

6.查看镜像详情信息

使用 docker inspect 命令获取镜像的详细信息,包括 PID、作者、架构等等

docker inspect [选项] [镜像ID]
docker inspect [选项] [镜像名称]:[版本号]


# 筛选某一个需要的部分
docker inspect -f '{{.Id}}'  74d107221092	# 获取ID
docker inspect -f '{{.Config.Hostname}}'  74d107221092	# 获取配置主机名
docker inspect -f '{{ .ContainerConfig.Hostname }}'   74d107221092	# 获取容器配置主机名

7.查看历史记录

语法

docker history [镜像名称]
docker history [镜像ID]

实例

docker history redis
docker history 560f3f47e448


[root@localhost ~]# docker history nginx
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
bc9a0695f571        6 days ago          /bin/sh -c #(nop)  CMD ["nginx" "-g" "daemon…   0B
<missing>           6 days ago          /bin/sh -c #(nop)  STOPSIGNAL SIGQUIT           0B
<missing>           6 days ago          /bin/sh -c #(nop)  EXPOSE 80                    0B
<missing>           6 days ago          /bin/sh -c #(nop)  ENTRYPOINT ["/docker-entr…   0B
<missing>           6 days ago          /bin/sh -c #(nop) COPY file:0fd5fca330dcd6a7…   1.04kB
<missing>           6 days ago          /bin/sh -c #(nop) COPY file:08ae525f517706a5…   1.95kB
<missing>           6 days ago          /bin/sh -c #(nop) COPY file:e7e183879c35719c…   1.2kB
<missing>           6 days ago          /bin/sh -c set -x     && addgroup --system -…   63.6MB
<missing>           6 days ago          /bin/sh -c #(nop)  ENV PKG_RELEASE=1~buster     0B
<missing>           6 days ago          /bin/sh -c #(nop)  ENV NJS_VERSION=0.4.4        0B
<missing>           6 days ago          /bin/sh -c #(nop)  ENV NGINX_VERSION=1.19.5     0B
<missing>           12 days ago         /bin/sh -c #(nop)  LABEL maintainer=NGINX Do…   0B
<missing>           13 days ago         /bin/sh -c #(nop)  CMD ["bash"]                 0B
<missing>           13 days ago         /bin/sh -c #(nop) ADD file:d2abb0e4e7ac17737…   69.2MB

8.搜索镜像

在docker中搜索镜像主要使用Search子命令,默认只搜索Docker Hub官方镜像仓库中的镜像

语法

docker search [选项] [镜像名称/简介]

选项

选项 释义
--limit n 只显示n条记录
-f 过滤查询
--no-trunc 不截断参数查询(显示全部信息)

实例

# 查询redis
docker search redis

# 只查询出前3条记录
docker search redis --limit 3


--limit 3	# 只显示前3条


# 查询收藏数大于150的
docker search redis -f stars=150


# 查询官方的redis
docker search redis is-official=true

查询结果参数

参数 释义
NAME 镜像名称
DESCRIPTION 镜像描述
STARS 镜像收藏个数(类似于Github中的stars)
OFFICIAL 是否是官方构建的镜像
AUTOMATED 是否是自构建的镜像

9.删除镜像

使用 docker rmi 或 docker image rm 命令可以删除镜像

语法

docker rmi [镜像ID]
docker rmi [镜像名称]:[版本号]

选项

选项 释义
-f 强制执行

实例

# 删除redis镜像
docker rmi 74d107221092
docker rmi redis

# 删除所有镜像
docker rmo $(docker images -q)

10.清理镜像

使用一段时间之后,docker 会产生很多临时文件,以及一些没有被使用的镜像,我们可以通过 docker image prune 命令来进行清理

语法

docker image prune [选项]

选项

选项 释义
-a 清理所有(未被使用的)镜像
-f 强制执行

实例

# 删除所有的未被使用的镜像
docker image prune -a


# 强制删除所有的未被使用的镜像(不进行提示)
docker image prune -a -f

11.提交镜像

语法

docker commit [容器ID] [选项] [新的版本号]
docker commit -a "作者" -m "简介" 容器ID

选项

选项 释义
-a 作者
-m 简介
-p 保存时,容器停止运行

实例

docker commit -a "darker" -m "简介" 容器ID

12.保存镜像

export - 将容器导出为镜像包(仅仅保存了镜像)

docker export [容器ID|容器名称] > xxx.tar

# 实例:将nginx容器导出为nginx.tar镜像压缩包
docker export nginx > nginx.tar

import - 将镜像包导入为镜像

docker import [压缩包名称] [镜像名称(自定义)]

# 实例:将nginx.tar镜像压缩包导入为nginx镜像
docker import nginx.tar test/nginx:v1
  • commit是导出为镜像
  • export是导出为镜像包(压缩包)

save - 导出镜像为镜像压缩包(不仅保存了镜像,还保存了名称)

选项 释义
-o 指定在1个压缩包内导入多个镜像
docker save [镜像ID|镜像名称] > [镜像压缩包名称]

# 实例
docker save test/nginx:v2 > nginx_v2.tar


# 将多个镜像打包到1个压缩包中
docker save -o test_2.tar nginx:1.19.2 redis python

load - 将压缩包导入为镜像

选项 释义
-i 指定导出压缩包内的镜像
docker load < [镜像压缩包]
docker load -i < [镜像压缩包]

# 实例:
docker load < nginx.tar
docker load -i test_2.tar
导出方式 保存的完整性 保存体积 镜像重命名 保存的数量
save与load 保存完整 否(镜像名是原来的) 可以保存多个镜像
export与import 仅保存了镜像 是(镜像名可以自定义) 只能保存1个容器

save 和 export 的使用场景

  • 打包镜像一般使用save,打包容器一般使用export
  • 需要构建历史信息的,可以使用save

实例

# 查看所有镜像
[root@localhost blog]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              bc9a0695f571        7 days ago          133MB
mysql               5.7.32              ae0658fdbad5        11 days ago         449MB
centos              latest              0d120b6ccaa8        3 months ago        215MB
python              3.6.8               48c06762acf0        18 months ago       924MB


# 把 nginx:latest 打包成 nginx_save.tar
[root@localhost blog]# docker save nginx:latest > nginx_save.tar


# 把 nginx:latest centos:latest 打包成 all1_save.tar
[root@localhost blog]# docker save -o all1_save.tar nginx:latest centos:latest


# 将 all1_save.tar 导入成 nginx:v1
[root@localhost blog]# docker import all1_save.tar nginx:v1
sha256:95195f2f5ee8c32d997b78c8f15009f66fcfd8544ca394e4c09fe28397ba11f0


# 查看所有镜像
[root@localhost blog]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               v1                  95195f2f5ee8        6 seconds ago       359MB
nginx               latest              bc9a0695f571        7 days ago          133MB
mysql               5.7.32              ae0658fdbad5        11 days ago         449MB
centos              latest              0d120b6ccaa8        3 months ago        215MB
python              3.6.8               48c06762acf0        18 months ago       924MB


# 运行导入的镜像(会报错)
[root@localhost blog]# docker run -d -p 80:80 --name all_saved nginx:v1
docker: Error response from daemon: No command specified.
See 'docker run --help'.

export 保存的镜像压缩包 只能由import导入

save 保存的镜像压缩包 只能由load导入

13.配置镜像加速器

配置Docker加速器,将会提升在国内获取Docker官方镜像的速度,否则后面下载镜像(docker pull)的过程会很慢,甚至有可能无法下载镜像

针对Docker客户端版本大于 1.10.0 的用户

可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'

{
  "registry-mirrors": ["https://rxsa4cyh.mirror.aliyuncs.com"]
}

EOF

systemctl daemon-reload
systemctl restart docker

14.总结

posted @ 2020-12-18 21:09  轻描丨淡写  阅读(157)  评论(0编辑  收藏  举报