dockerfile搭建centos,集成java,maven环境,提供远程SSH

Posted by     "麦子" on Wednesday, 2019年05月08日

[TOC]

说明: 用docker+vscode,搭建本地开发环境

dockerfile

集成ssh,java,maven环境


# install centos7
FROM centos:7
RUN yum -y install net-tools  

#常用命令下载
RUN yum -y install wget
RUN yum install -y curl


#配置ssh 
RUN yum -y  install  openssh-server
RUN sed -i 's/#PermitRootLogin yes/PermitRootLogin yes/g' /etc/ssh/sshd_config
RUN sed -i 's/#PubkeyAuthentication yes/PubkeyAuthentication yes/g' /etc/ssh/sshd_config
RUN cat /etc/ssh/sshd_config 


#创建一个新用户
RUN useradd  maizissh -d /home/maizissh
RUN mkdir /home/maizissh/.ssh
RUN chown -R maizissh. /home/maizissh/.ssh
COPY id_rsa.pub /usr/local/macrsa/
RUN cd /usr/local/macrsa/ && ls -l 
RUN cat /usr/local/macrsa/id_rsa.pub >> /home/maizissh/.ssh/authorized_keys
RUN cat /home/maizissh/.ssh/authorized_keys
RUN chmod 700 /home/maizissh/.ssh
RUN chmod 600 /home/maizissh/.ssh/authorized_keys


# install java
COPY jdk-8u11-linux-x64.tar.gz /usr/local/java/
RUN cd /usr/local/java/ && ls && tar -xvf jdk-8u11-linux-x64.tar.gz && ls
ENV JAVA_HOME /usr/local/java/jdk1.8.0_11
ENV CLASSPATH $JAVA_HOME/lib;$JAVA_HOME/jre/lib
ENV PATH $PATH:$JAVA_HOME/bin
RUN java -version
RUN echo "java success"


# install maven
RUN cd /usr/local/ && mkdir maven
RUN wget http://apache-mirror.rbc.ru/pub/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz
RUN mv apache-maven-3.3.9-bin.tar.gz  /usr/local/maven/  && ls 
RUN cd /usr/local/maven/ && tar -xzvf apache-maven-3.3.9-bin.tar.gz && ls
ENV MAVEN_HOME /usr/local/maven/apache-maven-3.3.9
ENV PATH $JAVA_HOME/bin:$MAVEN_HOME/bin:$PATH
RUN mvn -version
RUN echo "maven success"


# COPY java_maven.sh /usr/bin/java_maven.sh
# RUN  chmod +x  /usr/bin/java_maven.sh

#安装java和maven环境
# CMD [ "java_maven.sh" ]
# CMD ["/usr/sbin/init"]

注意 :ENV命令只是用当前的,不会去修改/etc/profile的文件,用 echo ‘MAVEN_HOME=/usr/local/maven/apache-maven-3.3.9’»/etc/profile 添加到配置文件中,就永远的生效了。 不然退出去后,在进来,环境配置就失效了

SSH配置

centos容器中,我就设置了这两个地方, 其他一些配置,在容器centos中,并没有,我是通过秘钥连接的。

PermitRootLogin yes   #禁用root账户登录,如果是用root用户登录请开启
PubkeyAuthentication yes 

启动容器脚本

秘钥登录ssh,/Users/maizi/.ssh known_hosts 这个文件有时候需要删除已经链接的IP地址, 看具体错误查看这个文件

#!/usr/bin/env bash

build() {
    cd /Users/maizi/.ssh
    rm -rf id_rsa
    ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
    cp -fp ~/.ssh/id_rsa.pub ~/工具/dockerBuild
    echo "mac秘钥 success"

    #开始构建
    cd /Users/maizi/工具/dockerBuild
    docker build -t mycentos7 .

}

start() {
    #运行
    docker run -itd --name mycentos7 -p 22:22 --privileged=true mycentos7 /usr/sbin/init
}


stop() {
    docker stop mycentos7
    docker rm mycentos7
}

remove() {
    docker stop mycentos7
    docker rm mycentos7
    docker rmi mycentos7
}

check() {
    docker exec -it mycentos7 bash
}

#使用说明,用来提示输入参数
usage() {
    echo "Usage: sh 执行脚本.sh [start|stop|restart]"
    exit 1
}

case "$1" in
"build")
    build
    start
    ;;
"start")
    start
    ;;
"stop")
    stop
    ;;
"check")
    check
    ;;
"restart")
    echo "restart......"
    stop
    start
    echo "restart success"
    ;;
*)
    check
    ;;
esac

问题

直接构建的容器,进去后,已经安装好了java和maven环境,但是,直接连接SSH,用终端进入查看,环境并没有安装好, 现在也不知道,为什么容器进入有开发环境,终端连接没有,也许是因为重新连接了一个终端,环境没有用了,所以下面有一个脚本,安装环境。

java,maven脚本

#!/usr/bin/env bash

#
echo "install java maven 环境"

#安装java环境
cd /usr/local/java/ && ls && tar -xvf jdk-8u11-linux-x64.tar.gz && ls
echo 'export JAVA_HOME=/usr/local/java/jdk1.8.0_11'>>/etc/profile
echo 'export CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar'>>/etc/profile
echo 'export PATH=$PATH:$JAVA_HOME/bin'>>/etc/profile
source /etc/profile
java -version
echo "java success"

#安装maven环境
cd /usr/local/ && mkdir maven
wget http://apache-mirror.rbc.ru/pub/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz
mv apache-maven-3.3.9-bin.tar.gz /usr/local/maven/ && ls
cd /usr/local/maven/ && tar -xzvf apache-maven-3.3.9-bin.tar.gz && ls
echo 'export MAVEN_HOME=/usr/local/maven/apache-maven-3.3.9'>>/etc/profile
echo 'export PATH=$JAVA_HOME/bin:$MAVEN_HOME/bin:$PATH'>>/etc/profile
source /etc/profile
mvn -version
echo "maven success"

source /etc/profile

注意: source /etc/profile #针对用户 source /etc/bashrc #针对系统,所以我修改 /etc/bashrc文件, 加入export这些操作,在重新连接终端,可以有java和maven环境。

效果图

vscode安装SFTP插件,可以实现本地和远程服务端的文件传输。下面是直接进入容器内的centos系统。

5-8

「真诚赞赏,手留余香」

真诚赞赏,手留余香

使用微信扫描二维码完成支付