Edited at

最低限度的 Docker with PHP

Docker 的初心者,最近因為想要弄一些東西就來摸 Docker 了。

公司後端的專案雖然有頻繁的在用 Docker ,但是身為一個行動端 (iOS) 的工程師,對於要怎麼開始動手寫一個 Dockerfile 還真的是不知道(笑)。

這篇就是看完 這部影片 之後,如何用最低限度的設定和內容建置 Docker 的筆記。


環境

OS: macOS Mojave 10.14(18A391)

Docker: 18.06.1-ce-mac73 (26764)


資料夾結構

├── Dockerfile

└── src
└── index.php

很簡單,就一個 PHP 的檔案,和 docker 的設定檔即可,

PHP 檔案則放在 src 這個資料目錄下。


index.php


src/index.php

<?php

echo "hello world";

這裡放個 echo 出字串即可。


Dockerfile 設定檔

接著就來動手寫 Dockerfile,

推薦可以用 Visual Studio Code 寫,會有上色和自動完成等功能很方便。

先來看完成的檔案內容:


Dockerfile

FROM php:7.2.10-apache-stretch

COPY src/ /var/www/html/
EXPOSE 80


PHP 設定檔

FROM php:7.2.10-apache-stretch

因為我們要執行的是 PHP 應用程式,所以就直接用 PHP 就可以了。

https://hub.docker.com/_/php/

連結是從 Docker Hub 上 php 官方所推出的設定檔。

在當前的時間點(2018/10/6),除去 7.3 RC 的檔案,最新的就是 7.2.10 了

要搭配 web server 的關係,所以就選了有 apache 字眼的設定檔:

image.png


複製檔案到 Container (容器)裡

COPY src/ /var/www/html/

就是把 src 資料夾裡面的東西複製到 docker 容器裡的 www/html 資料目錄。


暴露 80 port

EXPOSE 80

讓外界可以透過 80 port 來存取頁面


建置

docker build -t hello_world .

這個指令可以根據 Dockerfile 的內容建置出對應的映像檔,

而透過 -t 這個 flag ,就可以來自定像是 hellow_world 這樣的名稱。

* 參考: https://docs.docker.com/engine/reference/commandline/build/#tag-an-image--t


運行

docker run -p 8080:80 hello_world

在運行的時候,加上 publish flag -p 就可以進行 port 相關的設定

8080:80



  • 前者 對應到的是主機開放出來的 port ,就是在瀏覽器存取 server 的時候可以存取到的 port


  • 後者 對應到的是 docker container 開放出來的 port ,在這邊的範例就是前面寫的 EXPOSE 8080

執行了這個指令之後,就可以在透過 8080 port ,也就是 localhost:8080

來存取從透過 docker container 80 port 所開放出來的頁面:

image

而這個時候終端機端會呈現執行中的狀態,如果要終止的時候,按下 Ctrl+C 即可停止執行。

* 參考: https://docs.docker.com/engine/reference/commandline/run/#publish-or-expose-port--p---expose


反映更新

在這時候運行起來的 server 所回應的頁面, 並不會 因為 src/ 裡面的檔案有所改變,頁面重整就會改變。

因此在運行的指令時,加上掛載的 -v 這個 flag ,

就可以把 src/ 掛載到容器裡的 /var/www/html/ 資料目錄,開發上就會更加方便:

docker run -p 8080:80 -v /Users/path/to/project/src/:/var/www/html/ hello_world

這時候運行起來的機器,當 src 裡面的檔案有變更,在瀏覽器重新整理就會自動變更了。

* 參考: https://docs.docker.com/engine/reference/commandline/run/#mount-volume--v---read-only


程式碼與指令總結

最低限度的 Docker 的程式碼的部分沒有很複雜:


Dockerfile

FROM php:7.2.10-apache-stretch

COPY src/ /var/www/html/
EXPOSE 80


src/index.php

<?php

echo "hello world";

指令:


建置

docker build -t hello_world .



運行

docker run -p 8080:80 -v /Users/path/to/project/src/:/var/www/html/ hello_world


以上

如果有任何回饋或是需要修改的地方,

歡迎在下面留言告訴我~ :hibiscus:


參考