Docker和DevOps:3.构建自己的镜像的两种方式

131 阅读3分钟

构建自己的镜像的两种方式

一、构建镜像的两种方式

  • 1.基于某个Image(镜像)创建一个Container(容器),在这个容器中安装某些软件,然后通过docker container commit命令将这个改变的容器commit成一个新的镜像。
  • 2.通过Dockerfile构建镜像。

二、方式1:使用docker commit命令将容器commit成镜像

目标:基于ubuntu:14.04镜像(image)创建一个容器(container),然后在这个容器中安装Vim,再构建一个安装了Vim的镜像ubuntu_vim。

1.基于ubuntu:14.04创建容器

在这里插入图片描述

2.在容器中安装vim

执行以下命令安装vim

sudo apt-get update
sudo apt-get install vim

在这里插入图片描述

3.退出当前容器

当前容器就已经安装好了Vim了,执行exit退出当前容器。
在这里插入图片描述

4.查看刚刚退出的容器

在这里插入图片描述

5.使用docker commit命令将容器commit成镜像
docker commit 容器的NAME 新镜像的名字 

执行以上命令即可将容器commit成一个新的镜像
在这里插入图片描述

6.查看新镜像

可以看到新镜像因为包含了vim,所以大小是有变化。
在这里插入图片描述


三、方式2:通过Dockerfile构建镜像

目标:编写Dockerfile,包含基于ubuntu:14.04和执行安装vim的命令等信息,通过这个Dockerfil构建一个安装了Vim的镜像ubuntu_vim_dockerfile。

1.新建Dockerfile
FROM ubuntu:14.04
RUN sudo apt-get update
RUN sudo apt-get install -y vim
2.通过Dockerfile构建镜像

执行命令开始构建镜像。

docker build -t ubuntu_vim_dockerfile .

在这里插入图片描述

3.查看新镜像

在这里插入图片描述


四、两种方式的推荐

  • 第一种通过将容器commit成镜像的方式不推荐,因为是不安全的,发布的镜像很有可能是别人恶意安装其他软件后的镜像。
  • 建议使用Dockerfile的方式构建镜像,这样不仅安全,并且只需要共享此Dockerfile文件即可共享此镜像。

五、Dockerfile构建镜像过程中的思考

之前讲过Image(镜像)是可读不可写的,但是Dockerfile中第一行是基于ubuntu:14.04这个镜像,之后又在这个镜像的基础上安装了Vim,那Image到底是不是不可改变的呢?

  • 注意下构建镜像开始时:
    Running in xxxx就代表创建了一个基于ubuntu:14.04创建了一个临时容器,xxxx就是容器ID,之后的命令都跑在这个临时容器中。
    在这里插入图片描述
  • 构建结束时,将这个临时容器删除掉了。
    在这里插入图片描述