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/"進行測試,得到如下結果: