Dockerfile多工程构建以及启动脚本(docker容器之间使用link通信)
业务需要给用户准备一个随时部署的demo,多工程构建到一个镜像,并打包提供启动脚本
- Dockerfile
FROM centos:centos7
MAINTAINER humingfeng
# 1.准备工作创建文件夹
RUN \
mkdir -p /usr/local
# 复制文件
COPY jdk-7u80-linux-x64.tar.gz /usr/local
COPY apache-tomcat-7.0.91-auth.tar.gz /usr/local
COPY apache-tomcat-7.0.91-tdesop.tar.gz /usr/local
COPY redis-5.0.0.tar.gz /usr/local
COPY redis.conf /usr/local
#安装vim编辑器
RUN yum -y install vim && yum -y install gcc automake autoconf libtool make
# 安装JDK
RUN \
cd /usr/local \
&& tar -xzf jdk-7u80-linux-x64.tar.gz
# 安装redis
RUN \
yum install gcc -y \
&& cd /usr/local \
&& tar -xzf redis-5.0.0.tar.gz \
&& rm -rf redis-5.0.0.tar.gz \
&& cd redis-5.0.0 && yum -y install tcl && make && make install \
&& cd /usr/local \
&& cp redis.conf redis-5.0.0/src \
&& rm -rf /var/cache/yum/*
# 解压tomcat
RUN \
cd /usr/local \
&& tar -xzf apache-tomcat-7.0.91-auth.tar.gz \
&& tar -xzf apache-tomcat-7.0.91-tdesop.tar.gz
#设置工作访问时候的WORKDIR路径,登陆落脚点
ENV MYPATH /usr/local
WORKDIR $MYPATH
# 配置java与tomcat环境变量
ENV JAVA_HOME /usr/local/jdk-7u80-linux-x64
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH $PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
EXPOSE 8080 8081 6379
ENTRYPOINT /usr/local/redis-5.0.0/src/redis-server redis.conf && /usr/local/apache-tomcat-7.0.91-tdesop/bin/startup.sh && /usr/local/apache-tomcat-7.0.91-auth/bin/startup.sh && tail -f /usr/local/apache-tomcat-7.0.91-tdesop/logs/catalina.out
CMD /usr/sbin/init
- 启动脚本
将修改的容器提交镜像并打tar包后,写启动脚本(PS:由于后面多了一个关联的MySQL镜像,故不需要的可以自行删除注释,需要的自己准备MySQL镜像并导出数据)
#! /bin/bash
# author:humingfeng
# description:自定义数据交换平台镜像运行
PRO_NAME_BUILD="3dportal/person"
DB_NAME_BUILD="mysql/person"
echo "****欢迎使用自定义镜像docker服务!****"
echo "****第一步:检查当前目录下的自定义镜像****"
if test -w portal.tar
then
echo '==>>镜像文件存在并可写!'
else
echo '==>>镜像文件不存在或者没有写权限!开始赋予权限中'
chmod 755 portal.tar
if test -w portal.tar
then
echo '==>>镜像文件可写!'
else
echo '==>>镜像文件不存在或者无法赋予写权限!'
exit 126
fi
fi
echo "****第二步:判断docker环境,如果存在相同容器和镜像则删除****"
if docker ps -a | grep -i $PRO_NAME_BUILD ; then
docker rm -f $PRO_NAME_BUILD
docker rmi -f $PRO_NAME_BUILD
echo "==>>删除已存在工程容器和镜像"
else
echo "==>>不存在工程容器"
fi
if docker ps -a | grep -i $DB_NAME_BUILD ; then
docker rm -f $DB_NAME_BUILD
docker rmi -f $DB_NAME_BUILD
echo "==>>删除已存在数据库容器和镜像"
else
echo "==>>不存在数据库容器"
fi
echo "****第三步:导入自定义镜像****"
docker load < portal.tar
echo "****第四步:指定自定义镜像运行容器****"
docker run -p 3306:3306 --name person_mysql -e MYSQL_ROOT_PASSWORD=Gwssi@2017 -d $DB_NAME_BUILD
docker run --name 3dportal --link person_mysql:mysql_person -d -p 8080:8080 -d -p 8081:8081 -d -p 6379:6379 $PRO_NAME_BUILD
echo "****容器启动成功:交换平台登录端口:8080,认证登录端口:8081,MySQL端口:3306,Redis端口:6379****"