最近公司进行dockerFile的云部署应用,我来主要负责学习dockerfile的书写,并且对商城微服务的进行适配Dockerfile的书写
构建命令
docker build -f aaa -t test ./
运行命令 refund 为 images
docker run -i -t refund /bin/bash
FROM java:1.7
MAINTAINER SystemPlatform@replaceServName
ARG HostIp
ENV ServerPrivateIP=${HostIp:-0.0.0.0} \
JDK_VERSION=1.7 \
ServName=replaceServName \
ServPath=/var/www/javaApplication/
RUN yum install tar -y && mkdir -pv $ServPath
COPY . /tmp
WORKDIR /tmp
RUN mvn -f ./pom.xml install -e -Dmaven.test.skip=true && \
tar xvf /tmp/target/$ServName*.tar.gz -C $ServPath && \
rm -rf /tmp/* && chmod a+x $ServPath/$ServName/shell/*.sh
WORKDIR $ServPath/$ServName/shell/
ENTRYPOINT ["./start.sh"]
以上为单个服务的镜像build通用脚本。
但是在实际情况中我们发现,我们的服务有部分的是有依赖关系的,例如有些查询查询订单信息的服务,没有直接调用订单服务的接口,而是直接引用订单服务的jar包,然后进行构建的。
根据maven本次仓库的特性,因为订单服务更新也是比较频繁的,所以如果每次打包都将最新的订单服务的jar包传送到Nexus私服上面,会使得构建变得很繁重,利用maven本次仓库的特性,每次构建order-serv都会将最新的jar包更新到maven的本地仓库中,所以每次构建需要引用订单服务的的服务的时候我们先进行构建订单服务,这样保证了每次这些服务引用的都是最新的jar包。
FROM java:1.7
MAINTAINER SystemPlatform@order-downup-serv
ARG HostIp
ENV ServerPrivateIP=${HostIp:-0.0.0.0} \
JDK_VERSION=1.7 \
ServName=order-downup-serv \
ServPath=/var/www/javaApplication/
RUN yum install tar -y && mkdir -pv $ServPath
COPY . /tmp
WORKDIR /tmp
RUN mvn -f /tmp/vendor/order_serv/pom.xml install -e -Dmaven.test.skip=true && \ (进行先构建订单服务,更新本地仓库的jar包,然后再进行本服务的打包)
mvn -f ./pom.xml install -e -Dmaven.test.skip=true &&\
tar xvf /tmp/target/$ServName*.tar.gz -C $ServPath && \
rm -rf /tmp/* && chmod a+x $ServPath/$ServName/shell/*.sh
WORKDIR $ServPath/$ServName/shell/
ENTRYPOINT ["./start.sh"]
MAINTAINER SystemPlatform@order-downup-serv
ARG HostIp
ENV ServerPrivateIP=${HostIp:-0.0.0.0} \
JDK_VERSION=1.7 \
ServName=order-downup-serv \
ServPath=/var/www/javaApplication/
RUN yum install tar -y && mkdir -pv $ServPath
COPY . /tmp
WORKDIR /tmp
RUN mvn -f /tmp/vendor/order_serv/pom.xml install -e -Dmaven.test.skip=true && \ (进行先构建订单服务,更新本地仓库的jar包,然后再进行本服务的打包)
mvn -f ./pom.xml install -e -Dmaven.test.skip=true &&\
tar xvf /tmp/target/$ServName*.tar.gz -C $ServPath && \
rm -rf /tmp/* && chmod a+x $ServPath/$ServName/shell/*.sh
WORKDIR $ServPath/$ServName/shell/
ENTRYPOINT ["./start.sh"]
(以上内容很多写在一行的意思是,每次dockerFile build的时候有缓存,如果内容没有改变就会进行读取缓存,尽量写在一行的意思是尽量少的构建太多缓存镜像)