创建Docker镜像有几种方式

创建Docker镜像有2种方式:1、使用“docker commit”命令基于已有容器手动构建镜像;2、使用Dockerfile自动构建镜像,Docker程序会通过读取Dockerfile构建文件中的指令自动生成镜像。

创建Docker镜像有几种方式插图

本教程操作环境:linux5.9.8系统、docker-1.13.1版、Dell G3电脑。

有时候从Docker镜像仓库中下载的镜像不能满足要求,我们可以基于一个基础镜像构建一个自己的镜像.

镜像构建介绍

在什么情况下我们需要自己构建镜像那?

(1)当我们找不到现有的镜像,比如自己开发的应用程序

(2)需要在镜像中加入特定的功能

docker构建镜像有两种方式:docker commit命令与Dockerfile构建文件

docker commit构建镜像

基于已有容器构建镜像主要是通过docker commit命令来构建新的镜像。

dockercommit构建进行主要有三步:

  • 运行容器
  • 修改容器
  • 将容器保存为新的镜像

比如在centos镜像中安装vim编辑器并存为新的镜像

(1)运行容器

1

2

3

4

5

6

[root@ken1 docker]# docker run -it centos

Unable to find image 'centos:latest' locally

latest: Pulling from library/centos

a02a4930cb5d: Pull complete

Digest: sha256:184e5f35598e333bfa7de10d8fb1cebb5ee4df5bc0f970bf2b1e7c7345136426

Status: Downloaded newer image for centos:latest

(2)安装vim编辑器

vim编辑器确认没有安装

1

2

[root@69f501e858a6 /]# vim

bash: vim: command not found

进行安装

1

[root@69f501e858a6 /]# yum install vim -y

(3)保存为新得镜像

首先查看当前运行的镜像

1

2

3

[root@ken1 ~]# docker ps

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

69f501e858a6        centos              "/bin/bash"         2 minutes ago       Up 2 minutes                            quizzical_torvalds

使用commit存为新的镜像

1

2

[root@ken1 ~]# docker commit 69f501e858a6 centos-vim

sha256:42083b89a179368bc29a8f40d14f8824990183c8e4b28fd84411d440c26342e5

69f501e858a6是运行容器的ID使用name下面的名称也行
centos-vim是新镜像的名字

查看一下是否有了centos-vim镜像

创建Docker镜像有几种方式插图1创建Docker镜像有几种方式插图2

重新启动新的镜像,验证是否可以使用vim编辑器

可以发现新的镜像可以使用vim编辑器了

1

2

3

[root@ken1 ~]# docker run -it centos-vim

[root@61d090898bad /]# vim

[root@61d090898bad /]# vim test

上面演示了如何使用commit创建新的镜像,但是docker并不建议使用这种方式创建镜像,原因如下:

  • 这是一种手工创建镜像的方式,容器出错,而且效率低且可重复性弱
  • 更重要的是。使用者并不知道镜像是如何创建出来的。里面是否有恶意程序

Dockerfile构建镜像

Dockerfile是由一组指令组成的文件,其每条指令对应Linux中的一条命令,Docker程序通过读取Dockerfile中的指令最终生成镜像。

第一个Dockerfike

第一步:创建一个新的目录

1

[root@ken1 ~]# mkdir /test

第二步:编写Dockerfile

名称就叫Dockerfile,且第一个D需要大写

1

2

3

[root@ken1 ~]# cat Dockerfile

FROM centos

RUN yum install vim -y

FROMcentos表示使用centos这个基础镜像

RUN表示在centos上安装vim编辑器

第三步:构建镜像

1

[root@ken1 ~]# docker build -t centos-vim2 .

-t后面指定新的镜像的标签名(tag)

. 最后的一个点指明docker context为当前目录。docker默认会从build context中查找 Dockerfile文件,我们也可以通过-f参数指定Dockerfile的位置

第四步:查看镜像

创建Docker镜像有几种方式插图3创建Docker镜像有几种方式插图4

查看镜像分层结构

创建Docker镜像有几种方式插图5创建Docker镜像有几种方式插图6

docker history会显示镜像的构建历史,也就是Dockerfile的执行过程。

Dcokerfile常用指令

  1.FROM

