【微服务架构 - Docker】使用Dockerfile定制镜像

简述

Docker 镜像的定制实际上就是定制每一层所添加的配置、文件。我们可以把每一层修改、安装、构建、操作的命令都写入一个脚本,用这个脚本来构建、定制镜像,就可以解决很多类似于无法重复、镜像构建透明性的问题,这个脚本就是 Dockerfile

Dockerfile 是一个文本文件,其内包含了一条条的指令,每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建

本文还是以 tomcat 镜像为基础,通过Dockerfile来定制一个属于自己的 tomcat 镜像

常用Dockerfile命令

命令 作用
FROM 指定基础镜像
RUN 执行命令
COPY 将从构建上下文目录中 源路径 的文件或目录复制到新的一层的镜像内的 目标路径 位置
ADD ADD 指令和 COPY 的格式和性质基本一致,如果 源路径 为一个 tar 压缩文件的话,压缩格式为 gzip, bzip2 以及 xz 的情况下,ADD 指令将会自动解压缩这个压缩文件到 目标路径
CMD 与RUN指令相似,也是执行命令,有shell和exec两种格式
EXPOSE 用于暴露容器运行时的端口号
WORKDIR 指定工作目录(或者称为当前目录),以后各层的当前目录就被改为指定的目录,如该目录不存在,WORKDIR 会帮你建立目录
除了了解一些常用的 Dockerfile 命令之外,还有一点我们需要明白的是 镜像构建上下文(Context)

首先我们要理解 Docker 定制镜像的工作原理。Docker 在运行时分为 Docker 引擎(服务端守护进程)和客户端工具。Docker 的引擎提供了一组 REST API,被称为 Docker Remote API,而像 Docker 命令这样的客户端工具,则是通过这组 API 与 Docker 引擎交互,完成各种操作。因此,虽然表面上我们好像是在本机执行各种 Docker 功能,但是实际上一切都是使用的远程调用形式在服务端完成。

当我们进行镜像构建的时候,并非所有定制都会通过 RUN 指令完成,经常会需要将一些本地文件复制进镜像,比如通过 COPY 指令、ADD 指令等。而 Docker 通过命令构建镜像,其实并非在本地构建,而是在服务端,也就是 Docker 引擎中构建的。

所以,这就需要用户在构建镜像的时候,指定构建镜像上下文的路径,Docker 命令得知这个路径后,会将路径下的所有内容打包,然后上传给 Docker 引擎。这样 Docker 引擎收到这个上下文包后,展开就会获得构建镜像所需的一切文件。

Dockerfile定制镜像

  1. 从docker官网中拉取tomcat镜像
docker pull tomcat
  1. 进入 /usr/local/ 目录下创建文件夹
mkdir -p docker/tomcat
cd docker/tomcat
  1. 书写Dockerfile文件
vi Dockerfile
FROM tomcat
WORKDIR /usr/local/tomcat/webapps/ROOT/
RUN rm -fr *
RUN echo "Hello Docker" > /usr/local/tomcat/webapps/ROOT/index.html
  1. 构建镜像 ( .代表上下文 )
docker build -t mytomcat .

通过上面4个步骤,我们可以通过 docker images 查看本机上的所有镜像,可以发现多了一个 mytomcat 镜像,说明我们 Dockerfile 定制镜像已经成功了!

可以启动这个tomcat看看在构建镜像是写入 Hello Docker 的页面是否存在

docker run -p 8080:8080 mytomcat

猜你喜欢

转载自blog.csdn.net/qq_36525300/article/details/89383996