当前位置:   article > 正文

四、Docker镜像与仓库_docker仓库镜像

docker仓库镜像

目录

一、Docker -查看和删除镜像

1.前言:docker镜像

在这里插入图片描述

2.docker镜像的存储地址

1.前言

Centos7安装docker之后,默认的镜像及容器存储路径为/var/lib/docker,可以使用命令docker info查看。
但是该路径默认使用的是系统盘的存储,如果挂载了数据盘,需要把docker的默认存储路径修改至数据盘的挂载目录,则需要修改docker的相关配置。

2.查看

docker info
  • 1

在这里插入图片描述
在这里插入图片描述

3.Centos7修改Docker默认存储位置

1、修改配置

将–graph /data/docker添加在docker.service文件中的ExecStart字段后面,其中/data/docker为你需要修改的存储目录

vim /usr/lib/systemd/system/docker.service
……
ExecStart=/usr/bin/dockerd  
      --graph /data/docker
……
  • 1
  • 2
  • 3
  • 4
  • 5

在这里插入图片描述

2、重启服务
systemctl daemon-reload
systemctl restart docker
  • 1
  • 2
3、验证是否生效
docker info
  • 1

在这里插入图片描述
在这里插入图片描述

3.列出镜像

1).列出镜像格式

docker images [OPTIONS] [REPOSITORY[:TAG]]
  • 1

可选参数详解:

选项描述
--all-a显示所有镜像(默认隐藏中间镜像)
--digests显示镜像的摘要
--filter,-f根据条件对输出结果进行过滤
--format格式化输出结果
--no-trunc不截断输出,即输出镜像完整的ID
--quiet,-q只显示镜像ID

2).案例—列出所有镜像

docker images
  • 1

在这里插入图片描述
各个字段详解:

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

docker中仓库(Repository)与注册服务器(Registry)的区别
一个容易混淆的概念是注册服务器(Registry)。实际上注册服务器是管理仓库的具体服务器,每个服务器上可以有多个仓库,而每个仓库下面有多个镜像。从这方面来说,仓库可以被认为是一个具体的项目或目录。例如对于仓库地址 l.dockerpool.com/ubuntu 来说,dl.dockerpool.com是注册服务器地址,ubuntu是仓库名。
注册服务器、仓库、镜像关系如下
在这里插入图片描述

3).案例—列出镜像名为[镜像名称]的所有镜像信息

 docker images  +来自于哪个仓库
  • 1
docker images nginx
  • 1

在这里插入图片描述
也可以使用模糊查找的方式:

docker images nginx:*
  • 1

在这里插入图片描述

4).案例—列出指定镜像名REPOSITORY:TAG的信息

docker images nginx:1.23.1
  • 1

在这里插入图片描述

5).显示镜像完整的ID

docker images --no-trunc
  • 1

在这里插入图片描述

6).显示镜像的摘要

docker images --digests
  • 1

在这里插入图片描述

4.查看镜像(获取容器/镜像的元数据)

1).语法及参数

docker inspect [OPTIONS] CONTAINER|IMAGE[CONTAINER|IMAGE...]|
OPTIONS说明:
-f :指定返回值的模板文件。
-s :显示总的文件大小。
--type :为指定类型返回JSON。
docker inspect 会以 json 格式得到 docker 镜像/容器的元数据。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

其中[OPTIONS]为相关操作选项,操作有:
-f --format=“” 格式化查询结果
而后面可以跟镜像的【REPOSITORY仓库名+TAG标签名】,或镜像的ID来查看
这里我们可以查看“centos”的相关镜像详细信息(这里使用centos:latest查看):
在这里插入图片描述

5.删除镜像

1).删除镜像格式

docker rmi [OPTIONS] IMAGE[IMAGE...]
  • 1

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

1).案例

#查看镜像列表
docker images
#删除镜像
docker rmi -f node:latest
#查看镜像列表
docker images
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

在这里插入图片描述

2).案例2 删除多个镜像名称

