Docker学习笔记五:docker简单实践(Docker部署Java应用)
学习完https://how2j.cn/k/docker/docker-docker/2005.html?p=130725的docker教程,以下是完成练习题的操作记录~
练习要求:
在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
![](https://img2020.cnblogs.com/blog/1484879/202107/1484879-20210703151102156-1148861114.png)
5.启动容器:
docker run --privileged -it -d --name tmall-test f1cb7c7d58b7 /usr/sbin/init
6.进入容器:
docker exec -it 容器ID /bin/bash
![](https://img2020.cnblogs.com/blog/1484879/202107/1484879-20210703151102155-1736811002.png)
二、安装java
(在已启动的容器中操作)
yum -y install java-1.8.0-openjdk.x86_64
![](https://img2020.cnblogs.com/blog/1484879/202107/1484879-20210703151102416-1299796762.png)
检查java安装是否成功:
java -version
![](https://img2020.cnblogs.com/blog/1484879/202107/1484879-20210703151102209-451606065.png)
三、安装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
![](https://img2020.cnblogs.com/blog/1484879/202107/1484879-20210703151102397-1548868662.png)
2.安装
yum install mysql mysql-server mysql-devel -y
![](https://img2020.cnblogs.com/blog/1484879/202107/1484879-20210703151102209-1883813777.png)
3.启动mysql
systemctl start mysql.service netstat -anp|grep 3306
![](https://img2020.cnblogs.com/blog/1484879/202107/1484879-20210703151102349-607037081.png)
以上说明安装并启动成功
4.设置密码
通过Yum安装的mysql的管理员账户是没有密码的,这里通过命令设置其密码为 admin ,尽量使用这个密码哦,后续部署j2ee应用的时候会用到这个密码哦。
mysqladmin -u root password admin
![](https://img2020.cnblogs.com/blog/1484879/202107/1484879-20210703151102342-1503869935.png)
5.登录
mysql -uroot -p
输入密码admin
![](https://img2020.cnblogs.com/blog/1484879/202107/1484879-20210703151102424-421616788.png)
登录成功后输入:
show databases;
![](https://img2020.cnblogs.com/blog/1484879/202107/1484879-20210703151102371-72045486.png)
看到这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
![](https://img2020.cnblogs.com/blog/1484879/202107/1484879-20210703151102358-731564705.png)
查看端口:
netstat -anp|grep 8080
![](https://img2020.cnblogs.com/blog/1484879/202107/1484879-20210703151102186-1312298262.png)
查看启动日志,ctrl+c可退出
tail -10f /usr/local/tomcat8/logs/catalina.out
![](https://img2020.cnblogs.com/blog/1484879/202107/1484879-20210703151102441-860834308.png)
五、部署一个web应用
(在已启动的容器中部署)
1.上传web应用
首先在宿主机新建目录data:
mkdir data
然后利用xftp将本地文件上传至宿主机,如下图:
左边是本地,右边是宿主机,将需要上传的文件拖拽至右边即可上传
![](https://img2020.cnblogs.com/blog/1484879/202107/1484879-20210703151102422-949069716.png)
最后将文件从宿主机中拷贝至docker:
语法:docker cp 本地文件路径 容器ID:容器路径
docker cp /root/data/tmall 86422442c39d:/home/wwwroot/ftptest docker cp /root/data/tmall.sql 86422442c39d:/home/wwwroot/ftptest
![](https://img2020.cnblogs.com/blog/1484879/202107/1484879-20210703151102153-1086921338.png)
注意:以上拷贝需要在容器外操作
2.数据库准备
1)大小写敏感
Linux MySQL默认是大小写敏感的,但是模仿天猫在设计的时候是在windows上开发的,而windows上的Mysql默认是非大小写敏感的,所以JDBC代码有的表名是大写,有的是小写的,一旦运行起来就会因为大小写不一致导致无法识别表名。 为了解决这个矛盾,就需要把MySQL的大小写敏感修改为非敏感
修改 mysql配置文件:
vi /etc/my.cnf
修改:
lower_case_table_names=1
![](https://img2020.cnblogs.com/blog/1484879/202107/1484879-20210703151102396-1440198094.png)
修改保存后重启mysql:
systemctl restart mysqld.service
![](https://img2020.cnblogs.com/blog/1484879/202107/1484879-20210703151102415-1125405148.png)
2)创建数据库
mysql -uroot -padmin
CREATE DATABASE tmall DEFAULT CHARACTER SET utf8;
show databases;
quit;
![](https://img2020.cnblogs.com/blog/1484879/202107/1484879-20210703151102414-1902717447.png)
3)导入数据
执行命令:
mysql -u root -padmin --default-character-set=utf8 tmall < /home/wwwroot/ftptest/tmall.sql
![](https://img2020.cnblogs.com/blog/1484879/202107/1484879-20210703151102181-1148595140.png)
注意:执行该命令需要退出mysql控制台
重新登录mysql,验证导入是否成功:
mysql -uroot -padmin
use tmall; show tables; select count(*) from product;
![](https://img2020.cnblogs.com/blog/1484879/202107/1484879-20210703151102184-545405201.png)
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" />
![](https://img2020.cnblogs.com/blog/1484879/202107/1484879-20210703151102191-1819843532.png)
注: /home/wwwroot/ftptest/tmall/web 就是 上传web应用 后的位置
2)重启tomcat
/usr/local/tomcat8/bin/shutdown.sh /usr/local/tomcat8/bin/startup.sh
![](https://img2020.cnblogs.com/blog/1484879/202107/1484879-20210703151102371-1497991704.png)
查看日志:
tail -300f /usr/local/tomcat8/logs/catalina.out
![](https://img2020.cnblogs.com/blog/1484879/202107/1484879-20210703151102440-717564769.png)
六、设置自启动
所谓的自启动,就是在 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
![](https://img2020.cnblogs.com/blog/1484879/202107/1484879-20210703151102371-1883043084.png)
七、生成新镜像
将上述步骤操作之后的容器commit成一个新镜像,
语法:docker commit 容器ID 镜像名称
docker commit 266c8dc4b799 tmall-test:v1
![](https://img2020.cnblogs.com/blog/1484879/202107/1484879-20210703151102201-2068277585.png)
并以新镜像运行容器:
docker run -dit --privileged -p80:80 -p8080:8080 --name tmall-test-final 1a2f17365656 /usr/sbin/init
![](https://img2020.cnblogs.com/blog/1484879/202107/1484879-20210703151102421-50236805.png)
访问项目地址: http://192.168.197.226:8080/tmall/ (这是我本地虚拟机地址),功能正常,说明镜像正常。
![](https://img2020.cnblogs.com/blog/1484879/202107/1484879-20210703151102390-990597659.png)
八、提交镜像
1.登录
如果没有账号的话需要先注册账号,在 https://hub.docker.com 可以免费注册一个 Docker 账号。
docker login
![](https://img2020.cnblogs.com/blog/1484879/202107/1484879-20210703151102208-1613738332.png)
2.推送镜像到仓库
镜像命名要符合 how2j/tmall 这样的风格,即斜杠前面必须是你的账号名。 如果镜像不是这个名字,可以通过 tag进行标记。
docker tag tmall-test:v1 130349805/tmall-test:v1
![](https://img2020.cnblogs.com/blog/1484879/202107/1484879-20210703151102416-1560061683.png)
docker push 130349805/tmall-test:v1
耗时多久,取决于镜像大小~