在Docker中部署springboot项目

文件结构以fdfs上传文件应用为例:


fdfs
--jar 文件夹
  --lib 依赖包
  --xxx.jar jar文件
--Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明
--startup.sh jar文件执行脚本



Dockerfile内容

From java8:latest
# 将运行脚本加入到容器中
COPY startup.sh /shell/startup.sh
# 指定容器时区:东八区
ENV TZ=Asia/Shanghai 
# 中文日志乱码
ENV LANG en_HK.utf8
# 权限和时区 创建jar包目录
RUN chmod +x /shell/startup.sh \
    && ln -snf /usr/share/zoneinfo/$TZ /etc/localtime \
    && echo $TZ > /etc/timezone \
    && mkdir jar
# 挂载 jar目录
VOLUME ["/jar"]
# 进行运行脚本
CMD [ "sh","/shell/startup.sh" ]


注意:Dockerfile 的指令每执行一次都会在 docker 上新建一层。所以过多无意义的层,会造成镜像膨胀过大。例如:


FROM centos
RUN yum -y install wget
RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz"
RUN tar -xvf redis.tar.gz


以上执行会创建 3 层镜像。可简化为以下格式:


FROM centos
RUN yum -y install wget \
    && wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \
    && tar -xvf redis.tar.gz


对于dockerfile中的From java8:latest是自己构建的镜像,如何拷贝本地镜像如下:

https://blog.csdn.net/guoqingru0311/article/details/124212885

将镜像打包成本地文件
指令:docker save 镜像id > 文件名.tar


加载本地文件到镜像:
指令:docker load < 文件名.tar


执行完上述语句后,查看本地镜像,会看到新加载的镜像名字和标签都是none,利用该镜像的id对名字和标签重新命名即可:
指令:docker tag 镜像id 镜像名:标签

docker tag eba167b421f9 java8:latest


创建容器
指令:docker run -it --name java8 172825a55619 /bin/bash
java8 :容器名称
172825a55619 :镜像id

startup.sh内容

#!/bin/bash
# 服务名
server_name="fdfs"
kill -s 9 `ps -aux | grep $server_name | awk '{print $2}'`
# 切换到jar目录启动,目的配置外置
cd /jar
# 启动
java -jar -Duser.timezone=GMT+08 -Dloader.path=lib \
-XX:+HeapDumpOnOutOfMemoryError \
-Xms512m -Xmx512m \
$server_name.jar


构建镜像和启动容器

docker build -t fdfs .
docker run -di --net=host --restart=always --name=fdfs -v /etc/localtime:/etc/localtime -v /usr/local/docker/service/fdfs/jar:/jar --privileged=true fdfs