#查看镜像列表
docker images
#删除镜像
docker rmi -f 镜像名称1  镜像名称2
#查看镜像列表
docker images
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

3).案例2 删除多有镜像名称

docker rmi -f  $(docker images -q) 
  • 1

二、Docker -获取和推送镜像

1.查找镜像

1).方式1:Docker Hub 官网

https://hub.docker.com/
在这里插入图片描述

2).方式2

docker search [OPTIONS] TERM
  • 1
名称,简写默认描述
--filter, -f根据提供的条件过滤输出
--limit25最大搜索结果数
--no-truncfalse不要截断输出
docker search ubuntu
  • 1

在这里插入图片描述

#防会三星及三星以上的数据
docker search -f stars=3 ubuntu
  • 1
  • 2

在这里插入图片描述

2.拉取镜像

1).前言

docker pull命令用于从注册表中拉取出映像或存储库。大多数映像在Docker Hub注册表的基础映像之上创建。Docker Hub包含许多预先构建的映像,可以在不需要定义和配置自己的情况下进行拉取。
要下载特定映像或映像集(即存储库),请使用docker pull。

2).命令格式

docker pull [OPTIONS] NAME[:TAG|@DIGEST]
  • 1
名称,简写默认描述
--all-tags, -afalse在存储库中下载所有标记的映像
--disable-content-trusttrue跳过映像验证

3).命令说明

从Docker Hub拉一个映像
要下载特定映像或映像集(即存储库),请使用docker pull。 如果没有提供标签,Docker Engine会使用:latest(最新的)标签作为默认值。 这个命令debian:latest映像:

docker pull vimagick/scrapyd
  • 1

在这里插入图片描述

3.推送镜像

1).命令格式

docker push [OPTIONS] NAME[:TAG]
  • 1

Options:
–disable-content-trust 忽略镜像的校验,默认开启
在这里插入图片描述

三、Docker -通过容器构建镜像(使用commit构建镜像)

1.前言

  • 保存对容器的修改,并再次使用
  • 自定义镜像能力
  • 以软件的形式打包并分发服务及其运行环境

1).语法

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
  • 1
docker   commit -m="描述信息" -a="作者" 容器id 目标镜像名: [TAG]
  • 1

OPTIONS说明:

  • -a :提交的镜像作者;
  • -c :使用Dockerfile指令来创建镜像;
  • -m :提交时的说明文字;
  • -p :在commit时,将容器暂停。
docker commit -a "908544703" -m "web"  commit-test 908544703/commit-test1
  • 1

在这里插入图片描述
在这里插入图片描述

docker commit -a "908544703" -m "nginx"  nginx  908544703/nginx
  • 1

在这里插入图片描述

2).重复使用构建的镜像

docker run -d --name   nginx-web2 -p 80  908544703/nginx  nginx -g "daemon off;"
docker ps
curl http://127.0.0.1:49157
  • 1
  • 2
  • 3

在这里插入图片描述

四、Docker -通过Dockerfile文件构建镜像

1).前言什么是 Dockerfile?

Dockerfile是一个包含用于组合映像的命令的文本文档。可以使用在命令行中调用任何命令。 Docker通过读取Dockerfile中的指令自动生成映像。
docker build命令用于从Dockerfile构建映像。可以在docker build命令中使用-f标志指向文件系统中任何位置的Dockerfile。
例:

docker build -f /path/to/a/Dockerfile
  • 1

2).为什么要使用Dockerfile

问题: 在dockerhub中官方提供很多镜像已经能满足我们的所有服务了,为什么还需要自定义镜像
核心作用: 日后用户可以将自己应用打包成镜像,这样就可以让我们应用进行容器运行.还可以对官方镜像做扩展,以打包成我们生产应用的镜像。

在这里插入图片描述
Dockerfile的格式
两种类型的行

  • 以# 开头的注释行
  • 由专用“指令(Instruction)”开头的指令行

由Image Builder顺序执行各指令,从而完成Image构建
在这里插入图片描述

