上一章,我們講了DockerFile的最基本構成,講了兩種Dockerfile的構建Image方式,這一篇,我們將來介紹DockerFile裏面所帶的N多參數。
以下就是今天所要說DockerFile涉及的環境:
DockerFile簡易示意圖:
1、 RUN參數:我們在上一章創建的DockerFile里加入參數Run yum install –y vim*:
2、 嘗試構建,你就會發現Dockerfile的RUN參數生效了:
3、 所以,RUN的作用就是可以幫你運行一些需要預運行的命令,但是最好不要在RUN裏面做類似“yum update”、“apt-get update”之類的操作,這並不符合Dockerfile的最佳實踐。
4、 CMD參數:介紹到RUN就不得不介紹下CMD了,CMD命令與RUN的區別在於,CMD在一個DockerFile只能用一次,如果在DockerFile存在多個CMD的話,默認只運行最後一條,比如你可以在最後一行寫上一句“Enjoy your docker images”,CMD的調用比較特殊,是在通過以你的images構建完成容器後自動觸發,比如docker run ImagesName:
5、 EXPOES參數:這個參數用來指定Container需要暴露給其他Container的端口,相當於構建內部網絡,與-p的區別在於,expoes是對內提供端口方法(Container之間,比如ngx訪問mysql),-p參數是映射端口相當於NAT,比如:
6、 構建完成:
7、 接着,我們通過這個images創建兩個容器,就明白EXPOSE參數的作用了,可以看到下圖有出現“port 22”:
8、 但是在端口映射表裏是看不到的,證明這是內部映射端口:
9、 進入其中一個容器,使用nmap測試另外一個容器的端口是否能夠相通:
10、 ENTRYPOINT參數:就此可以看出EXPOSE的作用,眼尖的人兒可能看到我使用了ENTRYPOINT這個參數,ENTRYPOINT這個參數的屬性跟CMD有點兒像,同樣是多個參數存在的時候只執行最後一條,這個例子中,我使用了該參數將SSH服務作爲一個後臺服務進行運行: