# AlpineLinux open jre 7
FROM alpine:latest

# Install cURL
RUN echo -e "https://mirror.tuna.tsinghua.edu.cn/alpine/v3.4/main\n\
https://mirror.tuna.tsinghua.edu.cn/alpine/v3.4/community" > /etc/apk/repositories

RUN apk --update add curl bash openjdk7-jre-base && \
      rm -rf /var/cache/apk/*

# Set environment
ENV JAVA_HOME /usr/lib/jvm/default-jvm
ENV PATH ${PATH}:${JAVA_HOME}/bin
ADD ./apache-tomcat7  /home/apache-tomcat7
ENTRYPOINT ["/home/apache-tomcat7/bin/catalina.sh", "run"]

当先目录是

-rw-r--r--. 1 root root     432 8月   2 09:43 alpine_jdk7_tomcat7
drwxr-xr-x. 9 root root    4096 8月   2 09:45 apache-tomcat7
-rw-r--r--. 1 root root 8975395 8月   2 09:43 apache-tomcat-7.0.79.tar.gz

构建

docker build -t harbor.studeylinux.com/superjia/alpine_jdk7_tomcat7:v1 -f alpine_jdk7_tomcat7 .

-t   是打tag,为了方便push 到私有仓库,名字就懒得改了,然后指定dockerfile

注意:

1,如果当前目录下过大,docker会默认当前目录下的文件信息到dockerdaemon中,

简单解决办法就是把dockerfile 放到空目录里

2,需要注意在dockerfile 构建的时候,entrypoint 和cmd的区别,entrypoint 卸载dockerfile里的命令,在docker run 的时候,后面跟的参数,是不会替换entrypoint指定的命令,而是被entrypoint 直接屏蔽

但是cmd 不会,docker run 后面加的参数会直接替换掉cmd 的命令

3,一下的是抄的,懒的写

特别注意一点。有的是docker启动的时候并没有带动tomcat启动,而是直接退出了。 
这个并不是docker的问题。是因为使用的命令不对。要使用 catalina.sh run 这个参数,这个命令一直执行。 
如果使用startup.sh的时候就上后台了。docker以为有问题了。shell执行完了,就直接退出了。然后就不能-d执行了。 
也就是说,使用entrypoint 和cmd 命令必须是一个死循环一直执行的命令。 
entrypoin和cmd的区别就是cmd可以被替换。 
要是使用 docker run -it demo/tomcat-base bash这个命令执行两个不同包。 
entrypoint的包tomcat会启动,而cmd打的包,tomcat被shell替换了。不启动。