3).Dockerfile文件格式

dockerfile 是面向开发的,我们以后发布项目,做镜像,就需要编写dockerfile文件
docker 镜像逐渐成为了企业新的交付标准

Dockerfile 一般分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令,’#’ 为 Dockerfile 中的注释。

dockerfile 指令:

选项描述
FROM基础镜像(指定构建新lmage时使用的基础lmage,通常必须是Dockerfile的第一个有效指令,但其前面也可以出现ARG指令)
LABEL附加到Image之上的元数据,键值格式
MAINTAINER #镜像是谁写的 名称+邮箱
RUN构建镜像需要运行的命令(以FROM中定义的Image为基础环境运行指定命令,生成结果将作为新Image的一个镜像层,并可由后续指令所使用)
COPY文件拷贝到镜像中(复制主机上或者前一阶段构建结果中(需要使用--from选项)文件或目录生成新的镜像层)
ADD步骤(与COPY指令的功能相似,但ADD额外也支持使用URL指定的资源作为源文件)
WORKDIR 镜像的工作目录(为RUN、CMD、ENTRPOINTCOPY和ADD等指令设定工作目录)
VOLUME挂载目录(指定基于新生成的Imaae运行Container时期望作为Volume使用的目录)
EXPOSE 暴露端口(指定基于新生成的Image运行Container时期望暴露的端口,但实际暴露与否取决于“dockerrun命令的选项,支持TCP和UDP协议)
CMD 指定这容器启动的时候要运行的命令,只有最后一个会生效(基于该Dockerfile生成的Image运行Container时,CMD能够指定容器中默认运行的程序,因而其只应该定义一次)
ENTRYPOINT 指定这个容器启动的时候要运行的命令,可以追加命令(类似于CMD指令的功能,但不能被命令行指定要运行的应用程序覆盖,且与CMD共存时,CMD的内容将作为该指令中定义的程序的参数)
ONBUILD 当构建一个继承dockerfile 这个时候就会运行ONBUILD 的指令(触发器,生效于由该Dockerfile构建出的新Image被用于另一个 Dockerfile中的FROM指令作为基础镜像时)
ENV 设置环境变量(以键值格式设定环境变量,可被其后的指令所调用,且基于新生成的Image运行的Container中也会存在这些变量)
USER为Dockerfile中该指令后面的RUN、CMD和ENTRYPOING指令中要运行的应用程序指定运行者身份UID,以及一个可选的GID
ARG 定义专用于build过程中的变量,但仅对该指标之后的调用生效 其值可由命令行选项"--build-arg”进行传递
STOPSIGNAL 用于通知Container终止的系统调用信号
HEALTHCHECK 定义检测容器应用的健康状态的具体方法
SHELL 为容器定义运行时使用的默认shell程序,Linux系统默认使用[“/bin/sh”,"-c"],Windows默认使用[“cmd",“/S”,"/C"]

一个图片说明常用指令的意义
在这里插入图片描述

1.FROM:指定基础镜像,必须为第一个命令

格式:
  FROM <image>
  FROM <image>:<tag>
  FROM <image>@<digest>

示例:  
	FROM mysql:5.6
注:
   tag或digest是可选的,如果不使用这两个值时,会使用latest版本的基础镜像

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

2.MAINTAINER: 维护者信息

格式:
    ENTRYPOINT ["executable", "param1", "param2"] (可执行文件, 优先)
    ENTRYPOINT command param1 param2 (shell内部命令)
示例:
    FROM centos
    ENTRYPOINT ["top", "-b"]
    CMD ["-c"]
    MAINTAINER bertwu
    注:
    ENTRYPOINT与CMD非常类似,不同的是通过docker run执行的命令不会覆盖ENTRYPOINT,而docker run命令中指定的任何参数,都会被当做参数再次传递给ENTRYPOINT。Dockerfile中只允许有一个ENTRYPOINT命令,多指定时会覆盖前面的设置,而只执行最后的ENTRYPOINT指令。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

3.LABEL:用于为镜像添加元数据

格式:
    LABEL <key>=<value> <key>=<value> <key>=<value> ...
示例:
  LABEL version="1.0" description="这是一个Web服务器" by="Docker笔录"
注:
  使用LABEL指定元数据时,一条LABEL指定可以指定一或多条元数据,指定多条元数据时不同元数据之间通过空格分隔。推荐将所有的元数据通过一条LABEL指令指定,以免生成过多的中间镜像。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

4.ENV:设置环境变量

格式:
    ENV <key> <value>  #<key>之后的所有内容均会被视为其<value>的组成部分,因此,一次只能设置一个变量
    ENV <key>=<value> ...  #可以设置多个变量,每个变量为一个"<key>=<value>"的键值对,如果<key>中包含空格,可以使用\来进行转义,也可以通过""来进行标示;另外,反斜线也可以用于续行
示例:
    ENV IT  JAVA  
  • 1
  • 2
  • 3
  • 4
  • 5

5.EXPOSE:指定于外界交互的端口

格式:
    EXPOSE <port> [<port>...]
示例:
    EXPOSE 8000 443
    EXPOSE 8080    
    EXPOSE 1211/tcp 1211/udp
    注:  EXPOSE并不会让容器的端口访问到主机。要使其可访问,需要在docker run运行容器时通过-p来发布这些端口,或通过-P参数来发布EXPOSE导出的所有端口
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

6.VOLUME:用于指定持久化目录

格式:
    VOLUME ["/path/to/dir"]
示例:
    VOLUME ["/server/nginx/www"]
    VOLUME ["/server/nginx/www", "/server/nginx/logs", "/server/nginx/conf/"
注:一个卷可以存在于一个或多个容器的指定目录,该目录可以绕过联合文件系统,并具有以下功能:
1 卷可以容器间共享和重用
2 容器并不一定要和其它容器共享卷
3 修改卷后会立即生效
4 对卷的修改不会对镜像产生影响
5 卷会一直存在,直到没有任何容器在使用它
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

7.WORKDIR:工作目录,类似于cd命令

格式:
    WORKDIR /path/to/workdir
示例:
    WORKDIR /server  (这时工作目录为/server)
    WORKDIR nginx  (这时工作目录为/server/nginx)
    WORKDIR www  (这时工作目录为/server/nginx/www)
注: 
  通过WORKDIR设置工作目录后,Dockerfile中其后的命令RUN、CMD、ENTRYPOINT、ADD、COPY
  等命令都会在该目录下执行。在使用docker run运行容器时,可以通过-w参数覆盖构建时所设置的工作目录。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

8.USER

指定运行容器时的用户名或 UID,后续的 RUN 也会使用指定用户。使用USER指定用户时,可以使用用户名、UID或GID,或是两者的组合。当服务不需要管理员权限时,可以通过该命令指定运行用户。并且可以在之前创建所需要的用户

格式:  
USER user  
USER user:group  
USER uid  
USER uid:gid  
USER user:gid  
USER uid:group 
示例:      
     USER  root
 注:
  使用USER指定用户后,Dockerfile中其后的命令RUN、CMD、ENTRYPOINT都将使用该用户。
  镜像构建完成后,通过docker run运行容器时,可以通过-u参数来覆盖所指定的用户。

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

9.ARG:用于指定传递给构建运行时的变量

格式:
    ARG <name>[=<default value>]
示例:
    ARG site
    ARG build_user=www
  • 1
  • 2
  • 3
  • 4
  • 5

10.ONBUILD:用于设置镜像触发器

格式:
  ONBUILD [INSTRUCTION]
示例:
  ONBUILD ADD . /app/src
  ONBUILD RUN /usr/local/bin/python-build --dir /app/src
注:
  当所构建的镜像被用做其它镜像的基础镜像,该镜像中的触发器将会被钥触发
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

11.RUN:构建镜像时执行的命令

RUN用于在构建镜像时执行命令,其有以下两种命令执行方式:
shell执行
格式:
    RUN <command>
exec执行
格式:
    RUN ["executable", "param1", "param2"]
示例:
    RUN ["executable", "param1", "param2"]
    RUN apk update
    RUN ["/etc/execfile", "arg1", "arg1"]
注:RUN指令创建的中间镜像会被缓存,并会在下次构建中使用。如果不想使用这些缓存镜像,
可以在构建时指定--no-cache参数,如:docker build --no-cache
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

12.ADD:将本地文件添加到容器中,tar类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似wget

格式:
    ADD <src>... <dest>
    ADD ["<src>",... "<dest>"] 用于支持包含空格的路径
示例:
    ADD hom* /mydir/          # 添加所有以"hom"开头的文件
    ADD hom?.txt /mydir/      # ? 替代一个单字符,例如:"home.txt"
    ADD test relativeDir/     # 添加 "test" 到 `WORKDIR`/relativeDir/
    ADD test /absoluteDir/    # 添加 "test" 到 /absoluteDir/
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

13.COPY

功能类似ADD,但是是不会自动解压文件,也不能访问网络资源

14.CMD构建镜像后调用,也就是在容器启动时才进行调用。

格式:
    CMD ["executable","param1","param2"] (执行可执行文件,优先)
    CMD ["param1","param2"] (设置了ENTRYPOINT,则直接调用ENTRYPOINT添加参数)
    CMD command param1 param2 (执行shell内部命令)
示例:
    CMD echo "This is a test." | wc -l
    CMD ["/usr/bin/wc","--help"]
注:CMD不同于RUN,CMD用于指定在容器启动时所要执行的命令,而RUN用于指定镜像构建时所要执行的命令。

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

15.ENTRYPOINT配置容器,使其可执行化。配合CMD可省去"application",只使用参数。

格式:
    ENTRYPOINT ["executable", "param1", "param2"] (可执行文件, 优先)
    ENTRYPOINT command param1 param2 (shell内部命令)
示例:
    FROM centos
    ENTRYPOINT ["ls", "/usr/local"]
    CMD ["/usr/local/tomcat"]
  之后,docker run 传递的参数,都会先覆盖cmd,然后由cmd 传递给entrypoint ,做到灵活应用

注:ENTRYPOINT与CMD非常类似,不同的是通过docker run执行的命令不会覆盖ENTRYPOINT,
 而docker run命令中指定的任何参数,都会被当做参数再次传递给CMD。
 Dockerfile中只允许有一个ENTRYPOINT命令,多指定时会覆盖前面的设置,
 而只执行最后的ENTRYPOINT指令。
 通常情况下,	ENTRYPOINT 与CMD一起使用,ENTRYPOINT 写默认命令,当需要参数时候 使用CMD传参

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

4).Dockerfile构建过程

  1. docker从基础镜像运⾏⼀个容器,执⾏⼀条指令并对容器做出修改
  2. 执⾏类似 docker commit 的操作提交⼀个新的镜像层
  3. Docker再基于刚提交的镜像运⾏⼀个新容器
  4. 执⾏dockerfile中的下⼀条指令直到所有指令都执⾏完成

5).制作镜像

  • 如果有多个RUN,自上而下依次运行,每次运行都会形成新的层,建议&& 放入一行运行
  • 如果有多个CMD,只有最后一个运行
  • 如果有多个Entrypoint,只有最后一个运行
  • 如果CMD和entrypoint共存,只有entrypoint运行,且最后的CMD会当做entrypoint的参数

