前言
老师丢了一个spring写的项目给我们部署到服务器上。这次来记录一下部署的过程。
分析项目
这是一个spring的项目,没用到springboot,只能用tomcat部署了。因为还用到了MySQL连接,所以还需要一个MySQL的容器。知道了需要的容器那就开始行动了。
构建好大概框架
-
创建一个项目的文件夹
mkdir math cd math -
创建一个放Tomcat配置的文件夹
mkdir webapp -
创建一个放MySQL配置的文件夹
mkdir database -
创建一个
docker-compose.yml的配置文件touch docker-compose.yml
Tomcat容器
因为这个项目打包出来是war包的,所以我想的就是直接将war包放到Tomcat的webapps里然后运行Tomcat就好了。(以下操作是在webapp文件夹进行)
注意设置项目中连接mysql的url,ip填写为mysql(其他也行,后面自己改服务名) localhost是指Tomcat容器的IP,因为容器与容器是隔离的,所以会连接不到MySQL容器的IP。
-
将改好的项目war包移入服务器的这个文件夹中。
-
定制Tomcat的镜像,创建一个
Dockerfile文件。FROM tomcat:9.0 LABEL maintainer = "yww <1141950370@qq.com>" # 暴露端口 EXPOSE 9010 # 将war包放入Tomcat容器的webapps文件夹中 ADD math.war /usr/local/tomcat/webapps/
MySQL容器
这个容器才是这次的重点,因为要导入自己的sql语句,所以需要额外的shell脚本来实现。(以下操作是在database文件夹进行)
-
将sql文件移入这个文件夹,我的文件名是
mathStock.sql。 -
定制MySQL的镜像,创建一个
Dockerfile文件。FROM mysql:8.0 LABEL maintainer = "yww <1141950370@qq.com>" # 设置mysql的工作位置 ENV WORK_PATH /usr/local/ #定义会被容器自动执行的目录和所需文件的环境变量 ENV AUTO_RUN_DIR /docker-entrypoint-initdb.d ENV SQLFILE mathStock.sql ENV INSTALL_DATA_SHELL setup.sh # 将需要的文件放入容器内 COPY ./$SQLFILE $WORK_PATH/ COPY ./$INSTALL_DATA_SHELL $AUTO_RUN_DIR/ # 给shell脚本和自动执行目录增加可执行的权限 RUN chmod a+x $AUTO_RUN_DIR/$INSTALL_DATA_SHELL #设置容器启动时执行的命令 CMD ["sh", "/docker-entrypoint-initdb.d/import.sh"] -
创建一个shell脚本用于导入sql文件,我的文件名是
setup.sh#!/bin/bash mysql -uroot -ppassword <<EOF source /usr/local/mathStock.sql;
容器编排docker-compose.yml
# 版本需要选对,不然报错
version: '3'
services:
# 编排Tomcat容器
webapp:
container_name: webapp
image: webapp
build:
context: ./webapp
dockerfile: Dockerfile
ports:
- "9010:8080"
depends_on:
- mysql
# 编排MySQL容器
mysql:
container_name: mysql
image: database
build:
context: ./database
dockerfile: Dockerfile
ports:
- "3306:3306"
# 挂载数据卷
volumes:
- "./mysql:/var/lib/mysql"
- "./my.cnf:/etc/mysql/conf.d/my.cnf"
#设置编码格式
command: [
'--character-set-server=utf8mb4',
'--collation-server=utf8mb4_unicode_ci'
]
#设置初始化密码
environment:
MYSQL_ROOT_PASSWORD: "password"
运行
编排完之后就可以运行了。
docker-compose up -d