【docker】docker-compose实战之SpringBoot项目构建与部署

唠嗑部分

之前我们说了docker-compose的安装使用及一些常用软件的安装哈,相关文章:

今天我们来说一说如何部署SpringBoot项目,主要是说一说流程,总体而言这个流程是比较复杂的。

后期也会出一个前后端分离项目的部署,像React、Vue项目如何部署哈,还是有含金量的。

这两期文章的安排呢实际是为了出后面的CICD流水线配置,两者形成一个鲜明的对比

那下面我们就来说说如何部署

言归正传

小白首先准备了一个demo,样式随便写了点,凑合看吧,毕竟这不是重点

1、使用maven对项目进行打包

2、编写Dockerfile文件

FROM 基于镜像java:8

ADD 复制命令,复制当前目录下的*.jar到java/app.jar

EXPOSE 声明暴露的端口

WORKDIR 声明工作目录

RUN 运行脚本

ENTRYPOINT 执行命令,不可覆盖

CMD 执行命令,可覆盖

FROM java:8
ADD *.jar java/app.jar
EXPOSE 2023
WORKDIR java
RUN echo Asia/Shanghai >/etc/timezone
ENTRYPOINT ["java","-jar","app.jar","--spring.profiles.active=prod"]
CMD ["--server.port"]

3、编写docker-compose.yml文件

下面的主要解释一下,常见的见文章:

networks 声明网络,处在同一网络下的服务可使用容器名通讯

depends_on 优先级,即mysql先启动。在启动java-app

version: 3.1
services:
  mysql:
    image: mysql:5.7
    container_name: cxs.mysql.com
    environment:
      - MYSQL_ROOT_PASSWORD=root
    volumes:
      - /home/mysql/sql/:/usr/local/sql/
      - /home/mysql/etc/:/etc/mysql/conf.d/
    networks:
      - cxs-app
  java-app:
    build:
      context: ./
      dockerfile: Dockerfile
    image: book-manager-sys:1.0
    container_name: java-app
    command: "--server.port=2023"
    depends_on:
      - mysql
    volumes:
      - /etc/localtime:/etc/localtime:ro
    networks:
      - cxs-app
networks:
  cxs-app:

4、上传jar包、init.sql、Dockerfile、docker-compose.yml

在home目录下创建mysql/etc,mysql/sql目录,将init.sql放于mysql/sql下

在mysql/etc创建配置文件mysql.cnf,内容如下

[client]
default-character-set=utf8
[mysqld]
character-set-server=utf8

结构如下,安装mysql之前的文章说过,就不详细说明了

在/home/java-app目录下执行命令

docker-compose up -d --build

出现下图即可,然后进行下一步

查看容器运行状态是否正常

docker-compose ps

进入mysql容器,执行初始化脚本

docker exec -it cxs.mysql.com bash

执行如下命令

mysql -uroot -proot < /usr/local/sql/init.sql

退出来,Ctrl+p+q

访问页面,我的虚拟机ip是10.10.10.10:http://10.10.10.10:2023/index.html

大功告成,鼓掌

结语

经验分享 程序员 微信小程序 职场和发展