一个创建 docker java jar项目案例 docker-sentinel

如果要有自己的一个docker java 基础环境镜像怎么做?

方式一

其实hub.docker.com已经有这个镜像了

https://hub.docker.com/_/openjdk

只要按照他的说明进行操作,就可以创建你想要的JDK版本 docker
假设项目JARsentinel-dashboard.jar,存放的文件位置是当前目录/demo
那么在此目录下/demo执行命令,创建容器

docker run --name demo  -v "$PWD":/usr/src/myapp \
-w /usr/src/myapp \
-p 8080:8080 \
openjdk:8u191-jdk-alpine3.8 java -jar sentinel-dashboard.jar

注意:$PWD 就是当前目录
-v 映射目录
-w 设置容器工作目录
-p 映射端口
openjdk:8u191-jdk-alpine3.8 镜像和tag版本
java -jar sentinel-dashboard.jar 执行的命令

方式二

这边对方式一的镜像进行一个处理
Dockfile

#镜像源
FROM openjdk:8u191-jdk-alpine3.8
MAINTAINER foxiswho@gmail.com
#镜像变量
ARG version
ARG ip
ARG port

# 镜像内部自定义环境变量,并赋值
# sentinel version
ENV SENTINEL_VERSION ${version:-1.4.1}
#host
ENV IP ${ip:-localhost}
#ip
ENV PORT ${port:-8080}

# 设置项目目录
# sentinel home
ENV SENTINEL_HOME  /opt/
ENV SENTINEL_LOGS  /opt/logs

# 设置时区
#tme zone
RUN rm -rf /etc/localtime \
&& ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

# 创建日志目录
# create logs
RUN mkdir -p ${SENTINEL_LOGS}

# 复制JAR项目
COPY sentinel-dashboard.jar ${SENTINEL_HOME}

