Dockerfile 案例-自定义的 tomcat9 | 学习笔记

简介: 快速学习 Dockerfile 案例-自定义的 tomcat9

开发者学堂课程【Docker 快速入门:Dockerfile 案例-自定义的 tomcat9】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/616/detail/9411


Dockerfile 案例-自定义的 tomcat9

内容介绍:

一. mkdir-p/zzyyuse/mydockerfile/tomcat9

二. 在上述目录下 touch c.txt

三. 将 jdk 和 tomcat 安装的压缩包拷贝进上一步目录:apache-tomcat-9.0.8.tar.gz   jdk-8u171-linux-x664.tar.gz

四. 在 /zzyyuse/mydockerfile/tomcat9 目录下新建 dockerfile 文件

五. 构建

六. Run

七. 验证

八. 结合前述容器卷将测试的 web 服务 text 发布

 

一.mkdir-p/zzyyuse/mydockerfile/tomcat9

接下来做一个 My tomcat9 或者 my tomcat2018。一个案例把这些全部命令都穿起来。并且在做的过程当中来讲一下 ADD 和 COPY。

第一步输入 mkdir-p/zzyyuse/mydockerfile/tomcat9

Cd /zzyyuse/mydockerfile/tomcat9 是什么意思呢?

zzyy 是自己版的 tomcat9。比方有一些功能需要自己去建,比方现在从阿里云上面取下一个 tomcat,但想修改 tomcat,那么就做自己的版本 tomcat9。

 

二.在上述目录下 touch c.txt

第二步在上述目录下 touch c.txt,输入那么 touch c.txt,言下之意就是在当前路径下建了一个 touch c.txt 文本文件。是为了掩饰 copy,宿主机到容器,容器到宿主机。

image.png

那么就会把这个 touch c.txt 拷贝进容器里面,这个 C 就是 copy 的缩写。没有什么意义,只是为了演示这些功能。

 

三.将 jdk 和 tomcat 安装的压缩包拷贝进上一步目录

第三步将 jdk tomcat9 java8 装进来,那么就相当于输入:cp /opt/apache-tomcat-9.0.8.tar.gz,之后拷贝到当前路径,那么这一步输入 ll,现在在当前路径下面,有两个 jar 包,和一个 c.txt。

回顾一下 Copy,将从构建上下文目录中<源路径>的文件/目录复制到新的一层镜像内。

什么叫上下文?构建上下文目录,那么现在就是在当前这个构建镜像上下路径中,要把宿主机上 C .txt 拷贝进某个容器的路径里面。这就是 copy,就是单纯的一个拷贝。

那么 add 就是拷贝加压缩,现在找了两个解压缩文件,那么这里就有压缩的,也有没压缩的普通文件,同时也是 add 和 copy。

image.png 

 

四.在 /zzyyuse/mydockerfile/tomcat9 目录下新建 dockerfile 文件

接下来编写 dockerfile,输入vim dockerfile。那么这时整个脚本要求能自学并能看懂。

那么现在构建 dockerfile 上下文路径是这个:zzyyuse/mydockerfile/tomcat9。

目前已经有的就是这四个东西:

1. apache -tomcat-9.0.8.tar.gz

2. c.txt

3. Dockerfile

4. Jdk-8u171-linux-x64.tar.gz

Dockerfile 是刚用 vim 建的,那么内容

如图所示:

image.png

把宿主机当前上下门的 c.txt 拷贝到容器 user local 路径下,并重命名为cincontainer.txt,如果不写这个,那么就是 c.txt,写了这个以后,就是拷贝了以后还要给它重命名。

第二个是把 java 与 tomcat 添加到容器中。那么执行到 FROM------centos 这一行, 先加载的最底层是一个 centos,要做自己版的 tomcat9,那么这时 centos 系统上要先装 jdk 再装 tomcat。那么 add 跟 C.txt 一样,也是把宿主机当前上下文的 jdk  apache 添加到容器的 user local 路径下,只不过这个 add 是解压缩以后拷贝。

这个 sentos 是阿里云上取下来的,它天生不带 vim,那么这里又用了 run, Run用到了,add copy form workdir expose 几乎都用到了。

而这个 centos 默认根目录,那么现在让它登陆 user local,然后 Workdir 就是 my path。那么配置 java 与 tomcat 黄金变量,设置 java home ,Class path ,catalina home,就像原来在 linux 里面学的 vr etc profile 配置文件一样,在这个配置文件里写清楚 tomcat 的路径, jdk javahome 的路径,katalina home java home 等等。那么这就是一个配置环境变量,8080 运行端口。

启动时运行 tomcat,那么以下这两个代码注销掉了

ENTRYPOINT{‘’/usr/local/apache-tomcat-9.0.8/bin/starup.sh’’}

