前言

老师丢了一个spring写的项目给我们部署到服务器上。这次来记录一下部署的过程。

分析项目

这是一个spring的项目,没用到springboot,只能用tomcat部署了。因为还用到了MySQL连接,所以还需要一个MySQL的容器。知道了需要的容器那就开始行动了。

构建好大概框架

  1. 创建一个项目的文件夹

    1
    2
    mkdir math
    cd math
  2. 创建一个放Tomcat配置的文件夹

    1
    mkdir webapp
  3. 创建一个放MySQL配置的文件夹

    1
    mkdir database
  4. 创建一个docker-compose.yml的配置文件

    1
    touch docker-compose.yml

Tomcat容器

因为这个项目打包出来是war包的,所以我想的就是直接将war包放到Tomcat的webapps里然后运行Tomcat就好了。(以下操作是在webapp文件夹进行)

注意设置项目中连接mysql的url,ip填写为mysql(其他也行,后面自己改服务名)
localhost是指Tomcat容器的IP,因为容器与容器是隔离的,所以会连接不到MySQL容器的IP。

  1. 将改好的项目war包移入服务器的这个文件夹中。

  2. 定制Tomcat的镜像,创建一个Dockerfile文件。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    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文件夹进行)

  1. 将sql文件移入这个文件夹,我的文件名是mathStock.sql

  2. 定制MySQL的镜像,创建一个Dockerfile文件。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    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"]
  3. 创建一个shell脚本用于导入sql文件,我的文件名是setup.sh

    1
    2
    3
    #!/bin/bash
    mysql -uroot -ppassword <<EOF
    source /usr/local/mathStock.sql;

容器编排docker-compose.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# 版本需要选对,不然报错
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"

运行

编排完之后就可以运行了。

1
docker-compose up -d 

参考文章