# 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替换了。不启动。
转载于:https://blog.51cto.com/wks97/1955456