PHP下如何優雅的使用Docker來構建環境(二)

前言

上一篇文章呢,咱們簡單的瞭解了Docker的基本命令,這篇文章呢,咱們來了解下Dockerfile這個文件。php

一個神奇的文件:Dockerfile

我不知道有多少同窗以前用過Vagrant來統一開發環境的,若是你以前接觸過Vagrant的話,Dockerfile有點相似於vagrantfile文件。
一言以蔽之,Dockerfile就是描述了你要構建一個什麼樣的鏡像,比如你要創建一棟大樓,你須要把每一步寫進一張藍圖中,而後交給工人(docker build [dockerfile文件所在路徑]),而後你就擁有了一棟房子,懂了麼?懂了麼?懂了麼?
咱們來看下dockerfile長什麼樣子吧?linux

# Nginx
#
# VERSION               0.0.1

FROM      ubuntu
MAINTAINER Victor Vieux <victor@docker.com>

LABEL Description="This image is used to start the foobar executable" Vendor="ACME Products" Version="1.0"
RUN apt-get update && apt-get install -y inotify-tools nginx apache2 openssh-server

這個是官方給出的例子。
FROM指明瞭這裏鏡像繼承Ubuntu的基礎系統。
MAINTAINER是指明瞭做者信息,通常是名字和郵箱。
LABEL是爲你即將打造的鏡像寫上一些標籤信息。
RUN這個是執行一條命令,等價於你在終端打了一條命令nginx

固然,遠遠不止這些命令,我列舉幾條比較經常使用的還有一些注意點吧。git

FROM指令

FROM <image>:<tag>

這裏你們要注意一點就是,docker官方源鏡像被牆,因此若是你要使用國內源的話須要這樣來書寫:FROM daocloud.io/ubuntu:latest,這是不少新人一直摸不着頭腦常常要問的,這裏給你們提示下。github

RUN指令

RUN <command>

這條命令至關於你在終端執行了一條命令,固然這條命令通常是一條可以帶來內容寫入的命令,好比RUN apt-get install vim這樣的安裝程序的命令,或者是RUN echo "Hello" > /hello.txt這樣的腳本命令。RUN能夠在dockerfile中存在多條,你們要注意了。
固然還有RUN ["/bin/bash", "-c", "echo hello"]這樣也是能夠的。docker

CMD指令

CMD ["executable","param1","param2"]

CMD指令通常用來指明啓動容器時須要運行什麼進程。通常咱們是跑一條無輸入有輸出的前臺進程,好比官方ghost啓動時就運行了/entrypoint.sh npm start,這就是一條無輸入有輸出的命令,輸出將會做爲容器的日誌顯示。可是你看到ghost的Dockerfile會發現:apache

...
COPY docker-entrypoint.sh /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]

EXPOSE 2368
CMD ["npm", "start"]

ENTRYPOINT是配置容器啓動後執行的命令,CMD此時爲它提供了兩個參數,因此等價於CMD /entrypoint.sh npm startCMD只能執行一次,重複寫會覆蓋哦。npm

EXPOSE指令

EXPOSE <port> [<port>...]

這條命令是指明最後容器須要暴露哪些端口號,這樣其餘系統才能使用這個端口。好比常見的803306這些,PHP開發者對這些端口應該是很是熟悉的了。在這裏多說幾句,就是寫明瞭這個指令不表明你能夠從外面就直接連進來,由於你的dockerfile最後生成的是鏡像文件,你須要用這個鏡像文件來run容器。因此你要在run的時候使用-P參數來隨機分配映射口或者使用-p來指定端口映射。ubuntu

ADD、COPY指令

ADD  <src> <dest>
COPY <src> <dest>

這兩個都是複製命令,好比Ubuntu下須要換源(替換/etc/apt/source.list文件)就能夠用這個命令,推薦使用COPYvim

VOLUME掛載指令

VOLUME ["/data"]

顧名思義,就是掛載一個主機目錄到你的容器內,對於PHP開發者而言就是你能夠在本地寫好代碼在目錄/workdir/test,而後掛載進去來省去繁雜的複製代碼進入容器的過程。可是靈活性不高,後面我在編排的時候會教你們用編排來統一開發環境。

更多

還有更多指令你們看下官方文檔,我本身以爲上面的指令算是使用比較多的了。做爲PHP開發者只要認識這幾個我以爲夠用了。

構建鏡像

前面說了好多,目的就只是爲了自動化構建一個屬於本身的鏡像。哈哈,別不耐煩,但凡官方給出的鏡像都會附帶一份dockerfile的,不信到hub上去look look。你的PHP官方也是給出了dockerfile:Docker Official Image packaging for PHP

好了,該給出這道命令了

docker build [dockerfile所在目錄]

好比個人dockerfile路徑是~/project/dockerfile,那麼我構建鏡像的命令是:

docker build -t cnbrucehong/myimg   ~/project/
                   |                     |
       -t指明瞭你要給這個鏡像什麼名字  注意這裏沒有dockerfile

而後你鍵入

docker images

你就能看到你建立的鏡像啦,趕忙run一下試試吧!~有問題能夠在下面留言哦!~

下節預告

下屆咱們來講說如何在Mac下優雅的搭建Docker,哈哈若是你是linux的用戶能夠直接跳過,若是是window的話也是能夠看看的,由於裏面介紹的軟件在window也是有的,可是我仍是推薦你們使用mac啦,下節見咯!~

相關文章
相關標籤/搜索