镜像制作分为两个阶段

  1. docker build阶段 基于dockerfile制作镜像 (RUN,用于此阶段的运行命令)
  2. docker run阶段 基于镜像运行容器 (CMD,基于image run容器时候,需要运行的命令)
  3. docker build 基于第一阶段的镜像被别人from制作新镜像 (entrypoint 或onbuild
    基于镜像重新构建新镜像时候在此阶段运行的命令)

1).源码编译制作centos镜像

# Base images 基础镜像 该image文件继承官方的centos7
FROM centos:7
#MAINTAINER 维护者信息
MAINTAINER  wj<908544777@qq.com>
#ENV 设置环境变量
ENV MYPATH /usr/local
#ADD  文件放在当前目录下,拷过去会自动解压
#ADD nginx-1.8.0.tar.gz  $MYPATH
#WORKDIR 相当于cd  /usr/local
WORKDIR $MYPATH
#RUN 执行以下命令 
RUN yum -y install vim   net-tools ifconfig
#EXPOSE 映射端口
EXPOSE 80
#CMD 运行以下命令
CMD /bin/bash
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

2).构建centos镜像

(1).docker build命令格式
docker build [OPTIONS] PATH | URL | -
  • 1
  • OPTIONS -命令参数
  • PAHT - dockerfile文件路径
