6.0docker Dockerfile文件

指令格式java

#註釋
FROM :基礎鏡像
MAINTAINER:鏡像的做者信息
RUN :指定(構建過程當中)當前鏡像中運行的命令
EXPOSE :指定運行鏡像的容器應用程序所使用的端口
容器但不會打開,須要手動打開映射的端口號
 
docker run -p 80 -d 用戶名/名字 nginx -g "daemon off;" 前臺運行方式
 
EXPOSE  指定容器須要映射到宿主機器的端口
設置指令,該指令會將容器中的端口映射成宿主機器中的某個端口。當你須要訪問容器的時候,能夠不是用容器的IP地址而是使用宿主機器的IP地址和映射後的端口。要完成整個操做須要兩個步驟,
首先在Dockerfile使用EXPOSE設置須要映射的容器端口,而後在 運行容器的時候指定-p選項加上EXPOSE設置的端口,這樣EXPOSE設置的端口號會被隨機映射成宿主機器中的一個端口號。
也能夠指定須要映射到宿主機器的那個端口,這時要確保宿主機器上的端口號沒有被使用。EXPOSE指令能夠一次設置多個端口號,相應的運行容器的時候,能夠配套的屢次使用-p選項。
用法 EXPOSE <port> [<port>...] 
# 映射一個端口  
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  

 

 
鏡像的目錄和文件
CMD :容器啓動時的運行的指令 /bin/bash會覆蓋 cmd    CMD 只能有一個
在 Dockerfile 中的 CMD 命令在容器啓動時會執行指定的命令,也能夠在啓動容器時,能夠經過 /bin/bash 覆蓋 CMD命令
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"

 

 
ENTRYPOINT : /bin/bash不會執行 
這個命令不會覆蓋 在 Dockerfile 中指定的命令,當定義了 ENTRYPOINT 之後, CMD 只可以做爲參數進行傳遞
當定義多個ENTRYPOINT  時,最後一個生效,
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

 

 

ADD :包含相似tar解壓的功能
當參數是 url 時,能夠下載到指定目當
ADD  url  /apache/http-2.tar.gz   將 指定的 url  文件下載到 容器中的 /apache/ 目錄中 ,並將文件名命爲http-2.tar.gz,在啓動容器時,就能夠看到 /apache/下的文件

 

 
COPY  將宿主機的文件拷貝到image中的指定目錄中,啓動容器後,便可查看
 
 
VOLUME
 
 
 
 這時的 數據卷不會真正的建立,只有當啓動容器時,纔會建立

 

 
 
鏡像構建和運行時的環境設置
WORKDIR :工做目錄 相似 cd 
用來指定當前工做目錄,當使用相對目 錄的狀況下,採用上一個 WORKDIR 指定的目錄做爲基準
 
功能:下載  切換目錄 解壓 查看目錄

 

 
ENV :環境變量
用來設置環境變量,後續的 RUN 可使用它所建立的環境變量
 
 
USER :以什麼用戶運行
指定 UID 或者 username ,來決定運行 RUN 指令的用戶
 
 
爲鏡像觸發器
ONBUILD :當一個鏡像被其餘鏡像做爲基礎鏡像時執行會在構建過程當中插入指令

 

定義鏡像,當其它鏡像基於這個鏡像時,就會執行 ONBUILD 中的指令,即建立文件sql

 

 

FROM test/osf7 就是上面建立的鏡像 ,構建這個鏡像時,會先執行上定義的 ONBUILD 指令docker

 

 
不使用構建緩存
docker build --no-cache -t="名字"  文件地址
EVN REFRESH_DATE 2015-01-02 :若是
 
鏡像的構建過程歷吏
docker history  鏡像名
 
Dockerfile構建過程
1.從基礎鏡像運行一個容器
2.執行一條指令,對容器作出修改
3.執行相似 docker commit 的操用,提交一個新的鏡像層
4.再基於剛提交的鏡像運行一個新容器
5.執行dockerfile 中的下一條指令,直至全部指令執行完畢。
 
 

建立Dockerfile,構建jdk+tomcat環境

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
相關文章
相關標籤/搜索