# 设置JAR 执行权限
RUN chmod -R +x ${SENTINEL_HOME}/*jar

#设置镜像目录
VOLUME ${SENTINEL_LOGS}

#设置工作目录
WORKDIR  ${SENTINEL_HOME}
# 对外短裤
EXPOSE ${PORT}
# 执行程序
CMD java ${JAVA_OPTS} -jar sentinel-dashboard.jar

编译镜像

docker build -t sentinel:1.4.1 ./

生成容器

docker run --name demo  -v "$PWD":/opt -p 8080:8080 sentinel:1.4.1

方式三 使用docker-compose

Dockerfile

FROM openjdk:8u191-jdk-alpine3.8
MAINTAINER foxiswho@gmail.com

ARG version
ARG ip
ARG port

# sentinel version
ENV SENTINEL_VERSION ${version:-1.4.1}
#host
ENV IP ${ip:-localhost}
#ip
ENV PORT ${port:-8080}


# sentinel home
ENV SENTINEL_HOME  /opt/
ENV SENTINEL_LOGS  /opt/logs

#tme zone
RUN rm -rf /etc/localtime \
&& ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

# create logs
RUN mkdir -p ${SENTINEL_LOGS}

# test file
COPY sentinel-dashboard.jar ${SENTINEL_HOME}

# add scripts
#COPY scripts/* /usr/local/bin/
RUN chmod +x /usr/local/bin/docker-entrypoint.sh \
&& ln -s /usr/local/bin/docker-entrypoint.sh /docker-entrypoint.sh

#
RUN chmod -R +x ${SENTINEL_HOME}/*jar

VOLUME ${SENTINEL_LOGS}

WORKDIR  ${SENTINEL_HOME}

EXPOSE ${PORT}

CMD java ${JAVA_OPTS} -jar sentinel-dashboard.jar

docker-compose.yml 文件

version: '3.5'

services:
  demo:
    build: ./
    hostname: demo
    container_name: demo
    ports:
      - "8080:8080"
    environment:
      - JAVA_OPTS=-Dcsp.sentinel.log.dir=/opt/logs -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard  -Djava.security.egd=file:/dev/./urandom
    volumes:
      - ./:/opt/logs
      - ./logs:/opt/logs

当前目录下直接执行

docker-compose up

方式四 使用docker-compose

Dockerfile

FROM openjdk:8u191-jdk-alpine3.8
MAINTAINER foxiswho@gmail.com

ARG version
ARG ip
ARG port

# sentinel version
ENV SENTINEL_VERSION ${version:-1.4.1}
#host
ENV IP ${ip:-localhost}
#ip
ENV PORT ${port:-8080}


# sentinel home
ENV SENTINEL_HOME  /opt/
ENV SENTINEL_LOGS  /opt/logs

#tme zone
RUN rm -rf /etc/localtime \
&& ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

# create logs
RUN mkdir -p ${SENTINEL_LOGS}

# test file
COPY sentinel-dashboard.jar ${SENTINEL_HOME}

# add scripts
COPY scripts/* /usr/local/bin/
RUN chmod +x /usr/local/bin/docker-entrypoint.sh \
&& ln -s /usr/local/bin/docker-entrypoint.sh /docker-entrypoint.sh

#
RUN chmod -R +x ${SENTINEL_HOME}/*jar

VOLUME ${SENTINEL_LOGS}

WORKDIR  ${SENTINEL_HOME}

EXPOSE ${PORT}

ENTRYPOINT ["docker-entrypoint.sh"]

CMD java ${JAVA_OPTS} -jar sentinel-dashboard.jar

创建scripts/docker-entrypoint.sh文件
内容如下

#!/bin/bash


export JAVA_OPTS="-Dserver.port=${PORT} -Dcsp.sentinel.dashboard.server=${IP}:${PORT} -Dcsp.sentinel.log.dir=${SENTINEL_LOGS} -Dproject.name=sentinel-dashboard -Djava.security.egd=file:/dev/./urandom ${JAVA_OPTS}"

echo "JAVA_OPTS============"
echo "JAVA_OPTS============"
echo "JAVA_OPTS============"
echo $JAVA_OPTS


exec "$@"

在根目录下 创建docker-compose.yml
内容如下

version: '3.5'

services:
  demo:
    build: ./
    hostname: demo
    container_name: demo
    ports:
      - "8080:8080"
    environment:
      - JAVA_OPTS=-Dcsp.sentinel.log.dir=/opt/logs
    volumes:
      - ./:/opt/logs
      - ./logs:/opt/logs

当前目录下直接执行

docker-compose up

方式五 其他

直接看地址 https://github.com/foxiswho/docker-sentinel
镜像地址 https://hub.docker.com/r/foxiswho/sentinel
scripts目录下,创建docker-entrypoint.sh文件.
内容如下

#!/bin/bash
export JAVA_OPTS="-Dserver.port=${PORT} -Dcsp.sentinel.dashboard.server=${IP}:${PORT} -Dcsp.sentinel.log.dir=${SENTINEL_LOGS} -Dproject.name=sentinel-dashboard -Djava.security.egd=file:/dev/./urandom ${JAVA_OPTS}"

echo "JAVA_OPTS============"
echo "JAVA_OPTS============"
echo "JAVA_OPTS============"
echo $JAVA_OPTS

exec "$@"

内容意思是设置JAVA_OPTS内容的环境变量

在根目录中创建Dockerfile

# 镜像源
FROM centos:7
#作者
MAINTAINER foxiswho@gmail.com
# 镜像自定义参数变量,用于创建镜像时传入
ARG version
ARG ip
ARG port

#自定义镜像容器内,环境变量
# sentinel version
ENV SENTINEL_VERSION ${version:-1.4.1}
#host
ENV IP ${ip:-localhost}
#ip
ENV PORT ${port:-8080}

#设置项目目录及日志目录
# sentinel home
ENV SENTINEL_HOME  /opt/
ENV SENTINEL_LOGS  /opt/logs

#tme zone 设置时区
RUN rm -rf /etc/localtime \
&& ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

# 安装一些软件
RUN yum install -y java-1.8.0-openjdk-headless unzip gettext nmap-ncat openssl wget\
 && yum clean all -y

# create logs 创建日志目录
RUN mkdir -p ${SENTINEL_LOGS}

#下载指定版本的软件,并移动到指定的目录
# get the version
RUN cd /  \
 && wget https://github.com/alibaba/Sentinel/releases/download/${SENTINEL_VERSION}/sentinel-dashboard-${SENTINEL_VERSION}.jar -O sentinel-dashboard.jar \
 && mv sentinel-dashboard.jar ${SENTINEL_HOME}
# test file
#COPY sentinel-dashboard.jar ${SENTINEL_HOME}

#复制自定义的shell 文件到指定目录下
# add scripts
COPY scripts/* /usr/local/bin/
RUN chmod +x /usr/local/bin/docker-entrypoint.sh \
&& ln -s /usr/local/bin/docker-entrypoint.sh /opt/docker-entrypoint.sh

# 设置项目文件为可执行文件权限
RUN chmod -R +x ${SENTINEL_HOME}/*jar
# 映射目录
VOLUME ${SENTINEL_LOGS}
#工作目录
WORKDIR  ${SENTINEL_HOME}
#映射端口
EXPOSE ${PORT}
# 用于设置容器启动后的第一个命令
ENTRYPOINT ["docker-entrypoint.sh"]
#用于设置容器启动的第一个命令的默认参数
CMD java ${JAVA_OPTS} -jar sentinel-dashboard.jar

其他说明

本案例
使用的Sentinel 版本
https://github.com/alibaba/Sentinel/releases/tag/1.4.1
案例地址
https://github.com/foxiswho/docker-java-sentinel-demo

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风.foxwho

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值