当前位置:首页 > 技术文章 > 正文内容

Linux环境通过Dockerfile创建Tomcat镜像

arlanguage3个月前 (01-29)技术文章25

简介: Docker通过读取Dockerfile里面的内容可以自动创建镜像(image),Dockerfile有自己书写格式和支持的命令,Docker程序解决这些命令间的依赖关系。Docker程序将读取Dockerfile,根据指令生成定制的image。Dockerfile是一个包含了build过程中需要执行的所有命令的文本文件。也可以理解为Dockfile是一种被Docker程序解释的脚本,由一条一条的指令组成,每条指令对应Linux系统下面的一条命令,由Docker程序将这些Dockerfile指令翻译成真正的Linux命令。相比image这种黑盒子,Dockerfile这种显而易见的脚本更容易被使用者接受,直观明确的表明image是怎么产生的。有了Dockerfile,当需要定制个性化的需求时,只需在Dockerfile上添加或者修改指令,重新生成image即可,省去了不断输入命令的麻烦。

本文将通过Dockerfile容器文件创建Tomcat镜像,Tomcat是一个中间件,在B/S架构中,浏览器发出的http请求经过Tomcat中间件,将动态资源(而apache和nginx处理的是静态资源)转发到最终的目的服务器上,响应消息再通过Tomcat返回给浏览器。

详细内容请参考下文。

一、Dockerfile格式

1、Dockerfile格式

2、Dockerfile编写规则

说明:Dockerfile的指令是忽略大小写的,建议使用大写,使用#作为注释,每一行只支持一条指令,每条指令可以携带多个参数。

Dockerfile的指令根据作用可以分为两种:构建指令和设置指令。构建指令用于构建镜像(image),其指定的操作不会在运行镜像(image)的容器上执行;而设置指令则用于设置镜像(image)的属性,其指定的操作将在运行镜像(image)的容器中执行。

二、Dockerfile构建Tomcat镜像

1、准备阶段

(1)、登录Linux

(2)、创建Tomcat的dockerfile目录

2、构建阶段

(1)、查看docker的运行情况

执行指令# systemctl status docker

备注:Docker运行状态为active (running),说明Docker已经安装并正常运行。

(2)、pull docker镜像

执行指令# docker pull centos:7.6.1810

(3)、下载Tomcat&JDK安装包

(4)、上传Tomcat&JDK安装包到创建的目录下

(5)、编写Dockerfile文件

#基础镜像

FROM centos:7.6.1810

#作者名称

LABEL maintainer="JasonTang"

ENV REFRESHED_AT 2024-02-26

#切换镜像目录,进入/usr目录

WORKDIR /usr

#在/usr/下创建jdk目录,用来存放jdk文件

RUN mkdir jdk

#在/usr/下创建tomcat目录,用来存放tomcat

RUN mkdir tomcat

#将宿主机的jdk目录下的文件拷至镜像的/usr/jdk目录下

ADD jdk1.8.0_401 /usr/jdk/

#将宿主机的tomcat目录下的文件拷至镜像的/usr/tomcat目录下

ADD apache-tomcat-8.5.59 /usr/tomcat/

#设置环境变量

ENV JAVA_HOME=/usr/jdk

ENV JRE_HOME=$JAVA_HOME/jre

ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH

ENV PATH=/sbin:$JAVA_HOME/bin:$PATH

#设置权限

RUN chmod -R 777 /usr/tomcat/bin/

RUN chmod -R 777 /usr/jdk/

#公开端口

EXPOSE 8080

#设置启动命令

ENTRYPOINT ["/usr/tomcat/bin/catalina.sh","run"]

(6)、通过docker命令构建镜像

执行指令# docker build -t tomcat:v2 .构建tomcat镜像

备注:执行指令后有镜像id显示,表示指令执行成功。

(7)、查看生成的镜像

执行指令# docker images

(8)、通过创建好的镜像启动一个容器

执行指令# docker run -dit -p 8080:8080 --name tomcat tomcat:v2

(9)、查看刚生成的容器

执行指令# docker ps -a

(10)、访问页面

执行指令# curl 本机IP地址

终端计算机浏览器访问

三、Docker启动后的错误信息及其解决办法

说明:通过镜像创建容器后,有时会出现Exited (126)或者Exited (127)的错误信息。

1、Exited (126)

说明:一般情况下,出现Exited (126)错误信息是由于JDK版本的问题,这个可以通过执行下列指令

# docker logs [容器ID] 查看启动过程的报错信息。

备注:通过查询,发现是由于JDK是32位版本,需要更换为64位的版本。

2、Exited (127)

说明:而出现Exited (127)错误信息情况是由于容器里头的目录及其以下文件没有对应权限,这个需要执行下列指令

先查询报错信息:

#docker logs [容器ID] 查看启动过程的报错信息。

再通过修改Dockfile文件执行授权指令:

然后执行

#docker rm [容器ID]删除容器

#docker rmi [镜像ID]删除镜像

再根据新的Dockerfile重新生成镜像

# docker build -t tomcat:v2 .

# docker run -dit -p 8080:8080 --name tomcat tomcat:v2

扫描二维码推送至手机访问。

版权声明:本文由AR编程网发布,如需转载请注明出处。

本文链接:http://www.arlanguage.com/post/1175.html

分享给朋友:

“Linux环境通过Dockerfile创建Tomcat镜像” 的相关文章

Nginx 在微服务中的应用(9)

在微服务架构中,Nginx 通常作为反向代理服务器、负载均衡器和 API 网关,承担着多个关键角色。它可以帮助管理微服务之间的流量,确保请求的高效路由、负载均衡、流量控制、安全防护等。Nginx 由于其高性能、轻量级和配置灵活性,成为微服务架构中非常常见的组件。以下是 Nginx 在微服务中的几种主...

一文说清nginx规则匹配(含案例分析)

概述: 在nginx中,匹配分很多情形,例如:区分大小写匹配、不区分大小写匹配、有强匹配开头、有模糊匹配某些字符、有匹配后重写动作、有匹配反向代理动作、有匹配后终止操作、还有匹配全局变量类型等等,在很多情形中,匹配动作也存在优先策略,来看看下面的案例。案例一、 server { .............

使用nginx对视频、音频、图片等静态资源网址,加token签权

目前很多静态资源,都可以无权限验证,进行访问或转发,对有价值的资源进行签权,限制转发无法在代码中实现拦截,我们可以使用nginx对视频、音频、图片等静态资源网址,加token签权如:http://192.168.1.22/123.mp3http://192.168.1.22/123.m3u8http...

Nginx如何实现四层负载均衡

静态负载均衡Nginx的四层静态负载均衡需要启用ngx_stream_core_module模块,默认情况下,ngx_stream_core_module是没有启用的,需要在安装Nginx时,添加--with-stream配置参数启用,如下所示。./configure --prefix=/usr/l...

解决Apache 2.4+PHP5.6不支持CURL

跑一个demo,突然发现,服务器上最普通的Apache 2.4+PHP5.6组合,不支持curl,报告没有curl_init函数;而php.ini里面已经打开了php_curl.dll,而且php -i的输出是正常的,说明curl是可以执行的。折腾了半天百思不得其解,最后索性把php5.6、apac...

「每天一道面试题」Nginx 502错误原因和解决方法

Nginx 502错误原因和解决方法不管你是做运维还是做开发,哪怕你是游客,时不时会遇到 502 Bad Gateway 或 504 Gateway Time-out。出现这页面,把服务重启下,再实在不行重启下服务器,问题就解决了,特殊情况请继续阅读。状态码解释502 Bad Gateway:作为网...