开发者学堂课程【Docker 快速入门:DockerFile 案例-自定义的 tomcat9】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/850/detail/14050
DockerFile 案例-自定义的 tomcat9
内容介绍
一、自定义的 tomcat9
一、自定义的 tomcat9
登录 docker hub 网站,搜索 tomcat,随便找一个8.5.3,过程写得复杂与否,关键词,保留字指令应该可以懂了
&&为连接符,这些不是 docker HUB 的,是 linux 脚本里面的,所以如果以后要进行编写,就要根据前面所讲的模版。
自定义镜像 tomcat9
做 my tomcat 9.0,或者 my tomcat 2018,一个案例把这些命令都穿起来,做的过程中讲解一下 add 和 copy。
1.mkdir -p /zzyyuse/mydockerfile/tomcat9
zzyyuse 自己版的 tomcat9,比方说有些功能需要自己去建,比方说现在从阿里云上面拖下来一个 tomcat,像改车一样奥拓变奥迪,做自己版本的 tomcat 9。
2.在上述目录下 touch c.txt
在当前路径下,建立一个 c.txt 文件是为了演示 copy,Copy 是宿主机,倒容器,容器到宿主机,会把 c.txt 拷贝到容器里面,c 是 copy 的缩写,没有什么意义,纯粹是是为了演示一些功能。
3.将 jdk(jdk-8u171-linux-x64.tar.gz) 和 tomcat(apache-tomcat-9.0.8.tar.gz)安装的压缩包拷贝进上一步目录
在当前路径下面有两个夹包和一个 c.txt
回顾一下 copy,copy 类似 ADD,拷贝文件和目录到镜像中。将从构建上下文目录中<源路径>的文件/目录复制到新的一层的镜像内的<目标路径>位。把宿主机的c.txt 拷贝进某个容器的路径里面。ADD 是将宿主机目录下的文件拷贝进镜像且 ADD 命令会自动处理 uRL 和解压 tar 压缩包。
4.在 /zzyyuse/mydockerfile/tomcat9 目录下新建 Dockerfile 文件
这个时候要求同学们已学脚本并能看懂,如下为构建 docker file 的上下文路径。
Docker file 是刚才用 vim 建的,具体内容如下:
FROM centos(加载的最底层)
MAINTAINER zzyy<zzyybs@126.com>
#把宿主机当前上下文的 c.txt 拷贝到容器 /usr/ local/ 路径下
COPY c.txt /usr/ local/cincontainer.txt(拷贝后重命名)
#把 java 与 tomcat 添加到容器中
ADD jdk-8u171-linux-x64.tar.gz /usr/ local/
ADD apache-tomcat-9.0.8.tar.gz /usr/ local/
#安装 vim 编辑器
RUN yum -y install vim
#设置工作访问时候的 WORKDIR 路径,登录落脚点
ENV MYPATH /usr/ local
WORKDIR $MYPATH
#配置 java 与 tomcat 环境变量
ENV JAVA_HOME /usr/ local/jdk1.8.0_171
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/ local/apache-tomcat-9.0.8
ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.8
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
(类似于原来在 linux 里面学的 VIETCProfile 文件,文件里面写清楚 tomcat 路径)
#容器运行时监听的端口
EXPOSE 8080(运行端口)
#启动时运行 tomcat
#ENTRYPOINT ["/usr/local/apache-tomcat-9.0.8/bin/startup.sh"](标准写法)
# CMD ["/usr/local/apache-tomcat-9.0.8/bin/catalina.sh" , "run"](jason串写法)
GMD /usr/local/apache-tomcat-9.0.8/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.8/bin/logs/catalina.out
现在想做自己版本的 tomcat 9,Centos 系统上,先安装 jdk,再安装 tomcat,Add 和 c.txt 一样,都是把宿主机当前上下文的 jdk 和 Apache,添加到容器user local 路径下,只不过这个 add 的是解压缩以后的拷贝,这个 centos 是从阿里云上面拉下来的, 它天生不带 vim,所以后面运用了 run。这个 centos 默认为根目录,现在让其登录 user local,WorkDIR 就是 mypath。
5.构建
在当前路径下,可以命名自己的 tomcat,输入 Docker build dockerfile,如果没有默认写 -f,就会默认读 dockerfile,所以可以和以前一样不用写,和以前不一样,就不用写。输入了 docker build-t zztyytomcat 9,回车开始执行。
Copy 执行后有一点卡,是因为一方面要解压缩,另一方面要拷贝,Jd k8和他们tomcat9 都是比较大的,默认是不带 vim,红色的文字都是警告,33个选项都装完以后就可以了。装完以后,Docker build 后面没有写 -f了 ,没有 -f 说明只要单迁入机下面就有 Dockerfile 直接读,-t 加标签和名字,每一个蓝色框代表一层镜像。输入 docker images,会出现 zzyytomcat 9,大小为700多兆,11秒前刚刚创建。
6.run
有镜像 docker file,第一步编写完成,第二部是 dockerbuild形成新的镜像,现在的镜像名字为 zzyytomcat9,第三步是 run,不是像想象的那样 docker run-p 写一个端口映射这样简单。
应该改输入以下内容
docker run -d -p 9080:8080 --name myt9 -v /zzyyuse/mydockerfile/tomcat9/test:/usr/local/apache-tomcat-9.0.8/webapps/test -v /zzyyuse/mydockerfile/tomcat9/tomcat9logs/:/usr/local/apache-tomcat-9.0.8/logs --privileged-true zzyytomcat9
docker run -d -p 9080:8080 --name myt9
zzyytomcat9
现在把 tomcat 9 启动以后,不想看到前台很多日志出来,9080和8080是端口映射,docker run -d 为第一部分,-p 9080:8080 为第二部分,--name myt9
为第三部分,--name myt9 让 zzyytomcat9 跑起来的容器不想让 docker,自己分配名字,所以叫 my t9,-v 是添加了两个容器,宿主机的目录和容器里面的对应,之前是一对一,现在是多对多,之前是一个宿主机,对应一个容器卷,现在是多个宿主机的目录,对应多个容器卷,换句话说是多个一对一,Test 的意思是到后期test 部署在主机上也是一个 test,自动的共享到容器里面,Tomcat 再一跑动,在容器里面的 tomcat 就可以跑发布的微服务。
--privileged=true 如果写权限不够的话会出错,有问题可以加,没问题可以不加。
7.验证
此时9080映射到8080了,为 zzyytomcat9 为镜像跑的实例容器为038cad905302,可以使用9080访问容器内部的8080。浏览器访问9080,9080端口上tomcat成功运行。根据前面所写,现在的镜像文件,输入 cat docker file,现在的工作目录是user/local。
这串代码的意思是相当于在外部容器里面,可以隔空取物,这个容器是 centos9 加Jdk8,执行 ls-l 命令,这就相当于在执行 user log 命令下面执行命令。
如果 run-d 后台方式启动,没有前台交互页面,想要进去看,或者说是在容器外面执行容器里面,去执行某个命令。验证通过以后,自己版本的 tomcat9 到此完成。
8.结合前述的容器卷将测试的 web 服务 test 发布
主机刚刚没有 test 和 tomcat 9,但是用的容器卷,没有就新建,主机上往 test 里面添加内容,会自动发布到 tomcat webapps 的 test 里面。
因为现在做的这个容器,它运行的是 zzyytomcat 9 和 jdk8 的结合体,这时候针对这个容器使用 java 会返回,直接得到结果。