CMD{‘’usr/local/apache-tomcat-9.0.8/bin/Catalina.sh’’,’’run’’}

一方面体会 entry point, usr/local/apache-tomcat-9.0.8/bin/starup.sh’ 这种是最标准的写法。那么这种CMD{‘’usr/local/apache-tomcat-9.0.8/bin/Catalina.sh’’,’’run’’}

这是杰森串的写法。

CMD/usr/local/apache-tomcat-9.0.8/bin/starup.sh &&taul-f/usr/local/apache-tomcat-9.0.8/bin/logs/Catalina.out  是什么呢?

cmd 这两个还没执行已经注销掉了,主要是要自己去对比。那么在这里 Catalina,&&f,那么 usr/local/apache-tomcat-9.0.8/bin/logs/Catalina.out 这个是追加在这个 bin 下面 logs 容器里面有 catalina home,tomcat 最后启动以后可以读日志。那么这个就是全部内容。

image.png

回到虚拟机。在这里粘贴以上内容,再保存退出。那么此时在当前路径下面有这四个内容,如图所示:

image.png

把所有的内容都串起来, on build 因为是父子之间,上一轮讲过所以在这里就没有添加,如果想添加也可以。

 

五.构建

目录内容下面就是构建,那么构建怎么写呢?这里有个 dockerfile-t 这时可能会疑惑不是应该写-f吗?

image.png

注意一般 dockerfile 里面,规矩的名字是叫 Dockerfile,当时是为了讲课故意多加了个 F file,告诉这个路径是在哪儿?但是如果就在当前路径下面可以 dockerfile build Dockerfile,这个时候就要命名自己的 tomcat,dockerbuild 以后要 -t,如果没有写这个 F,它默认就会读一个 Dockerfile,所以这个就可以像以前一样不用写。

那么输入 Docker build-tzzyytomcat9 在当前路径下面,按回车,那么这时就各种开始执行,等待它执行完毕。Copy 已经执行了,这里有点卡,为什么呢?

因为一方面要解压缩,另外一方面要拷贝,那么 jdk8 和 tomcat9 稍微还是有点大的。

这里是装了 vim,默认的那个是不带 vim,把它装上,可以看见一堆红色的代码,这些都是警告。33 个选项全部装完了。一切装完以后看 dockerbuild,这个时候没写 -F 了,没写 -F 就说明只要当前路径,下面就有这个 dockerfile,可以直接读 -t加标签和这个名字,那么这里就是 latest,当前每一个蓝色框代表镜像的一层,再逐个加载下来。

接下来,解压缩完拷贝进去,那么开始,直到出现 successfully。尾号是 2dfe,输入 docker images,里面有 zzyytomcat9,尾号是 2dfe,700 多兆,并且是 11 秒前创建的。

 

六.Run

接下来一步是 run。有 dockerfile 有镜像第一步编写完成,第二步是 dockerbuild形成新的镜像,现在这个镜像就叫 zzyytomcat9。那么接下来第三步是 run,那么输入 docker run-it 或者 it 也可以省了,当然要写一个端口映射 -p。

来看重新写的这条命令,不要觉得复杂,这都是之前基础知识的综合运用。不妨先做一下回退,此时写的是什么意思呢?

docker run  zzyytomcat9 是镜像,只要是 tomcat  -d,以前 -it 是有界面交互运行,那么现在把一个 tomcat 服务器启动了以后,不想看前台那么多日志,让后台9080:8080 端口映射 p。

image.png

那么这是第一部分,docker run-d9080:8080 是第二部分,name myt9 这是第三部分。name myt9 让 zzyytomcat9 这个镜像跑起来的容器,不想让 dockerfile 自己分配名字,就叫 myt9。

看着更复杂的应该是这些内容

image.png

那么这个时候可以看到 -v-v,添加了两个容器卷,宿主机的这个目录,跟容器里面的这个目录对应。换句话说第一次讲容器卷是一对一,现在是多对多。

以前是一个宿主机对应一个容器卷,现在是多个宿主机的目录对应着多个容器卷,换句话就是一组或者叫多个一对一。那么这里有个txt,是什么意思呢?tomcat 的webapps 是发布 web 工程的,如果后续这个 test 工程部署在主机这里,也是个test,那么就会自动的共享到容器里面。

那么这个 tomcat 再一跑,在容器里面的 tomcat 就可以跑发布的微服务,跑各种工程。那么来执行下这个命令。Privileged-true 这个就不用多解释了。如果写权限有问题,那么就开 ture,有问题就加没问题,就可以不加。

那么这个时候看 docker ps 当前没在运行任何容器,docker images zzyy tomcat9,就是以下内容:

image.png

 

七.验证

