Dockerfile入門實踐
本教程将通過一個具體執行個體闡述Dockerfile的基本用法,意在使大家對Dockerfile有個初步了解,并不旨在詳述Dockerfile的所有指令。在本案中将利用Dockerfile建構基于CentOS系統安裝Apache Web服務(httpd)的鏡像。
建構Dockerfile
在本地主機建立一個目錄(本文為mydocker)存放Dockerfile檔案,建立Dockerfile檔案:
mkdir /mydocker
cd /mydocker
vim Dockerfile
向Dockerfile檔案中添加如下内容,注意本示例基于CentOS系統。
FROM centos:latest
LABEL project="Dockerfile for Apache Web"
RUN yum -y install httpd
EXPOSE 80
VOLUME /var/www/html
ENTRYPOINT [ "/usr/sbin/httpd" ]
CMD ["-D", "FOREGROUND"]
Dockerfile檔案簡述
此處僅簡要介紹一下上述檔案中的Dockerfile指令,更多詳細資訊參考:Dockerfile reference
FROM
"FROM"指令是Dockerfile的第一條指令,指定所建構鏡像的基礎鏡像。本例基于CentOS基礎鏡像。
LABEL
LABEL指令使用鍵值對方式向鏡像中添加中繼資料(metadata)。
RUN
鏡像的建構指令,在建構鏡像時運作某些指令。文中運作安裝httpd的指令。
EXPOSE
設定指令,指定鏡像将來生成的容器在運作時監聽的端口,即容器運作時打開該端口并監聽。這裡監聽Web服務的80端口。
VOLUME
VOLUME指令在鏡像中建立一個指定的挂載點,該挂載點可以共享主機的資料或者其他容器的資料。下文中指定“/var/www/html”為挂載點,共享主機的“/data”目錄。
ENTRYPOINT
指定鏡像将來生成的容器運作時的執行指令入口。這裡采用ENTRYPOINT [“executable”, “param1”, “param2”]這種格式,指定web服務的可執行程式httpd。
CMD
作用與ENTRYPOINT類似,可以配合ENTRYPOINT使用。
生成docker鏡像
假設目前已經進入到mydocker目錄,使用"docker build"指令來生成鏡像
docker build -t centos:httpd .
注意:“.”不能遺漏,表示目前目錄。
啟動容器執行個體
首先,為剛才在Dockerfile中VOLUME建立挂載點。在本地主機下建立一個新目錄(/data目錄),用于挂載Apache Web的根目錄/var/www/html,對應Dockerfile檔案中定義的“VOLUME /var/www/html”。
mkdir /data
随後,啟動容器:
docker run -td -p 80:80 -v /data:/var/www/html --name=web centos:httpd
這裡-p指定本地主機和容器的端口映射,-v指定資料挂載(volume)。
檢視啟動的容器執行個體:
docker ps
驗證Apache Web(Httpd)是否安裝成功
在/data目錄建立index.html檔案,由于剛才設定了卷的挂載,index.html将自動挂載到容器的/var/www/html目錄,而這個目錄是Apache Web的根目錄。
cd /data
vim index.html
添加如下内容:
This is an apache httpd test. Build with dockerfile on CentOS 7.
Data are on host but share with volumn /var/www/html on the Docker container.
最後使用"http://localhost/"進行測試,得到如下結果: