Docker操作(六):(用Dockerfile实现) tomcat中部署jforum应用,连接mysql数据库

目录

1. 设计要求

2. 操作步骤

2.1 新建tomcat的Dockerfile,创建新镜像jforum/tomcat,用新镜像创建容器,配置

2.2 新建mysql的Dockerfile,创建新镜像jforum/mysql, 用新镜像创建容器,配置

2.3 重启tomcat容器,在浏览器端访问jforum网页

3. 补充知识点


【写在前面】

在前文中通过命令逐步实现过该操作, 这里在学了Dockerfile之后,尝试用Dockerfile来实现。

前文参考:Docker操作(四):tomcat中部署jforum应用,连接mysql数据库

1. 设计要求

 

2. 操作步骤

2.1 新建tomcat的Dockerfile,创建新镜像jforum/tomcat,用新镜像创建容器,配置

(1)将要放到tomcat容器的war包放到文件夹jforum_tomcat下(文件夹下不要有其他无关的文件,因为最终都会被加载到新镜像里)

(2)在文件夹jforum_tomcat下,vim创建Dockerfile文件(名字就是Dockerfile)

注:在Dockerfile中利用参数,将宿主机上的目录或文件拷贝到镜像中(会自动解压)

(3)创建新镜像:docker build -t 新镜像名 .

(4)生成了新镜像,用新镜像启动新容器

 (5)将需要修改的配置文件从容器中拷贝到宿主服务器,进行修改,然后重新拷贝回容器中,覆盖旧的配置文件 (因为上面创建容器是没有使用数据卷,所以这里只能通过cp命令拷贝修改)

 

2.2 新建mysql的Dockerfile,创建新镜像jforum/mysql, 用新镜像创建容器,配置

(1)新建一个文件夹jforum_mysql,存放:jforum.sql

(2)在文件夹jforum_mysql中,新建 create.sql 脚本

create.sql脚本的作用:在登录MySQL后,操作数据库相关的命令,比如新建数据库,授权,导入jforum.sql库表等。

(3)在文件夹jforum_mysql中,新建 setup.sh 脚本

setup.sh脚本的作用:用于启动mysql服务,然后导入脚本create.sql进而对数据库进行具体操作。

(4)在文件夹jforum_mysql中,新建 Dockerfile

Dockerfile中导入上面几个脚本和数据库资源文件,然后运行相关脚本

 

(5)创建新镜像:docker build -t 新镜像名 .

(6)生成了新镜像,用新镜像启动新容器

 

 

2.3 重启tomcat容器,在浏览器端访问jforum网页

命令:docker restart jforum_tomcat1

网址: http://IP:tomcat端口/jforum-2.1.9/forums/list.page 

3. 补充知识点

(1)docker history 镜像名:查看镜像的详细构建信息/过程

(2)一般不在Dockerfile里进行解压命令,因为解压文件名不可控。都是解压好并改好名字后,再建Dockerfile。 比如上文例子中的tomcat9。

(3)手动生成tomcat镜像时,docker run 命令行中的 - -privileged=true是给予管理员权限,/usr/sbin/init是给超级管理员用的。

(4)因为Dockerfile里无法执行mysql相关的命令,所以:需要把mysql内部运行相关的命令,比如导入source.sql库信息,授权信息等,写到一个.sql脚本中。

然后,把mysql操作相关的命令的脚本.sql(如登录,加载数据文件等),写到另外的shell脚本里,在shell脚本中调用, 比如mysql < create.sql。同时,在shell脚本里还执行了启动mysql, 关闭等任务。

最后,在Dockerfile里通过CMD或者ENTRYPOINT["sh", "xxx" ]来运行shell脚本。 

(5)Dockerfile文件创建好之后,很多内容都配置好了,生成镜像后,就可以根据镜像快速的启动容器 (docker run),命令行就不需要加很多参数了。

(6)Dockerfile中,参数比如RUN 后面的路径是容器/镜像里的,这些路径不会自动创建,要自己mkdir。 注意创建的目录和其他句子中用到的目录要一致,否则会报错。

(7)RUN之类的,执行的是Linux本身的一些命令。ADD将服务器里某个目录的内容,添加到容器里面,后面接的是容器里的路径,不是宿主机里的。

(8)Dockerfile文件里的内容,都是针对容器来说的,就是在容器里执行的。

(9)如何对待错误?要看报错内容,查看日志; docker logs -f 容器ID 

(10)只要没有语法错误,打镜像一般都是能成功的。但是如果有错误,那在之后的启动/运行容器过程中,就会报错。有时候run 一开始是成功的,但是过了一会儿ps -a看,Exited了,说明前面可能还没执行到错误的地方。此时, docker logs -f 容器ID  来查看具体的日志信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值