使用Docker-compose部署SpringBoot项目

一、概述

Docker Compose是 docker 提供的一个命令行工具,用来定义和运行由多个容器组成的应用。使用 compose,我们可以通过 YAML 文件声明式的定义应用程序的各个服务,并由单个命令完成应用的创建和启动。

二、安装

运行此命令下载docker compose的当前稳定版本:

sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

对二进制文件应用可执行权限

sudo chmod +x /usr/local/bin/docker-compose

创建链接

ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

查看版本

docker-compose --version

三、构建目录结构

构建mysql、redis、程序jar包的目录结构
在这里插入图片描述
mysql目录说明:
my.cnf是mysql的配置文件,不配置可以用默认的。
init目录下是业务数据库的可执行脚本,用于初始化数据库的。
data目录是存放数据的目录

redis目录说明:
redis.config是redis的配置文件
data目录是存放数据的目录

web目录说明:
dockerfile是业务系统的docker文件
frame-admin.jar是打好的包,用于制作镜像的。

dockerfile文件内容

FROM openjdk:8-jdk-alpine
VOLUME /tmp
ADD frame-admin.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

四、控制服务的启动顺序

往往我们在部署的时候都需要设置服务的顺序,所以我们添加一个脚本控制启动的顺序
我们在根目录下添加一个entrypoint.sh文件,内容如下。

#!/bin/bash
#set -x
#******************************************************************************
# @file    : entrypoint.sh
# @author  : simon
# @date    : 2018-08-28 15:18:43
#
# @brief   : entry point for manage service start order
# history  : init
#******************************************************************************

: ${SLEEP_SECOND:=2}

wait_for() {
    echo Waiting for $1 to listen on $2...
    while ! nc -z $1 $2; do echo waiting...; sleep $SLEEP_SECOND; done
}

DEPENDS=""
CMD=""

while getopts "d:c:" arg
do

    case $arg in
        d)
            DEPENDS=$OPTARG
            ;;
        c)
            CMD=$OPTARG
            ;;
        ?)
            echo "unkonw argument"
            exit 1
            ;;
    esac
done

for var in ${DEPENDS//,/ }
do
    echo $var
    host=${var%:*}
    echo $host
    port=${var#*:}
    echo $port
    wait_for $host $port
done

eval $CMD
#避免执行完命令之后退出容器
tail -f /dev/null

这个脚本有两个参数
-d: 需要等待的服务和端口,例如:mysql:3306,redis:6379;
-c: 等待的服务和端口启动之后, 自己的启动命令,例如:java -jar app.jar

然后我们修改web程序的dockerfile

FROM openjdk:8-jdk-alpine
VOLUME /tmp
ADD frame-admin.jar app.jar
ADD entrypoint.sh /entrypoint.sh
RUN chmod +x entrypoint.sh
RUN apk --no-cache add netcat-openbsd
ENTRYPOINT ["sh","/entrypoint.sh","-d","redis:6379,mysql:3306", "-c","java -Djava.security.egd=file:/dev/./urandom -jar /app.jar"]

五、编写配置文件

# yaml 配置
version: '3'
services: # 配置各种服务
  web: # web服务
    build: .
    ports:
     - "8080:8080"
    networks:
      - lnmp
    depends_on:
     - mysql
     - redis
  redis: # redis服务
    image: redis
    container_name: redis
    hostname: redis
    restart: always
    ports:
      - 6379:6379
    networks:
      - lnmp
    volumes:
      - ./redis/config/redis.conf:/etc/redis/redis.conf:rw # 挂载配置文件目录
      - ./redis/data:/data:rw # 挂载数据目录
    command:
      redis-server /etc/redis/redis.conf --appendonly yes
  mysql: # mysql服务
    hostname: mysql
    container_name: mysql
    image: mysql:5.6            #下载镜像mysql5.6版本
    restart: always
    ports:
      - 3306:3306
    networks:
      - lnmp
    command: --character-set-server=utf8         #执行命令,覆盖默认命令
    environment:                            #添加环境变量
      MYSQL_ROOT_PASSWORD: 111111
      MYSQL_DATABASE: zxhycloudnew
      MYSQL_USER: system
      MYSQL_PASSWORD: 123456
    volumes:
      - ./mysql/data:/var/lib/mysql           # 挂载数据目录
      - ./mysql/config:/etc/mysql/conf.d      # 挂载配置文件目录
      - ./mysql/init:/docker-entrypoint-initdb.d/ # 初始化sql目录文件目录
networks:          #加入网络lnmp,引用顶级networks下条目
  lnmp:

六、 启动Docker-compose

docker-compose up -d
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值