前面从理论的角度给大家介绍了两种制作镜像的方式,这篇文章我们将针对第一种方式即使用dockerfile的方式来制作一个集成了ssh与tomcat的镜像文件。

首先为大家说明一下制作这个镜像所要达到的目标,其一我们希望这个镜像能够通过xshell进行连接,其二我们希望通过xhsell来控制tomcat的启动与停止,并且可以向tomcat中部署程序,达到制作一次镜像可以为多个项目服务的目的,为了达到这个目的,我们还需要上传我们制作完毕的镜像到网易蜂巢。

下面为大家介绍一下我们需要用到的一些资源,首先是基础镜像,这里我们采用centos的镜像作为基础镜像,由于从docker官网下载很慢,所以我们从国内的镜像仓库进行下载,我这里使用的镜像仓库是网易蜂巢。我们需要准备应用程序,包括jdk与tomcat,我这里使用的jdk1.8与tocmat7,还可以准备一个测试使用的war包。

1.我们先编辑Dockerfile

在linux中执行 vi Dockerfile命令,编辑Dockerfile,下面是dockerfile的具体内容,直接贴出来了


from hub.c.163.com/library/centos:latest
MAINTAINER zw 894904692@qq.com
# 安装openssh-server和sudo软件包,并且将sshd的UsePAM参数设置成no  
RUN yum install -y openssh-server sudo  
# 初始化ssh登陆
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N ''
RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key -N ''
RUN ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N ''
RUN ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -N ''
RUN echo "RSAAuthentication yes" >> /etc/ssh/sshd_config
RUN echo "PubkeyAuthentication yes" >> /etc/ssh/sshd_config   
   
# 添加测试用户admin,密码admin,并且将此用户添加到sudoers里  
RUN useradd admin  
RUN echo "admin:admin" | chpasswd  
RUN echo "admin   ALL=(ALL)       ALL" >> /etc/sudoers 
# 安装jdk  
RUN mkdir -p /zw/java/jdk1.8
ADD jdk /zw/java/jdk1.8
RUN chmod -R 777 /zw/java/jdk1.8
#安装tomcat
RUN mkdir -p /zw/tomcat/tomcat7
ADD tomcat7 /zw/tomcat/tomcat7
RUN chmod -R 777 /zw/tomcat/tomcat7
#设置环境变量
ENV JAVA_HOME /zw/java/jdk1.8
ENV PATH $PATH:$JAVA_HOME/bin  
#设置容器中的环境变量
RUN echo "export JAVA_HOME=/zw/java/jdk1.8" >> /etc/profile
RUN echo "export PATH=$JAVA_HOME/bin:$PATH " >> /etc/profile
RUN echo "export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar " >> /etc/profile
#设置tomcat中catalina.sh的环境变量,否则tomcat停止时会报错
RUN sed -i '1i\export JAVA_HOME=/zw/java/jdk1.8' /zw/tomcat/tomcat7/bin/catalina.sh
RUN sed -i '1i\export JRE_HOME=/zw/java/jdk1.8/jre' /zw/tomcat/tomcat7/bin/catalina.sh
#使环境变量立即生效
RUN source /etc/profile
# 启动sshd服务并且暴露22端口  
EXPOSE 22  
EXPOSE 8080
ENTRYPOINT ./zw/tomcat/tomcat7/bin/startup.sh &&  /usr/sbin/sshd -D

有了dockerfile,剩下的步骤就很简单了,我们只需要执行命令:

docker build -t IMAGENAME:TAG . 就可以生成我们自己的tomcat镜像。

生成镜像以后我们可以使用命令:docker run -d -p 2222:22 -p 8085:8080 IMAGENAME:TAG 来运行镜像生成容器,之后我们可以使用xhsell连接容器,注意指定端口为2222。

也可以访问ip:8085来查看tomcat是否启动。可以通过xshell来停止与启动tomcat,也可以向tomcat中放入项目进行测试。

下面是在编辑dockerfile时遇到的问题及解决方式:

当我们使用xshell连接容器时,无法停止或启动tomcat,最后发现原因是由于环境变量和权限问题引起的,所以我在dockerfile中执行了chmod -R 777 来赋予权限。在我们停止或启动tomcat时,需要sudo。并在catalina中配置了java与jre,并且为容器配置了java环境变量。


最后为了能够随时使用我们制作完毕的镜像,我们需要把镜像放入网易蜂巢的镜像仓库,具体方式可以查看连接:

http://support.c.163.com/md.html#!计算服务/镜像仓库/使用指南/构建镜像/推送本地镜像.md