接着按回车,输入 docker ps,可以看到此时 9080 映射到 8080 了,那么接下来这一步要验证,怎么验证呢?后台是 ps 相当于是 linux 的 ps-F 一样,说明以zzyytomcat9 为镜像跑的一个实力容器是 038cad905302,那么它是用 9080 可以访问容器内部的 8080tomcat。

那么搜索 local host :9080 一回车, 妥妥当当 9080 上 tomcat 成功运行,此外再复习一下,-d 是后台启动,那么假设现在就想查查,什么叫查查?因为现在那个镜像文件,根据前面写的这个 cd/zzyy usr/mydockerfile/tomcat9, 再输入 ll,dockerfile 是没问题的。

输入 cat Docker file,工作目录是哪个?是 usr,那么现在输入 dockerps docker exec,记得这个命令吗,相当于在外面直行容器里面可以隔空取物,接着要对 038cad905302 这个容器执行命令,这个容器是 centos tomcat9 jdk8,那么执行 ls-l 命令。

这相当于是执行了 user local 路径下面的命令。如图所示:

image.png

那么 centos, tmp 下面就有这些内容,现在能理解 exec 吗?如果以 run-d 后台方式启动,要想没有前台交互页面了,要想进去看或者在外面执行容器,进入到容器里面去执行某个命令,那就在外面 exec 对哪个容器进行操作,对它进行 ls-l 这样的操作。

接下来再来看,这个验证通过了以后,自己版的 tomcat,自定义的镜像 tomcat 到此完成。

 

八.结合前述的容器卷将测试的 web 服务 text 发布

那么接下来就需要把前面容器卷测试的 web 服务发布到 test 路径下面,这一块怎么怎么看到呢?这个时候看 tomcat9:

image.png

为什么会有这个 test ?主机刚才没有这两个 test 和 tomcat9logs,但是用了容器卷儿,没有就新建一个,那么现在主机上往这个 test 里面添加内容,就会自动的发布到 tomcat 的 webapps 的 test 里面,相当于这个就是个 web 工程,如果一切顺利,一发布了以后将会看到 Test 工程的,比方 spring boot 或者说是 Spring 编写的 web 工程。

自定义 tomcat9 全部的过程和流程就说到这里,

image.png

这个是对现在跑的容器进行操作,输入 java-version,这是个熟悉的命令,因为现在做的这个容器,它运行的是 zzyytomcat9 是 centos jdk8 tomcat9 的结合体。

针对这个容器对 java 返回,那么这个时候一定要注意 exe C 针对于哪个容器去执行什么样的命令,然后直接得到结果。

image.png

相关文章
|
3月前
|
Java 应用服务中间件 Windows
【应用服务 App Service】App Service 中部署Java项目,查看Tomcat配置及上传自定义版本
【应用服务 App Service】App Service 中部署Java项目,查看Tomcat配置及上传自定义版本
|
3月前
|
应用服务中间件 Linux iOS开发
使用 setenv 配置文件管理 Tomcat 的自定义环境变量
【8月更文挑战第29天】通过在Tomcat安装目录的`bin`文件夹下创建`setenv.sh`或`setenv.bat`文件,可以轻松管理Tomcat的自定义环境变量。针对Linux/macOS系统,需编辑`setenv.sh`文件,如`export MY_CUSTOM_VAR=&quot;my custom value&quot;`;而在Windows系统中,则编辑`setenv.bat`,如`set MY_CUSTOM_VAR=my custom value`。
154 1
|
3月前
|
Java 应用服务中间件 Windows
【App Service for Windows】为 App Service 配置自定义 Tomcat 环境
【App Service for Windows】为 App Service 配置自定义 Tomcat 环境
|
3月前
|
Java 应用服务中间件 Windows
【Azure 应用服务】App Service for Windows 环境中为Tomcat自定义4xx/5xx页面
【Azure 应用服务】App Service for Windows 环境中为Tomcat自定义4xx/5xx页面
|
4月前
|
Java 应用服务中间件 Shell
|
Java 应用服务中间件 Docker
【docker】DockerFile制作tomcat镜像并发布镜像到DockerHub
【docker】DockerFile制作tomcat镜像并发布镜像到DockerHub
|
Java 应用服务中间件 Docker
Docker从入门到精通——实战Dockerfile构建Tomcat镜像
Docker从入门到精通——实战Dockerfile构建Tomcat镜像
326 0
|
Java 应用服务中间件 Docker
Docker Review - dockerfile 实战_使用dockerfile制作tomcat镜像
Docker Review - dockerfile 实战_使用dockerfile制作tomcat镜像
124 0
|
Java 应用服务中间件 网络安全
五、使用Dockerfile自定义Tomcat镜像
五、使用Dockerfile自定义Tomcat镜像
|
应用服务中间件 Linux Docker
Docker系列(4)--Docker上基于Centos部署自定义Tomcat环境
Docker系列(4)--Docker上基于Centos部署自定义Tomcat环境
177 0