在学习了 docker 的基本知识之后,自然就应该练练手了,这次来写写如何在docker容器中部署一个java web 应用的详细步骤
(说明:主机 windows 系统,在 vmware workstations 中运行 CentOS 7 的虚拟机,虚拟机的ip 为 192.168.190.130)
安装 Docker
既然是 docker 的实战,第一步自然是检查 docker 是不是安装了,是不是正常运行的,这里我用的是CentOS 7 的 Linux 系统,安装好 docker 之后从镜像市场中拉取所需的 tomcat 镜像和MySQL 镜像,如下图示:
由于这两个镜像比较大,所以建议提前拉取。
创建 MySQL Container镜像拉取好了之后就创建运行应用所需的容器,首先创建一个 MySQL 容器
[[email protected] ~]# docker run -itd --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
解释一下上面命令的含义:1
2
3
4run -itd:在 docker 中运行一个带交互式的且能后台运行的容器。
--name mysql:给容器命名为 mysql,注意 name 前面有两个小横杠,你也可以自己随意命名。
-p 3306:3306:这里是指将容器的 3306 端口映射到主机的 3306 端口,冒号前面指的是主机,后面指的是容器。
-e MY_ROOT_PASSWORD=123456:这行命令的意思是在创建 mysql 容器的时候在容器中创建一个 root用户,密码是 123456,要是不想用 123456,把它改成你想要的就可以了。
下面我们进入这个容器看看:
docekr exec 命令用来进入容器内部。进入之后可以使用 service mysql start 命令来查看当前 mysql服务的状态,一般情况下都是 runing 的,如果不是,自行启动一下就可以了。
然后使用 mysql -u root -p 回车后提示输入密码,我的是 123456 .输入回车之后就会进入 mysql 的命令行了! 可用 show databases ; 查看一下 mysql 中有哪些数据库。
注:现在在 mysql 容器的命令行中,可以另外打开一个终端进行下面的操作,也可以使用 ctrl+p+q(按住 ctrl 不放,先按 p 键,再按 q 键。全部松开后回车就可以回到 linux命令行中)来退出 mysql 容器但不让容器停止。
连接并导入数据库至容器现在使用一个工具连接到数据库,并且将数据库上传到 docker 的 mysql 容器中。
( Navicat 是我认为最好用的数据库管理工具。)
这里的 ip 地址就是虚机 ip,指定连接到虚机的 3306 端口,也就是会连接到 mysql 容器,因为主机的3306 端口是和容器的 3306 相连接的,连接名随便取测试连接成功后点击确定就好了。下一步就是把我们 java web 应用的数据库导入到 mysql 容器的数据库中了。这个步骤直接在 Navicat 中就可以完成了
新建一个数据库名为 db_mps 的数据库,字符集和排序规则不选,它会根据 .sql 文件自动识别。
这里运行完 .sql 文件之后刷新表,或者刷新数据库,这取决于 .sql 文件有哪些东西。我的 .sql 文件里只有几张表。这个时候回到 mysql 容器中用 show databases ; 查看容器中的数据库,这时会显示有db_mps 数据库。到这里为止,就创建好了 mysql 容器,并且在容器中部署了一个名为 db_mps 的数据库。
创建 Web Container接下来创建部署web服务的容器1[[email protected] ~]# docker run -itd -p 80:8080 --name myweb tomcat
这里所用的参数在创建 mysql 容器时都有解释。进入到 myweb 容器中可以看到有一个 webapps 的目录,把 java web 应用的工程文件导出为 war 包,然后放到这里的 webapps 目录下。这样 tomcat 会自动解压部署。现在已经创建好了 myweb 容器,我们可以在浏览器输入 192.168.190.130:80 检查一下tomcat是否部署成功。
那看到这个页面说明 myweb 中的 tomcat 服务已经是启动的,如果没有出现 tomcat 部署成功的这个页面,你需要进入 myweb 的 bin 目录找到 catalina.sh 文件并且 run 起来。
导入工程文件tomcat 服务已经部署好了,接下来就是导入 war 包工程文件了。
在导入 war 包之前,查看一下 mysql 容器的 ip,然后去 java web 的工程文件中访问数据库的文件里修改访问的数据库,如下图所示:
图上可以看到,这里的 ip 是 172.17.0.2,也就是说如果部署 web 应用,就要在工程文件中指定访问的数据库的 ip 地址为 172.17.0.2,这样 web 应用部署在 tomcat 上才会去读取 mysql 中的数据。我这里的工程文件如下图所示:
将工程文件中连接数据库的配置信息改成我们容器的 ip 地址即可。然后导出 war 包工程文件,我的开发软件是 eclipse。直接用复制粘贴把 war 放入的虚机里的 /mnt 目录下。
部署、检验
接下来要将 /mnt 目录下的 war 包文件放到 myweb 容器下的 webapps 目录下,命令如下:1[[email protected] ~]# docker cp /mnt/MPS_system.war fa0be9ddda5c1d667be886ad28e9895e37d17b839677e215a0dfb7e961b6c974:/usr/local/tomcat/webapps
这个命令是把在 /mnt 下的 MPS_system.war 文件拷贝到 myweb 容器下的 webapps 目录下。里面很长的那个字符串是容器的id,这里用 myweb 应该也可以(myweb 是 tomcat 容器的容器名),后面是 webapps 在容器中的路径,是固定的,直接复制即可。
可以看到tomcat容器已经自动帮我们解压并部署了war包工程文件,到此为止,部署工作全部完成!验收一下
部署完成之后就该看看是否成功了,在浏览器中输入虚机的 ip+war 包文件名,如下图:
访问成功!试试登录是否正常,如果登录正常说明 myweb 是访问到了 mysql 数据库的,因为登录信息保存在 mysql 的表中。