Name, shorthandDefaultDescription
–add-host添加自定义主机到IP的映射(host:ip)
–build-arg设置构建时变量
–cache-from视为缓存源的镜像
–cgroup-parent容器可选的父安全组
–compress使用gzip压缩构建上下文
–cpu-period限制CPU CFS(完全公平调度程序) 期限
–cpu-quota限制CPU CFS(完全公平的调度程序)配额
–cpu-shares,-cCPU份额(相对重量)
–cpuset-cpus允许执行的CPU(0-3,0,1)
–cpuset-mems允许执行的MEM(0-3,0,1)
–disable-content-trust跳过镜像验证
–file,-fDockerfile的名称(默认为“ PATH / Dockerfile”)
–force-rm始终取出中间容器
–iidfile将镜像ID写入文件
–isolation集装箱隔离技术
–label设置镜像的元数据
–memory,-m内存限制
–memory-swap交换限制等于内存加交换:"-1"以启用无限交换
–network在构建期间为RUN指令设置联网模块 API1.25+
–no-cache构建镜像时不要使用缓存
–output,-o输出目的地(格式:类型=本地,目的地=路径) API 1.40+
–platform如果服务器具有多平台功能,请设置平台 API 1.32+ 实验(守护程序)
–progressauto设置进度输出的类型(自动,普通,tty)。使用普通显示容器输出
–pull始终尝试提取镜像的较新版本
–quiet,-q禁止生产输出并成功打印镜像ID
–rmtrue构建成功后删除中间容器
–secret公开文件的秘密文件(仅在启用BuildKit的情况下):id = mysecret,src = / local / secret API 1.39+
–security-opt安全选项
–shm-size/dev/shm的大小
–sshSSH代理套接字或用于公开构建的密钥(仅在启用BuildKit的情况下)(格式: default
–stream流附加到服务器以协商构建上下文 API 1.31+ 实验性(守护程序)
–tag,-t名称以及“ name:tag”格式的标签(可选)
–target设置要构建的目标构建阶段。
–ulimitUlimit选项

docker build 命令详细请参考官方文档

(2).构建centos镜像

下面通过编写Dockerfile文件来制作Centos镜像,并在官方镜像的基础上添加vim和net-tools、nginx工具。首先在/apps/dockfile 目录下新建文件Dockerfile。然后使用上述指令编写该文件。

1.构建步骤
mkdir -p  /apps/dockfile
cd  /apps/dockfile
# 编写Dockerfile
vim  /apps/dockfile/Dockerfile
#构建镜像名称为mycentos:1.0在当前目录下
docker build -t mycentos:1.0 .
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

在这里插入图片描述

在这里插入图片描述

2.验证是否构建成功
docker images
  • 1

在这里插入图片描述

3.查看镜像构建过程
docker history 镜像id
  • 1

在这里插入图片描述

4.进入容器,看看是否能够执行ifconfig 及vim命令
docker run -it mycentos:1.0
  • 1

在这里插入图片描述

五、Docker -导入导出镜像、导入导出容器的命令详解以及使用的场景

1.导出镜像(docker save)与导入镜像(docker load):

这是一对操作,用于处理 Docker 镜像。这个操作会将所有的镜像层以及元数据打包到一个 tar 文件中。然后,你可以使用 docker load 命令将这个 tar 文件导入到任何 Docker 环境中。例如:

1).导出镜像:

