如果要有自己的一个docker java 基础环境镜像怎么做?
其实hub.docker.com
已经有这个镜像了
https://hub.docker.com/_/openjdk
只要按照他的说明进行操作,就可以创建你想要的JDK
版本 docker
假设项目JAR
为sentinel-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
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
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