docker快速部署本地项目到服务器(tomcat8+mysql8)


目标是:将本地运行的spring项目,部署到服务器上

为什么使用docker?

  1. 环境隔离 服务器上,各种环境交杂,使用docker,能清楚的把各个项目进行隔离,不单维护的人员方便,也会省去很多维护这些项目交杂的时间。
  2. 真的是太轻量 每个docker是构建于一层一层的结构之上的,变化的只是这一层一层的变化的部分,docker的大小也非常之小
  3. 下载方便,想要获得一个镜像,只要pull一下就好了,和git的使用差不多哦

部署前提:

mysql文件,mysql关联文件,war包,传到服务器上,我传入的地址为/var/supplychain/ 别问我为什么要传到这里,我领导让的。

我的部署流程

docker mysql部署

  1. 建立docker 数据库:
docker run -di --name scf_mysql -p 33306:3306 \
-v /var/supplychain/image:/var/supplychain/image -e MYSQL_ROOT_PASSWORD=123456 mysql  \
--lower_case_table_names=1 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

参数说明:
-d
后台执行
-i
开控制台交互
--name
为这个开启的容器,命名
-p
进行端口映射,将宿主机的33306端口映射到容器的3306
-v
挂载宿主机/var/supplychain/image/这个目录到容器的/var/supplychain/image/目录
-e
指定容器的环境变量,这里是指定的mysql容器中mysql的密码为123456
--lower_case_table_names=1
忽略数据表名的大小写,这是个深坑哦,踩了2天
--character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
设置中文编码格式为utf8

  1. 刷入表数据
docker cp /var/supplychain/j.sql     容器ID:/         #将j.sql拷贝到容器的根目录下
docker exec -it scf_mysql /bin/bash/                    #进入容器的交互环境
mysql -uroot -p                                                     #进入mysql
create database julonglian;
use julonglian;
source /j.sql
  1. 对表用户进行授权
    对于mysql5来说:
grant all privileges on julonglian.* to 'why'@'%' identified by '123456';
flush privileges;

对于mysql8来说:

创建账户:create user ‘why’@’%’ identified by ‘123456’;
赋予权限:grant 权限列表 on 数据库 to ‘用户名’@’访问主机’ ;(修改权限时在后面加with grant option)
flush privileges;

docker tomcat部署

docker run -d -p 7608:8080 --name supplychain -v /var/supplychain/image:/var/supplychain/image -v /var/supplychain/server.xml:/usr/local/tomcat/conf/server.xml tomcat

  1. 为解决的事是:不知道为什么server.xml 挂载不上去,只要挂载这个,就启动不了,看来只能拷贝了
    为什么要改这个呢?有时候,需要项目的上下文根路径修改为/,所以就需要动这个配置文件
    tomcat8是在这个文件中,加入
    server.xml :

  2. 修改上下文根路径
    拷贝过去:
sudo docker cp /var/supplychain/server.xml 容器ID:/usr/local/tomcat/conf/server.xml   不同版本可能server.xml放的位置不一样,具体去容器里面看看

进入容器
cd webapps/ROOT/
rm -rf *
cd ..
mv 项目war包和解压的文件 ROOT/

代码中需要变动的地方

  1. 数据库url地址修改为docker内网ip地址访问地址,比如:使用docker inspect mysql的docker内网ip,进行查看其ip
  2. 数据库驱动的版本要对应上,比如:本地跑的时候使用的是mysql5,驱动啊,url等要进行变更。
  3. mybatis的一些数据库url配置也需要相应修改(我这里没有)

参考

Docker实现运行tomcat并部署项目war包,并实现挂载目录
Docker部署MySql应用
docker中mysql数据库的数据导入和导出
linux命令行打包、压缩及解压缩
通过容器提交镜像(docker commit)以及推送镜像(docker push)

进一步的呢:如果本地直接打包成一个镜像push到库中,在远程pull下来就又会快很多,这就又是另一篇文章了


作者:whyaza,发布于:2019/08/14
原文:https://www.cnblogs.com/whyaza/p/11351666.html