欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Docker 单个容器运行多个war、jar

程序员文章站 2022-07-14 08:49:33
...
  • 方法一:
    Dockerfile
#基础镜像
FROM java:8

RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' >/etc/timezone

#把你的项目war包引入到容器的root目录下
COPY *.war /app.war

RUN echo \
"#!/bin/sh\n"\
"nohup java -jar /app.war --server.port=8085 &\n"\
"nohup java -jar /app.war --server.port=8086 &"\
>> /start.sh

RUN chmod +x /start.sh
CMD nohup sh -c "/start.sh && java -jar /app.war --server.port=8087"

  • 方法二
    Dockerfile
#基础镜像
FROM java:8

RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' >/etc/timezone

#把你的项目war包引入到容器的root目录下
COPY *.war /app.war
COPY shell.sh /shell.sh

#项目的启动方式
ENTRYPOINT ["./shell.sh"]

shell.sh

#!/bin/bash

# 命令后加入 & ,保持程序后台持续运行
nohup java -jar /app.war --server.port=8085 & 
nohup java -jar /app.war --server.port=8086 &

# 死循环,保持docker前台运行
while [[ true ]]; do
    sleep 1
done

或者

#!/bin/bash

# 命令后加入 & ,保持程序后台持续运行
nohup java -jar /app.war --server.port=8085 & 
java -jar /app.war --server.port=8086

docker-compose.yml

version: '3.8'
services:
    demo-dk:
        image: demo-dk:1.0
        build:
          context: .
          dockerfile: Dockerfile
        ports:
            - "8085:8085"
            - "8086:8086"
            - "8087:8087"
        logging:
            driver: 'json-file'
            options:
                max-size: '30m'
                max-file: '5' 

docker.sh

docker-compose down && docker rmi -f demo-dk:1.0 && docker-compose up -d --build

测试时将war、Dockerfile、shell.sh、docker.sh 放在同一目录下,执行

sh docker.sh

完整源码参考: https://gitee.com/00fly/demo-docker/tree/master/1-n

相关标签: docker docker