docker save -o image.tar <image_id>
  • 1

其中,​image_id​是目标镜像的ID,可以使用 ​docker images​命令查看。
-o 参数表示输出的文件路径和名称,后面紧跟着要保存的镜像名称。例如,docker save -o /data/hello-world1.tar hello-world
在这里插入图片描述

2).导入镜像:

docker load -i image.tar
  • 1

此命令将tar归档文件导入为新的Docker镜像。
-i 参数表示输入的文件路径和名称。例如,docker load -i /data/hello-world.tar
这种方式主要用于分享或迁移整个镜像,包括所有版本、标签和历史。
在这里插入图片描述

2.导出容器(docker export)与导入容器(docker import):

1).导出容器:

使用以下命令将容器导出到文件:

docker export -o container.tar <container_id>
  • 1

其中,​container_id​是目标容器的ID。此命令将容器的文件系统导出到名为 ​container.tar​的文件中。
docker export 命令后直接跟容器的 ID 或名称。例如,docker export mycontainer > /path/to/save/mycontainer.tar
在这里插入图片描述

2).导入容器:

使用以下命令将导出的容器文件导入到新的Docker镜像中:

docker import container.tar <repository>:<tag>
  • 1

其中,​container.tar​是先前导出的容器文件,​​是新镜像的名称,​​是新镜像的标签。