指定base镜像

  2. MAINTAINER

设置镜像的作者。可以是任意的字符

  3.COPY

将文件从build context复制到镜像

COPY支持两种格式:COPY src dest 和 COPY [“src”,”dest”]

注意:src只能制动build context中的文件或目录即在和Dockerfile同目录下才可以

  4.ADD

与COPY类似,从build context复制文件到镜像。

不同的是,如果src是归档文件(tar,zip,tgz,xz),文件会被自动接要到dest

  5.ENV

设置环境变量,环境变量可被后面的指令使用,例如:

ENV name ken RUN echo $name

  6.EXPOSE

指定容器中的进程会监听某个端口,Docker可以将该端口暴露出来

  7.VOLUME

将文件或目录声明为volume

  8.WORKDIR

为后面的RUN,ENTRYPINT,ADD,COPY指令设置镜像中的当前工作目录

  9.RUN

在容器中运行指定的命令

  10.CMD

容器启动时运行指定的命令

dockerfile中可以多个CMD指令,但是只要最后一个生效。CMD可以被docker run之后的参数替换

  11.ENTRYPOINT

设置容器启东市的命令

dockerfile中可以有多个ENTRYPOINT,但是只有最后一个生效。

CMD或者docker run之后的参数会被当做参数传递给ENTERYPOINT.

Dockerfile演示

下面演示一个比较全面的dockerfile

1

2

3

4

5

6

7

8

9

[root@ken1 test]# cat Dockerfile

#my Dockerfile

FROM busybox

MAINTAINER ken

WORKDIR /ken

RUN touch test

COPY ["ken1","."]

ADD ["wordpress.tar.gz","."]

ENV name "ken"

注意:Dockerfile支持以#开头的注释

构建镜像

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

[root@ken1 test]# docker build -t myimage .

Sending build context to Docker daemon  4.281MB

Step 1/7 : FROM busybox

 ---> 3a093384ac30

Step 2/7 : MAINTAINER ken

 ---> Running in 2a73a83507ce

Removing intermediate container 2a73a83507ce

 ---> 8c3df9b3d823

Step 3/7 : WORKDIR /ken

 ---> Running in 31c6f9fe2195

Removing intermediate container 31c6f9fe2195

 ---> a458cf986072

Step 4/7 : RUN touch test

 ---> Running in e1b08ebd363c

Removing intermediate container e1b08ebd363c

 ---> 41601920009a

Step 5/7 : COPY ["ken1","."]

 ---> 2ebfa0933fca

Step 6/7 : ADD ["wordpress.tar.gz","."]

 ---> d0ad29d3aa34

Step 7/7 : ENV name "ken"

 ---> Running in fceae6e20e63

Removing intermediate container fceae6e20e63

 ---> 7efe0600e48f

Successfully built 7efe0600e48f

Successfully tagged myimage:latest

查看镜像

创建Docker镜像有几种方式插图7创建Docker镜像有几种方式插图8

运行该镜像

1

2

3

4

5

[root@ken1 test]# docker run -it myimage

/ken # ls

ken1       test       wordpress

/ken # echo $name

ken

  • 可以发现当前工作目录为/ken,且自动创建
  • ken1是我们从docker context目录中复制过去的
  • test是使用touch创建的
  • wordpres压缩包已经被自动解压
  • $name为变量值为ken

版权声明:本文采用知识共享 署名4.0国际许可协议BY-NC-SA 进行授权
文章作者:jiuhucn
文章链接:https://www.jiuhucn.com/2022/03/27/2014.html
免责声明:本站为资源分享站,所有资源信息均来自网络,您必须在下载后的24个小时之内从您的电脑中彻底删除上述内容;版权争议与本站无关,所有资源仅供学习参考研究目的,如果您访问和下载此文件,表示您同意只将此文件用于参考、学习而非其他用途,否则一切后果请您自行承担,如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
本站为非盈利性站点,并不贩卖软件,不存在任何商业目的及用途,网站会员捐赠是您喜欢本站而产生的赞助支持行为,仅为维持服务器的开支与维护,全凭自愿无任何强求。

THE END
分享
二维码
打赏
< <上一篇
下一篇>>