指令格式java
# 映射一個端口 EXPOSE port1 # 相應的運行容器使用的命令 docker run -p port1 image # 映射多個端口 EXPOSE port1 port2 port3 # 相應的運行容器使用的命令 docker run -p port1 -p port2 -p port3 image # 還能夠指定須要映射到宿主機器上的某個端口號 docker run -p host_port1:port1 -p host_port2:port2 -p host_port3:port3 image
FROM busybox:ubuntu-14.04 RUN touch /osforce.sh CMD ["ls","-al","/osforce.sh"]
## 覆蓋cmd 命令 [root@www docker-file]# docker run -t test/of8 echo "my ke"
FROM busybox:ubuntu-14.04 RUN touch /osforce.sh ENTRYPOINT ["ls","-al"] CMD ["/osforce.sh"]
CMD 這時的值爲 ENTRYPOINT 命令的參數mysql
在啓動容器時,能夠 傳入參數覆蓋 CMD 的參數 / 這個參數傳給 ENTRYPOINT 命令linux
[root@www docker-file]# docker run -t test/of8 /
CMD
命令可用指定 Docker 容器啓動時默認的命令,例如咱們上面例子提到的 docker run -it ubuntu:latest sh -c '/bin/bash'
。其中 sh -c '/bin/bash'
就是經過手工指定傳入的 CMD。若是咱們不加這個參數,那麼容器將會默認使用 CMD 指定的命令啓動。ENTRYPOINT 是什麼呢?從字面看是進入點。沒錯,它就是進入點。ENTRYPOINT 用來指定特定的可執行文件、Shell 腳本,並把啓動參數或 CMD 指定的默認值,看成附加參數傳遞給 ENTRYPOINT。nginx
很差理解是吧?咱們舉一個例子:git
ENTRYPOINT ['/usr/bin/mysql'] CMD ['-h 192.168.100.128', '-p']
假設這個鏡像內已經準備好了 mysql-client,那麼經過這個鏡像,不加任何額外參數啓動容器,將會給咱們一個 mysql 的控制檯,默認鏈接到192.168.100.128 這個主機。然而咱們也能夠經過指定參數,來鏈接別的主機。可是無論不管如何,咱們都沒法啓動一個除了 mysql 客戶端之外的程序。由於這個容器的 ENTRYPOINT 就限定了咱們只能在 mysql 這個客戶端內作事情。這下是否是明白了~ github
定義鏡像,當其它鏡像基於這個鏡像時,就會執行 ONBUILD 中的指令,即建立文件sql
FROM test/osf7 就是上面建立的鏡像 ,構建這個鏡像時,會先執行上定義的 ONBUILD 指令docker
Dockerfile文件shell
# Pull base image FROM ubuntu:13.10 MAINTAINER zing wang "zing.jian.wang@gmail.com" # update source RUN echo "deb http://archive.ubuntu.com/ubuntu precise main universe"> /etc/apt/sources.list RUN apt-get update # Install curl RUN apt-get -y install curl # Install JDK 7 RUN cd /tmp && curl -L 'http://download.oracle.com/otn-pub/java/jdk/7u65-b17/jdk-7u65-linux-x64.tar.gz' -H 'Cookie: oraclelicense=accept-securebackup-cookie; gpw_e24=Dockerfile' | tar -xz RUN mkdir -p /usr/lib/jvm RUN mv /tmp/jdk1.7.0_65/ /usr/lib/jvm/java-7-oracle/ # Set Oracle JDK 7 as default Java RUN update-alternatives --install /usr/bin/java java /usr/lib/jvm/java-7-oracle/bin/java 300 RUN update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/java-7-oracle/bin/javac 300 ENV JAVA_HOME /usr/lib/jvm/java-7-oracle/ # Install tomcat7 RUN cd /tmp && curl -L 'http://archive.apache.org/dist/tomcat/tomcat-7/v7.0.8/bin/apache-tomcat-7.0.8.tar.gz' | tar -xz RUN mv /tmp/apache-tomcat-7.0.8/ /opt/tomcat7/ ENV CATALINA_HOME /opt/tomcat7 ENV PATH $PATH:$CATALINA_HOME/bin ADD tomcat7.sh /etc/init.d/tomcat7 RUN chmod 755 /etc/init.d/tomcat7 # Expose ports. EXPOSE 8080 # Define default command. ENTRYPOINT service tomcat7 start && tail -f /opt/tomcat7/logs/catalina.out
tomcat7.shapache
export JAVA_HOME=/usr/lib/jvm/java-7-oracle/ export TOMCAT_HOME=/opt/tomcat7 case $1 in start) sh $TOMCAT_HOME/bin/startup.sh ;; stop) sh $TOMCAT_HOME/bin/shutdown.sh ;; restart) sh $TOMCAT_HOME/bin/shutdown.sh sh $TOMCAT_HOME/bin/startup.sh ;; esac exit 0
docker build -t zingdocker/jdk-tomcat . docker run -d -p 8090:8080 zingdocker/jdk-tomcat