用Docker制作一个tomcat启动的ssm项目的镜像(Dockerfile)
1、准备一个含有docker环境的Linux系统(本文用CentOS7);
2、新建一个文件夹专门用来保存打包镜像所需要的文件;
3、新建一个Dockerfile文件,里面的大致内容如下:
FROM nginx:1
#MAINTAINER
MAINTAINER someone <someone@email>
ENV DATABASE_HOST=127.0.0.1
ENV DATABASE_PORT=3306
ENV DATABASE_NAME=apmdb
ENV DB_USER_NAME=apm
ENV DB_PASSWORD=apm
ENV ELASTIC_SEARCH_HOST=127.0.0.1
ENV APP_VERSION=-1.0-SNAPSHOT
ENV APP_NAME=jarname
ENV INSTALL_URL=http://host:port/deploy/${APP_NAME}-${APP_VERSION}.jar
ENV JDK_URL=http://host:port/deploy/jdk-8u211-linux-x64.tar.gz
ENV HTML_URL=http://host:port/deploy/web-front.tar.gz
COPY run.sh nginx.conf /usr/local/
#set timezone
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo 'Asia/Shanghai' >/etc/timezone \
&& curl -SL ${INSTALL_URL} -o /usr/local/${APP_NAME}.jar \
&& curl -SL ${JDK_URL} -o /usr/local/jdk-8u211-linux-x64.tar.gz \
&& curl -SL ${HTML_URL} -o /usr/local/web-front.tar.gz \
&& tar zxvf /usr/local/jdk-8u211-linux-x64.tar.gz -C /usr/local \
&& rm /usr/local/jdk-8u211-linux-x64.tar.gz \
&& tar zxvf /usr/local/web-front.tar.gz -C /usr/local \
&& rm /usr/local/web-front.tar.gz
EXPOSE 80
CMD ["/usr/local/run.sh"]
解释一下其中的参数含义:
FROM | 基于什么镜像的基础上制作该docker文件 |
MAINTAINER | 该docker文件的制作者和维护者信息 |
ENV | 环境变量(有时候会失效,尚不知原因) |
COPY | 要将哪些文件复制粘贴到容器中的哪个路径下 |
RUN | 启动实例时需要执行的所有语句,以 \ && 为分隔符 |
EXPOSE | 容器内的端口 |
CMD | 指定启动实例所要运行的可执行文件 |
Dockerfile还可以有其他的参数,可以自行查询百度或官网,不再赘述。
4、上传需要打成镜像的jar包和zip包(请根据实际项目需要操作,本文的工程后台是jar,前台是zip);
5、准备五个可执行文件sh格式:buildDocker.sh、runDocker.sh、run.sh、deletePs.sh 和 deleteImage.sh;
6、创建镜像(buildDocker.sh):
sudo docker build -t workspace_name/tag_name:app_version .
7、运行镜像,创建实例(runDocker.sh):
sudo docker run -d -p33333:80 --env DATABASE_HOST=172.18.231.176
--env DATABASE_PORT=3306 workspace_name/tag_name:app_version
8、容器内部运行(run.sh):
#!/bin/bash
#copy tomcat
cd /usr/local
cp nginx.conf /etc/nginx/
export JAVA_HOME=/usr/local/jdk1.8.0_211
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
nohup java ${JAVA_OPTS} -Dspring.profiles.active=docker -jar jarname.jar >>jarname.out 2>&1 &
#exec nginx -g 'daemon off;'
exec nginx -g 'daemon off;'
tail -f apm-mi-web-api-1.0.0.out
#su - apm -s /bin/bash /usr/local/apache-tomcat-8.5.24/bin/catalina.sh run
9、删除docker环境中的实例进程(deletePs.sh):
sudo docker rm $(sudo docker ps -a|grep workspace_name/app_name |awk '{print $1}') -f
删除时的搜索方法其实就是linux的grep,根据实例的名称去搜肯定没错。
10、删除镜像(deleteImage.sh):
sudo docker rmi $(sudo docker images |grep workspace_name/app_name |awk '{print $3}')
必须先删除实例再删除镜像。
11、文件夹的结构如下图: