Docker部署Java应用[转]
练习要求:
在CentOS Linux release 7.7.1908 (Core)中,先拉一个Centos镜像,然后在光秃秃的centos镜像基础上把项目环境搭建好,然后再提交到自己的docker仓库里。
操作环境:
虚拟机中安装好的CentOS Linux release 7.7.1908 (Core)
一、安装并启动Docker
1.更新 yum
yum -y update
2. 安装 Docker:
yum install docker -y
3.启动:
systemctl start docker.service
4.拉去Centos镜像
docker pull centos:7.6.1810
5.启动容器:
docker run --privileged -it -d --name tmall-test f1cb7c7d58b7 /usr/sbin/init
6.进入容器:
docker exec -it 容器ID /bin/bash
二、安装java
(在已启动的容器中操作)
yum -y install java-1.8.0-openjdk.x86_64
检查java安装是否成功:
java -version
三、安装mysql
(在已启动的容器中操作)
1.下载
yum上mysql的资源有问题,所以不能仅仅之用yum。在使用yum之前还需要用其他命令获取mysql社区版
cd /tmp wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm rpm -ivh mysql-community-release-el7-5.noarch.rpm
2.安装
yum install mysql mysql-server mysql-devel -y
3.启动mysql
systemctl start mysql.service netstat -anp|grep 3306
以上说明安装并启动成功
4.设置密码
通过Yum安装的mysql的管理员账户是没有密码的,这里通过命令设置其密码为 admin ,尽量使用这个密码哦,后续部署j2ee应用的时候会用到这个密码哦。
mysqladmin -u root password admin
5.登录
mysql -uroot -p
输入密码admin
登录成功后输入:
show databases;
看到这3个数据库,就表示用root账号登陆成功了
四、安装tomcat
(在已启动的容器中操作)
1.安装
yum上没有tomcat的源,所以使用如下方式下载解压
cd /tmp wget wget https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.50/bin/apache-tomcat-8.5.50.tar.gz tar -zxvf apache-tomcat-8.5.50.tar.gz mv apache-tomcat-8.5.50 /usr/local/tomcat8
2.启动Tomcat
/usr/local/tomcat8/bin/startup.sh
查看端口:
netstat -anp|grep 8080
查看启动日志,ctrl+c可退出
tail -10f /usr/local/tomcat8/logs/catalina.out
五、部署一个web应用
(在已启动的容器中部署)
1.上传web应用
首先在宿主机新建目录data:
mkdir data
然后利用xftp将本地文件上传至宿主机,如下图:
左边是本地,右边是宿主机,将需要上传的文件拖拽至右边即可上传
最后将文件从宿主机中拷贝至docker:
语法:docker cp 本地文件路径 容器ID:容器路径
docker cp /root/data/tmall 86422442c39d:/home/wwwroot/ftptest docker cp /root/data/tmall.sql 86422442c39d:/home/wwwroot/ftptest
注意:以上拷贝需要在容器外操作
2.数据库准备
1)大小写敏感
Linux MySQL默认是大小写敏感的,但是模仿天猫在设计的时候是在windows上开发的,而windows上的Mysql默认是非大小写敏感的,所以JDBC代码有的表名是大写,有的是小写的,一旦运行起来就会因为大小写不一致导致无法识别表名。 为了解决这个矛盾,就需要把MySQL的大小写敏感修改为非敏感
修改 mysql配置文件:
vi /etc/my.cnf
修改:
lower_case_table_names=1
修改保存后重启mysql:
systemctl restart mysqld.service
2)创建数据库
mysql -uroot -padmin
CREATE DATABASE tmall DEFAULT CHARACTER SET utf8; show databases; quit;
3)导入数据
执行命令:
mysql -u root -padmin --default-character-set=utf8 tmall < /home/wwwroot/ftptest/tmall.sql
注意:执行该命令需要退出mysql控制台
重新登录mysql,验证导入是否成功:
mysql -uroot -padmin
use tmall; show tables; select count(*) from product;
3.tomcat配置
1)修改server.xml
vi /usr/local/tomcat8/conf/server.xml
然后在<host下面增加一行:
<Context path="/tmall" docBase="/home/wwwroot/ftptest/tmall/web" debug="0" reloadable="false" />
注: /home/wwwroot/ftptest/tmall/web 就是 上传web应用 后的位置
2)重启tomcat
/usr/local/tomcat8/bin/shutdown.sh /usr/local/tomcat8/bin/startup.sh
查看日志:
tail -300f /usr/local/tomcat8/logs/catalina.out
六、设置自启动
所谓的自启动,就是在 Linux 重启之后,会自动启动一些服务和程序。这里也就是容器启动之后自动启动服务和程序。
在重启之后,mysql 不会自动启动,tomcat也不会自动启动,这样在重启之后,服务就不可以使用了。
需要自启动的服务有 mysql
需要自启动的脚本有 tomcat
1.mysql自启动
systemctl enable mysqld.service
2.tomcat自启动
有个文件叫做 rc.local, 把脚本放进去就可以了。
不过这个脚本在 centos7里被降级了,不能被执行,所以要执行如下语句使得其可以被执行先
chmod +x /etc/rc.d/rc.local
然后修改 /etc/rc.d/rc.local, 放入 tomcat脚本即可
vi /etc/rc.d/rc.local
添加tomcat脚本:
/usr/local/tomcat8/bin/startup.sh
七、生成新镜像
将上述步骤操作之后的容器commit成一个新镜像,
语法:docker commit 容器ID 镜像名称
docker commit 266c8dc4b799 tmall-test:v1
并以新镜像运行容器:
docker run -dit --privileged -p80:80 -p8080:8080 --name tmall-test-final 1a2f17365656 /usr/sbin/init
访问项目地址: http://192.168.197.226:8080/tmall/ (这是我本地虚拟机地址),功能正常,说明镜像正常。