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
<?php
echo "hello world";
這裡放個 echo 出字串即可。
Dockerfile 設定檔
接著就來動手寫 Dockerfile,
推薦可以用 Visual Studio Code 寫,會有上色和自動完成等功能很方便。
先來看完成的檔案內容:
FROM php:7.2.10-apache-stretch
COPY src/ /var/www/html/
EXPOSE 80
PHP 設定檔
FROM php:7.2.10-apache-stretch
因為我們要執行的是 PHP 應用程式,所以就直接用 PHP 就可以了。
連結是從 Docker Hub 上 php 官方所推出的設定檔。
在當前的時間點(2018/10/6),除去 7.3 RC 的檔案,最新的就是 7.2.10 了
要搭配 web server 的關係,所以就選了有 apache
字眼的設定檔:
複製檔案到 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 80
的80
執行了這個指令之後,就可以在透過 8080 port ,也就是 localhost:8080 ,
來存取從透過 docker container 80 port 所開放出來的頁面:
而這個時候終端機端會呈現執行中的狀態,如果要終止的時候,按下 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 的程式碼的部分沒有很複雜:
FROM php:7.2.10-apache-stretch
COPY src/ /var/www/html/
EXPOSE 80
<?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
以上
如果有任何回饋或是需要修改的地方,
歡迎在下面留言告訴我~
參考
- Learn Docker in 12 Minutes 🐳 (YouTube)