基于ubutu的Java环境的Dockerfile

  • 开发或者日常使用docker容器时,官方的ubuntu镜像和jdk镜像并不能很好的符合自己的需求,这时候就需要定制镜像。

  • 由于ubuntu的实用性和通用性,所以镜像基于ubuntu制作,这样后续操作或者自己加软件很方便

制作ubuntu的ssh镜像
#基于的官方镜像
FROM ubuntu:18.04
#作者
MAINTAINER ZHULIN <871707394@qq.com>
#RUN执行命令
RUN apt-get update && apt-get install -y openssh-server && apt-get install -y vim && apt-get install -y git && apt-get install -y wget
RUN mkdir /var/run/sshd
#xxxx为自己的root密码
RUN echo 'root:xxxx' |chpasswd

RUN sed -ri 's/^#?PermitRootLogin\s+.*/PermitRootLogin yes/' /etc/ssh/sshd_config

RUN sed -ri 's/UsePAM yes/#UsePAM yes/g' /etc/ssh/sshd_config

RUN mkdir /root/.ssh

RUN apt-get clean && \
    rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
#设置时区,不然运行的容器时间错误,并且无法修改
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

ADD run.sh /run.sh
RUN chmod +x /*.sh

EXPOSE 22

CMD ["/run.sh"]

添加run.sh,为了方便以后添加开机启动的任务,后续自己的开机启动任务可以ssh进容器,通过修改/run.sh文件实现

#!/bin/bash

exec /usr/sbin/sshd -D

将dockerfile和run.sh文件放一个目录下,然后执行

docker build -t xxxxx:v1.0 ./xxx/

第一个xx为文件名,第二个是刚才放dockerfile的文件夹,v1.0为tag可自定义
这样就编译成了带ssh的ubuntu镜像了。可以直接在自己的docker中运行了,对22端口映射后,在外可以直接

ssh -p 端口 root@ip

进入容器,和ubuntu服务起一样

docker push zhu260824/ubuntu-base:ssh

上面是我编译好的镜像,可以直接拉取实用
运行方式:

docker run -d --name ubuntujdk -p 7100:22 zhu260824/ubuntu-base:ssh

群晖中,可以直接配置端口和文件映射使用,不需要使用命令

制作带Java环境的镜像
#基础镜像,上一次制作的ssh镜像
FROM zhu260824/ubuntu-base:ssh
#作者
MAINTAINER ZHULIN <871707394@qq.com>
#环境变量
#在这个镜像中,我将所有的环境文件加映射为外部文件,这样可以减小镜像的大小,同时在多个镜像使用时,外部存在一个环境文件夹即可。
ENV JAVA_HOME=/mnt/jdk1.8.0_202
ENV JRE_HOME=$JAVA_HOME/jre
ENV CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
ENV M2_HOME=/mnt/maven
ENV GRADLE_HOME=/mnt/gradle
ENV PATH=$JAVA_HOME/bin:$M2_HOME/bin:$GRADLE_HOME/bin:$PATH

ADD run.sh /run.sh
RUN chmod +x /*.sh
RUN rm -rf /etc/profile
ADD profile /etc/profile

VOLUME ["/mnt/maven"]
VOLUME ["/mnt/gradle"]
VOLUME ["/mnt/jdk1.8.0_202"]

EXPOSE 22

CMD ["/run.sh"]

添加/etc/profile文件,如果不添加,ssh进去后,会无法获取到环境

# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).

if [ "${PS1-}" ]; then
  if [ "${BASH-}" ] && [ "$BASH" != "/bin/sh" ]; then
    # The file bash.bashrc already sets the default PS1.
    # PS1='\h:\w\$ '
    if [ -f /etc/bash.bashrc ]; then
      . /etc/bash.bashrc
    fi
  else
    if [ "`id -u`" -eq 0 ]; then
      PS1='# '
    else
      PS1='$ '
    fi
  fi
fi

if [ -d /etc/profile.d ]; then
  for i in /etc/profile.d/*.sh; do
    if [ -r $i ]; then
      . $i
    fi
  done
  unset i
fi
export JAVA_HOME=/mnt/jdk1.8.0_202
export JRE_HOME=${JAVA_HOME}/jre  
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export M2_HOME=/mnt/maven
export GRADLE_HOME=/mnt/gradle  
export PATH=$JAVA_HOME/bin:$M2_HOME/bin:$GRADLE_HOME/bin:$PATH

run.sh文件

#!/bin/bash

#nohup sh /usr/lib/apache-tomcat-8.5.37/bin/catalina.sh run > tomcat.log 2>&1 & 

exec /usr/sbin/sshd -D

编译执行即可
我编译的版本:

docker push zhu260824/ubuntu-base:jdk8

运行方式

docker run -d --name ubuntujdk -p 7100:22 -v /your/maven:/mnt/maven -v /your/gradle:/mnt/gradle -v /your/jdk1.8.0_202:/mnt/jdk1.8.0_202 zhu260824/ubuntu-base:jdk8

群晖中,可以直接配置端口和文件映射使用,不需要使用命令

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值