使用Docker部署idea开发的Javaweb项目(Tomcat+MySQL容器部署)

一、应用场景

在做项目的过程中,服务器端的部署是一个非常重要的场景,当客户的服务器是Linux/Unix系统时,用Docker容器来部署最方便不过了,Windows场景下Docker的支持也比较完善了,使用Docker部署能够给我们带来方便、快捷的体验。


二、应用项目综述

本文中项目的开发环境是基于spring+springMVC+mybatis的maven项目。开发的IDE是IntelliJ IDEA 2017.1.4,服务器是使用Tomcat 9.0.0.M21,数据库使用MySQL 5.7。最后部署测试环境是MacOS Sierra 10.12.3


三、安装Docker

工欲善其事,必先利其器。首先我们应该在开发机器上安装Docker。关于Docker的安装,这里就不详细叙述了,官网的步骤都很详细,给大家搬运一下网址:

1、Docker官网:https://www.Docker.com/

2、Mac安装方式:http://docs.Docker.com/mac/started/

3、Linux安装方式:http://docs.Docker.com/linux/started/

4、Windows安装方式:http://docs.Docker.com/windows/started/


四、部署正式开始

好了,做好了前三步准备工作,我们假定项目已经开发完毕,Docker也正确安装在了你的测试机器上,你也学习了一些Docker的操作命令,不是一个完全的小白了,我们就可以开始部署应用了。

1、创建MySQL容器

下载MySQL镜像

启动Docker的情况下,在终端中输入 docker search mysql命令可以搜索到各式各样的MySQL镜像,我们选择star最多的MySQL官方镜像。

然后输入:docker pull mysql命令,将这个镜像拉到本地(有可能会比较慢,可以使用阿里云加速或者fanqiang)。 

拉取完成后,在本地输入:docker images 查看镜像可以看到如下图中所示,说明你的镜像已经拉取成功。


创建MySQL容器

启动容器:MySQL可以直接把端口地址映射到宿主机上,但是在生产环境中映射宿主主机有可能会造成端口冲突等一系列问题,所以我们用容器互联的方法,让MySQL的端口只暴露给Tomcat服务器,命令如下:

docker run --name health-tomcat  -v /home/mysql_data:/var/lib/mysql --restart=always -e MYSQL_ROOT_PASSWORD=123456 -d <IMAGE-ID>

    -v:容器的/var/lib/mysql目录挂载在主机的/home/mysql_data目录

    -e 设置默认参数,支持参数:

    • MYSQL_ROOT_PASSWORD

    • MYSQL_DATABASE

    • MYSQL_USER, MYSQL_PASSWORD

    • MYSQL_ALLOW_EMPTY_PASSWORD

    • MYSQL_RANDOM_ROOT_PASSWORD

    • MYSQL_ONETIME_PASSWORD

我们用MYSQL_ROOT_PASSWORD=123456是给默认的root用户设置密码为123456.

<IMAGE-ID>为你的镜像的名字,这里为mysql。

进入容器:

使用命令 docker exec -it health-mysql mysql -uroot -p进入MySQL容器,在Enter password:输入你刚刚设置的密码。进入之后的操作跟你在自己电脑上安装MySQL后的操作一样。

导入宿主机.sql文件到MySQL容器的数据库中:

先查看MySQL运行名称:docker ps, NAMES栏底下为名称

进入刚刚创建的容器:docker exec -it health-mysql mysql -uroot -p

创建一个数据库:create database health_data

退出MySQL环境

将宿主机文件导入:MySQL容器名称为:health-mysql,  容器中数据库名称为:health_data

执行:docker exec -i health-mysql mysql -u root -p123456 health_data < /Users/jacob/Desktop/health_data.sql

2、创建Tomcat容器并且用--link连接到MySQL容器

1、下载镜像:docker pull tomcat

2、创建一个本地目录:/Users/jacob/Desktop/tomcat_data,把项目的war包放到这个本机文件夹。需要注意的是,在容器互联的时候需要为MySQL容器创建一个别名,在项目的jdbc.properties中jdbc.url=jdbc:mysql://tomysql:3306/guotai?useUnicode=true&characterEncoding=utf-8,3306端口前的tomysql就是通过数据库别名,这样才能访问项目,他相当于localhost/你的IP地址。所以在导出war包之前,先想好你的数据库别名,然后把3306前面的名称和你的数据库别名设置成一致然后导出(很关键!!!)

3、创建Tomcat容器并连接到MySQL

直接线上命令,然后解释

docker run -d -p 8888:8080 -v /Users/jacob/Desktop/tomcat_data:/usr/Downloads --name health-tomcat --link health-mysql:tomysql tomcat

1、-p后面是把Tomcat的8080端口映射到8888端口,部署后用8888来访问。

2、-v /Users/jacob/Desktop/tomcat_data:/usr/Downloads 把/usr/Downloads目录挂载到你的房war包的本地目录,为一会拷贝war包到Tomcat容器做准备。

3、--name health-tomcat 为你的Tomcat容器起一个名字

4、--link health-mysql:tomysql 这步就是实现互联,health-mysql就是你一开始第一步创建的MySQL容器的名称,冒号后面就是MySQL容器在Tomcat容器中的别名,这个别名要和你项目的jdbcurl 3306端口前的名称一致,这样才可以建立数据库连接(谨记)

5、tomcat 这个就是你的镜像名称

执行完容器创建后,我们需要把war包从本机拷贝到Tomcat服务器中。

首先:执行以下命令进入容器:docker exec -it health-tomcat /bin/bash

进入容器后再执行以下命令将war包复制到tomcat容器目录下:cp /usr/Downloads/Demo.war /usr/local/tomcat/webapps/

/usr/Downloads/Demo.war是你刚刚挂在的本地存放war报的目录

/usr/local/tomcat/webapps/是Tomcat容器中你要把war包拷贝到这里

此时,准备工作已经全部结束,享受成果吧!

在浏览器输入URL:http://localhost:8888/Demo/


8888是你刚刚在创建容器时给8080端口映射的端口值,Demo是你的war包的名字,在访问你的API的时候要加上war包名字这个路径。


好了,这是我部署的一些经验。每个项目具体的差异会造成操作步骤和命令上的差异,才疏学浅,错误在所难免,希望大家批评指正!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,290评论 4 363
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,399评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,021评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,034评论 0 207
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,412评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,651评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,902评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,605评论 0 199
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,339评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,586评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,076评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,400评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,060评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,083评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,851评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,685评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,595评论 2 270

推荐阅读更多精彩内容