如何用Docker完整地部署一个JavaWeb项目
MySQL部署
下载
下载MySQL镜像,注意这里的名字字母都是全小写的
docker pull mysql
创建容器并设置初始密码
docker run -p 3306:3306 --name mysql -v /usr/JavaWeb/mysql/conf:/etc/mysql/conf.d -v /usr/JavaWeb/mysql/logs:/logs -v /usr/JavaWeb/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=你的密码 -d mysql
参数说明
-p 3306:3306
:规定容器的3306端口对应了宿主机的3306端口
-v xxxxx
:分别设置外部的数据卷,这样的话你数据库里的信息就不会随着容器的销毁而消失了
-e MYSQL ROOT_PASSWORD=XXX
:设置你的密码
-d
:默认后台运行
进入数据库控制台(如果你需要)
docker exec -it (MySQL运行成功后的Id或者名字) /bin/bash
进入容器后,你到的是这个容器的Linux里的落脚点而不是数据库终端,所以还需要打开mysql的终端
mysql -uroot -p
输入账号密码,登入
远程Navicat连接
注意你之前-p 3306:3306
,第一个3306就代表了你用navicat需要连接的端口,又比如你之前如果因为端口占用写的是-p 3305:3306
,那么这时候你需要连的就是3305端口了,然后照常输入账户密码,登入,成功。至此mysql的问题就解决完了
Tomcat部署
下载
docker pull tomcat
不解释
启动
docker run -d -p 8888:8080 --name tomcat tomcat
这里我们让容器的8080端口对应宿主机的8888端口
然后给这个容器命名为tomcat(以后方便操作)
启动就先这样
这时候,访问你的网页,就可以看到tomcat启动成功的页面了
但是有些时候可能你会等一段时间才能看到,别慌,ok的
导入war包
之前我想的是采用数据卷的方式,把容器里的webapps直接弄出来了,但是这样导致的问题就是tomcat在初始化的时候无法在webapps里创建各种基本的文件(可能是权限问题),访问首页的时候就出现了404。(而且我丢进去的项目也跑不起),所以我最终还是选择了采用docker cp的方式把war包复制到容器里去
这样的
docker cp 你的war tomcat:/usr/local/tomcat/webapps
一个小坑
(最好别用–link指令,以后我会写一篇关于docker compose的)
在这里,我们的mysql就是用docker部署的,所以我们之前在Java项目里写的数据库的地址也就应该从
jdbcUrl=jdbc:mysql://localhost:3306/lehrsWeb?useSSL=false
改为
jdbcUrl=jdbc:mysql://你数据库的container ip:3306/lehrsWeb?useSSL=false
这里的container ip怎么查呢?
docker inspect (你mysql容器的名字或者容器id)
你会看到这样结果
划红线的地方就是了
这样基本就能跑了
设置首页
如果为了更方便,每次不用写项目的目录就能直接访问到项目,可用去tomcat容器里的server.xml里增加这样一句(位置如图所示,在host那个标签下面)
<Context path="" doBase="LehrsBlog.war" debug="0" privileged="true">
同时你的JavaWeb项目里的web.xml也要设置一个首页:
像这样,然后就就大功告成了
(我也觉得我这篇文章写的很水,但是确实就这几个步骤…)