DockerFile實戰(二):DockerFile編寫要求與基本風格

之前分享了一個Nginx的Dockerfile實戰文章,但這是基於原有鏡像的基礎上去添加修改的,那麼本文 來詳細講解一下,如何從ubuntu鏡像生成一個Nginx鏡像

Step1:

#最開始,還是需要先搜索一個可用的鏡像

$docker search ubuntu

#在這裏,可以看到許多的相關鏡像,但這裏我們安裝第一個就可以,可以看STARS評級很高的那個

$docker pull ubuntu

#如果網絡情況夠好的話,稍等片刻,一個可用的鏡像就下載完畢了


Step2:

下載完鏡像以後,我們需要在一個特定的目錄下編寫Dockerfile文件,文件名字也建議以Dockerfile命名

$mkdir -p /opt/docker/dfs/nginx

$vi Dockerfile

在Dockerfile內非註釋行的第一行,必須填寫來源鏡像,這裏以ubuntu爲例

FROM ubuntu

注意,Dockerfile指令,不區分大小寫,但爲了寫作規範,建議以大寫爲好。

接着,可以編寫一些維護人員信息

MAINTAINER Leonlong    [email protected]

爲了安全起見,建議不要使用root用戶來管理和啓動鏡像,在這裏,可以用以下指令指定管理鏡像的用戶

USER yourusername

還可以指令工作目錄,以免在Dockerfile中寫過長的路徑名稱

RUN adduser --diabled-login nginx

WORKDIR /home/nginx

可能需要修改一下時區信息,以免應用程序調用時出現問題

RUN echo "Asia/Shanghai" > /etc/timezone && dpkg-reconfigure -f noninteractive tzdata

在安裝Nginx之前,需要更新一下Ubuntu的apt源,因爲Docker在Build的時候會創建Cache,所以建議這裏使用個指令,把所有需要安裝的軟件裝完。以免在後續步驟出問題時,修改Dockerfile後重新build會帶來額外的時間開銷。當然,有一些軟件並不在官方源當中,可以使用以下兩條RUN指令來安裝想要的應用。如果使用編譯安裝,可能流程就比較長,這裏主要講Dockerfile各個注意事項,所以請自行研究

RUN ECHO "deb http://sourceurlinfo" >> /etc/apt/sources.list

RUN apt-get update && apt-get install -y nginx 

在安裝完以後,其實就可以直接使用CMD參數啓動nginx,但是我們可能以後還需要修改配置。而如果在這裏直接修改配置,容器的生生命週期結束後,這些配置就蕩然無存。所以,可以通過掛載卷的方法來完成我們的配置。而這裏,僅僅需要修改主配置文件的一點內容就可以不再去管它。具體配置方案,可以根據自己的情況來。我的博客也有nginx相關的配置文檔,可以自行研究。

RUN mkdir -p /etc/nginx/vhost/ && mkdir -p /opt/nginx/www

下面,將我們需要觀察或者修改的動態內容,通過掛載卷的方式,從宿主機目錄掛載到以下目錄,並給出啓動命令參數

VOLUME /etc/nginx/vhost

VOLUME /var/log/nginx

VOLUME /opt/nginx/www

ADD nginx.conf /etc/nginx/nginx.conf

CMD nginx

在啓動完成nginx之後,我們想要外部對其訪問,那麼就讓主機映射其端口

EXPOSE 80

EXPOSE 443

:wq!


還是要注意,無論如何配置nginx.conf文件,必須包含"daemon off;"一行

至此,一個簡單的Dockerfile已經編寫完成,當然,在Dockerfile中也有一些其它的指令參數可以使用,比如ENV、COPY、ARG等,之前已經寫過Dockerfile指令使用指南,可以查看 http://leon0long.blog.51cto.com/3011404/1768324


Step3:

那麼Dockerfile編寫完畢以後,就需要將編寫好的dockerfile,製作成我們想要的鏡像,方便我們使用

$cd /opt/docker/dfs/nginx ;docker build -t nginx:private .

命令最後的'.'就代表使用當前目錄的Dockerfile進行構建了。另外注意,在構建的時候,最好不要使用latest標籤

現在,就可以使用docker run來啓動一個容器了

$docker run -it -p 80:80 -p 443:443 

-v /opt/docker/mounts/nginx/log:/var/log/nginx

-v /opt/docker/mounts/nginx/conf:/etc/nginx/vhost

-v /opt/docker/mounts/nginx/www:/opt/nginx/www 

--name nginxtest nginx:private

使用docker ps,就可以看到正在運行當中的容器了


如果想要對鏡像進行修改,只用再次編輯新的dockerfile,並生成一個新的鏡像即可。

顧頭不顧尾,不是我的風格,docker在網絡方面一直是很讓人糾結的地方,後面會針對網絡進行專講

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章