docker——使用 Dockerfile 定制镜像

镜像的定制实际上就是定制每一层所添加的配置、文件。如果我们可以把每一层修改、安装、构建、操作的命令都写入一个脚本,用这个脚本来构建、定制镜像,这个脚本就是 Dockerfile。
Dockerfile 是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。
首先,在/usr/local/目录下创建一个docker目录,再在docker目录下创建一个tomcat目录,接着创建一个Dockerfile文件。

Dockerfile文件的内容如下:

FROM tomcat
workdir /usr/local/tomcat/webapps/ROOT
RUN rm -rf *
RUN echo "hello docker" > ./index.html

FROM 指定基础镜像,所谓定制镜像,那一定是以一个镜像为基础,在其上进行定制。而 FROM 就是指定基础镜像,因此一个 Dockerfile 中 FROM 是必备的指令,并且必须是第一条指令。
RUN 指令是用来执行命令行命令的。由于命令行的强大能力,RUN 指令在定制镜像时是最常用的指令之一。我们可以用RUN来执行shell命令。
workdir是用来指定当前的工作目录的,上面指定了我们工作的目录为镜像的/usr/local/tomcat/webapps/ROOT目录。

接着构建镜像

docker build -t mytomcat .

.代表当前目录,指的是上下文的目录。所谓上下文目录跟当前主机是没有任何关系的,只是跟打包上去的文件夹有关。build命令将Dockerfile文件夹打包到service端,然后在service端再解压,上下文指的就是这个文件夹,但是这个文件夹已经跟原本的client端没有任何关系。
如果在 Dockerfile 中这么写:

COPY ./package.json /app/

这并不是要复制执行 docker build 命令所在的目录下的 package.json,也不是复制 Dockerfile 所在目录下的 package.json,而是复制 上下文(context) 目录下的 package.json。

因此,COPY 这类指令中的源文件的路径都是相对路径。这也是初学者经常会问的为什么 COPY …/package.json /app 或者 COPY /opt/xxxx /app 无法工作的原因,因为这些路径已经超出了上下文的范围,Docker 引擎无法获得这些位置的文件。如果真的需要那些文件,应该将它们复制到上下文目录中去。
在这里插入图片描述启动镜像:

docker run -p 8080:8080 mytomcat;

-p使用来指定端口映射,左边是宿主机的端口,右边是容器的端口。
在这里插入图片描述
访问浏览器,可以发现镜像tomcat镜像被我们修改了。
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章