目标是:将本地运行的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 all on *.* to 'why'@'%' with grant option;(修改权限时在后面加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下来就又会快很多,这就又是另一篇文章了

docker快速部署本地项目到服务器(tomcat8+mysql8)的更多相关文章

  1. Docker 快速部署 Django项目到云服务器

    项目结构: 1,dockerfile FROM python:3.7 RUN mkdir -p /usr/src/app WORKDIR /usr/src/app COPY pip.conf /roo ...

  2. 私活利器,docker快速部署node.js应用

    http://cnodejs.org/topic/53f494d9bbdaa79d519c9a4a 最近研究了几天docker的快速部署,感觉很有新意,非常轻量级和方便,打算在公司推广一下,解放运维, ...

  3. docker中部署django项目~~Dockfile方式和compose方式

    1.  背景:   本机win10上,后端django框架代码与前端vue框架代码联调通过. 2.  目的:   在centos7系统服务器上使用docker容器部署该项目. 3.  方案一:仅使用基 ...

  4. 使用Docker快速部署ELK分析Nginx日志实践

    原文:使用Docker快速部署ELK分析Nginx日志实践 一.背景 笔者所在项目组的项目由多个子项目所组成,每一个子项目都存在一定的日志,有时候想排查一些问题,需要到各个地方去查看,极为不方便,此前 ...

  5. docker自动化部署前端项目实战一

    docker自动化部署前端项目实战一 本文适用于个人项目,如博客.静态文档,不涉及后台数据交互,以部署文档为例. 思路 利用服务器node脚本,监听github仓库webhook push事件触发po ...

  6. 使用Docker快速部署各类服务

    使用Docker快速部署各类服务 一键安装Docker #Centos环境 wget -O- https://gitee.com/iubest/dinstall/raw/master/install. ...

  7. spring boot / cloud (十八) 使用docker快速搭建本地环境

    spring boot / cloud (十八) 使用docker快速搭建本地环境 在平时的开发中工作中,环境的搭建其实一直都是一个很麻烦的事情 特别是现在,系统越来越复杂,所需要连接的一些中间件也越 ...

  8. 使用Docker快速部署ELK分析Nginx日志实践(二)

    Kibana汉化使用中文界面实践 一.背景 笔者在上一篇文章使用Docker快速部署ELK分析Nginx日志实践当中有提到如何快速搭建ELK分析Nginx日志,但是这只是第一步,后面还有很多仪表盘需要 ...

  9. 使用Cloud Toolkit部署SpringBoot项目到服务器

    由于我们经常发布项目到测试服,在测试服上调试一些本地无法调试的东西,所以出现了各种打包,然后上传.启动,时间都耗费在这无聊的事情上面了,偶然在网上看到IntelliJ IDEA有 Cloud Tool ...

随机推荐

  1. 常见HTTP请求头和响应头

    2. 常用的HTTP请求头 协议头 说明 示例 状态 Accept 可接受的响应内容类型(Content-Types). Accept: text/plain 固定 Accept-Charset 可接 ...

  2. linux磁盘分区三步走

    为了便于理解硬盘的物理结构 ,可将硬盘看作一个圆,它是坚硬金属材料制成的涂以磁性介质的盘片,不同容量硬盘的盘片数不等.每个盘有两面,都可记录信息.要了解硬盘的物理结构,需要弄懂磁道.扇区.柱面.簇等几 ...

  3. 对 /langversion 无效;必须是 ISO-1、ISO-2、3、4、5 或 Default

    反编译或者.net用更高版本打开时会出现这个问题,解决办法如下: 1.网页版程序,将解决方案中的Web.config中的 /langversion 的值改为指定的值,既可以解决,我这里采用的是默认值, ...

  4. JPA-@MappedSuperclass

    今天阅读前辈的代码时,发现一个新的注解 @MappedSuperclass ,下面就来了解下它是干什么的: 首先官方文档给出的解释是: Designates a class whose mapping ...

  5. cesium定义线面

    面: var polygon = viewer.entities.add({ polygon : { hierarchy : { positions : null, holes : [{ positi ...

  6. 普通用户修改时间 sudo

    sudo date neokylinV7.0  desktop 1.给/etc/sudoers加权限 # chmod u+w /etc/sudoers 2.添加配置 # vim /etc/sudoer ...

  7. 【重磅资料】ArchSummit全球架构师峰会·2019华为云技术专场资料下载

    ArchSummit全球架构师峰会是InfoQ中国团队推出的重点面向高端技术管理者.架构师的技术会议,54%参会者拥有8年以上工作经验.ArchSummit聚焦业界强大的技术成果,秉承"实践 ...

  8. 【并发技术16】线程同步工具Exchanger的使用

    如果两个线程在运行过程中需要交换彼此的信息,比如一个数据或者使用的空间,就需要用到 Exchanger 这个类,Exchanger 为线程交换信息提供了非常方便的途径,它可以作为两个线程交换对象的同步 ...

  9. eclipse m2eclipse 从Maven的本地库中读取依赖库

    在Mac pro的终端中执行命令 mvn package 后,已经把该工程所需要的依赖库(dependancies)下载到本地库,但在把该工程 import 到 eclipse中时,发现m2eclip ...

  10. 深度学习DeepLearning核心技术理论与实践

    深度学习DeepLearning核心技术开发与应用时间地点:2019年11月01日-04日(北京) 联系人杨老师  电话(同微信)17777853361