对于docker用户来说,最好的情况是不需要自己创建镜像,几乎所有的常用的数据库、中间件、应用软件等都有现成的docker官方镜像或其他人和组织创建的镜像,我们只需要稍微配置就可以直接使用。 但是在某些情况下,也需要自己构建镜像。 比如: 1、找不到现成的镜像,比如自己开发应用程序 2、需要在镜像中加入特定的功能。 docker提供了两种构建镜像的方法:docker commit命令和Dockerfile构建文件。
docker commit
docker commit命令式创建镜像最直观的方法,其过程包含3个步骤 1、运行容器 2、修改容器 3、将容器保存为新的镜像 比如: 在Ubuntu base镜像中安装vi并保存为新镜像 (1)运行容器 -it 参数的作用式以交互的模式进入容器,并打开终端。 2b1763cc8299就是容器内部的ID (2)安装vim 确认vim没有安装 安装vim,如下所示: (3)保存为新镜像 在新窗口中查看当前运行的容器 distracter_chaum是Docker为我们的容器随机分配的名字 执行docker commit命令将容器保存为镜像 新镜像命名为ubuntu-with-vim 查看新镜像的属性,如下所示: 可以看到新镜像因为安装了vim软件而变大了 从新镜像启动容器,验证vim已经可以使用
虽然我们可以使用docker commit创建新镜像,但是docker不建议用户使用这种方式构建镜像。原因如下: 1、该方式是手工创建镜像的方式了,容易出错,效率低可重复性弱 2、无法对镜像进行审计,存在安全隐患
Dockerfile
Dockerfile是一个文本文件,记录了镜像构建的所有步骤
第一个Dockerfile
新建一个文本文件Dockerfile,内容如下: 以下为运行docker build命令构建镜像并详细分析细节
[root@docker-1 ~]# docker build -t ubuntu-with-vim-dockerfile . (1)
Sending build context to Docker daemon 13.31kB (2)
Step 1/2 : FROM ubuntu (3)
---> a2a15febcdf3
Step 2/2 : RUN apt-get update && apt-get install -y vim (4)
---> Running in ad7fa94cfb94 (5)
Successfully built ad7fa94cfb94 (6)
Successfully tagged ubuntu-with-vim-dockerfile:latest (7)
说明:
1、运行docker build命令,-t将新镜像命名为ubuntu-with-vim-dockerfile 命令末尾的.指明build context为当前目录。Docker默认会从build context中查找Dockerfile文件,
也可以通过-f参数指定Dockerfile文件的位置
2、镜像构造过程。首先Docker将build context中的文件发送给Docker daemon,bulid context为镜像构建提供所需要的文件或目标。Dockerfile中的ADD,COPY命令可以将build context中的文件添加到镜像,此例中,bulid context为当前目录.root,该目录下的所有文件和子目录都会被发送给Docker daemon。注意不要将多余文件放到bulid context,特别不要把/,/usr作为bulid context,否则构建过程中会相当的缓慢甚至失败
3、Step1,执行FROM,将Ubuntu作为base镜像,镜像ID为a2a15febcdf3
4、Step2,执行RUN,安装vim
5、启动临时容器,在容器中通过apt-get安装vim
6、安装完成后,将容器保存为镜像,其ID为ad7fa94cfb94
该步骤底层使用类似docker commit的命令
7、镜像构建成功
通过docker images查看镜像信息