天天看點

Dockerfile入門實踐Dockerfile入門實踐

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
           
Dockerfile入門實踐Dockerfile入門實踐

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

Dockerfile入門實踐Dockerfile入門實踐