docker-compose部署springboot应用
最开始使用tomcat部署java应用,如果要部署多个系统,我通常部署多个tomcat,每个tomcat一个系统,可以添加到系统服务自动启动。后来随着springboot流行,改为将应用打成jar包直接通过jar包启动,这样部署很方便,但是设置后台服务不方便,并且每次启动要去查启动参数(当然也可以写一个shell脚本辅助)。
再后来随着docker流行,改为使用docker部署,倒是方便很多。这里介绍我使用docker和docker-compose部署的操作
1. 准备基础镜像
需要准备一个具有java环境的基础镜像,我使用centos7(centos7不久以后停止官方支持,可以考虑使用其他linux),然后加入jdk、字体,并修改环境变量等配置。下面是Dockerfile
(字体是因为我的项目里要生成中文的图片,没有字体会有乱码问题。jdk和字体可以自行在网上找到)
将jdk、字体放在同一个目录,然后执行docker build -t c7_j8_app .
即可制作镜像(c7代表centos7,j8是jdk8,app是应用名称)
#制作centos-jdk1.8镜像
FROM centos:7
MAINTAINER fantoutou@163.com
ENV TZ=Asia/Shanghai
#复制jdk
ADD jdk/jdk1.8 /usr/local/jdk1.8/
#设置java环境变量
ENV JAVA_HOME /usr/local/jdk1.8
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH $PATH:$JAVA_HOME/bin
ENV LANG en_US.UTF-8
ENV LC_ALL en_US.UTF-8
#增加宋体字体
#复制本地字体库(fonts是Dockerfile同级目录)
ADD simsun.ttc /usr/share/fonts/chn/simsun.ttc
#安装字体库
RUN yum -y install fontconfig \
&& chmod 777 /usr/share/fonts/chn \
&& yum -y install ttmkfdir \
&& ttmkfdir -e /usr/share/X11/fonts/encodings/encodings.dir \
&& fc-cache
2. docker-compose启动
都是常用的参数和命令。因为network_mode使用的是host模式,所以没有做端口映射。
我使用start.sh脚本启动,主要是因为日志问题没有找到更好额解决方法
下面是 docker-compose.yml
version: '2'
services:
app:
image: c7_j8_app
restart: always
container_name: app_dev
privileged: true
working_dir: /home/app
entrypoint: sh /home/app/start.sh
network_mode: host
environment:
- SPRING_PROFILES_ACTIVE=dev
- server.port=8085
- JAVA_OPTS=-Xms4g -Xmx4g
volumes:
# 应用目录
- ./app:/home/app:rw
# 启动脚本
- ./start.sh:/home/app/start.sh
# 附件目录映射
- /home/app/attachments:/home/app/attachments:rw
# 日志路径映射
- /home/log:/home/log:rw
start.sh
nohup java -jar app-exec.jar > ./app.log &
tail -f app.log
3. 其他
如果要部署多台服务器,可以搭一个harbor,然后把基础镜像或者应用镜像传到harbor,然后在要部署的服务器拉取镜像启动即可。