我的技术学习物语果然有问题
(最后更新 )

记一次容器编排

记一次容器编排。

前言

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

分析项目

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

构建好大概框架

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

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

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

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

    	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文件。

    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文件。

    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

    #!/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 

参考文章