或者,你还可以忽略 ​​和 ​​,这样Docker将自动生成一个唯一的镜像ID:

docker import container.tar
  • 1

这种方式主要用于分享或迁移容器的当前状态。这不包括容器的历史或元数据,如环境变量,所以它常常用于对容器进行快照。
总的来说,如果你想要保存整个镜像,包括它的所有历史和标签,那么你应该使用 docker save 和 docker load命令。而如果你只是想要保存一个容器的当前状态,那么你应该使用 docker export 和 docker import 命令。

docker import 的参数包括输入的文件路径和名称,以及新镜像的名称和标签。例如,docker import /path/to/import/mycontainer.tar newimage:tag

3.四个命令的用法和应用场景

1).案例一

假设你在你的开发环境中创建了一个新的 Docker 镜像,这个镜像包含了你的应用和所有依赖项,你已经测试了这个镜像,并且打了一个标签,称其为 “testapp:1.0”。现在你想要将这个镜像移到生产环境。这个场景中,你应该使用 docker save 和 docker load 命令。具体操作如下:

在开发环境中,你运行 docker save -o testapp_1.0.tar testapp:1.0。这将创建一个名为 “testapp_1.0.tar” 的 tar 文件,其中包含了 “testapp:1.0” 镜像的所有层和元数据。
你可以将这个 tar 文件复制到你的生产环境,然后在那里运行 docker load -i testapp_1.0.tar。这将导入 “testapp:1.0” 镜像,你可以立即在生产环境中使用它。

2).案例二

假设你在容器中运行了一个复杂的数据分析任务,这个任务运行了几个小时后产生了一些结果。你想要保存这个容器的当前状态,以便稍后可以从这个点继续。在这个场景中,你应该使用 docker export 和 docker import 命令。具体操作如下:

你运行 docker export mycontainer > mycontainer.tar,这将创建一个 tar 文件,其中包含了 “mycontainer” 的文件系统。
然后,你可以使用 docker import mycontainer.tar myanalysis:snapshot1 命令,创建一个新的镜像,这个镜像包含了你的容器在任务运行时的状态。你可以在稍后恢复这个镜像,继续你的数据分析任务。
请注意,docker export 和 docker import 命令不会保存或恢复容器的历史或元数据,如环境变量。因此,它们更适合于保存和恢复容器的“快照”,而不是用于迁移或分享镜像。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/80388
推荐阅读
相关标签
  

闽ICP备14008679号