用來指定作為 base 的 image 名稱,這裡的 image 可以是 Local 或 Docker Hub 上的。
這是最常用的指令,用來執行安裝/設定時所需要的各種指令。
增加外部的檔案至 image 內,常用於設定檔或啟動檔。
指定 container 開啟後要開放的通訊埠 port,這裡的 port 是用於不同的 container 之間互連,不可用於與 host 的通訊;要與 host 通訊,必須在開啟 container 時,使用 -p 參數作 port forward。
開啟 container 後,需要執行的預設指令。
這裡的指令常用於 container 在被開啟後,可以自動啟動各項需要的服務。
NOTE:
container 裡的 Linux 不同於一般 VM 或實體機的啟動方式,Linux 內建的 SysV 機制在 container 裡無法被執行,替代方法是必須手動寫另一個啟動檔。
使用方法
單一指令時 ["/bin/bash"] 指令較長時 ["/bin/bash", "/opt/startup.sh"]
mkdir centos5-lamp_php51 cd centos5-lamp_php51/
新增兩個檔案 Dockerfile,startup.sh
Dockerfile:
############################################################ # Dockerfile to build LAMP with PHP 5.1.x container images # Based on CentOS 5 ############################################################ FROM centos:centos5 MAINTAINER A-Lang <alang.hsu@gmail.com> RUN rpm --import http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5 RUN yum -y update RUN yum -y install mysql-server RUN yum -y install httpd php php-mbstring php-mysql RUN yum -y install wv links pdftohtml tidy html2ps ADD ./startup.sh /opt/startup.sh RUN chmod +x /opt/startup.sh RUN echo "/opt/startup.sh" >> /etc/bashrc EXPOSE 80 3306 CMD ["/bin/bash"]
startup.sh:
#!/usr/bin/env bash #=============================================================================== # # AUTHOR: A-Lang <alang.hsu@gmail.com> # #=============================================================================== echo "Starting mysql:" service mysqld start echo "Starting Apache:" service httpd start
開始 build image
docker build -t alang/centos5-lamp_php51 .
build 的程序會按照 Dockerfile 的內容依序完成。
完成後,檢查 image。
#> docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE alang/centos5-lamp_php51 latest 967949717d3f 19 minutes ago 717.8 MB centos centos5 192178b11d36 2 weeks ago 466.9 MB ubuntu latest 5506de2b643b 4 weeks ago 199.3 MB ubuntu 12.04 0b310e6bf058 4 weeks ago 126.7 MB ubuntu 13.10 195eb90b5349 5 months ago 184.7 MB
開啟這個 image 成為一個 container
#> docker run -t -i alang/centos-lamp_php51
NOTE:
contaioner 開啟會直接進入它的 console,想跳離開但又不想結束 container,可以按下 Ctrl P 後再按下 Ctrl Q,就可以跳離至 host。
在 host 時,想重新進入開啟中的 container,可以執行 docker attach <container-ID>
另一種以 daemon 方式開啟 container
#> docker run -d -t alang/centos-lamp_php51
NOTE:
注意:這樣的啟動方式,無法使用 docker attach 進入該 container console。
Dockerfile 範例
Dockerfile 語法