LoginSignup
1
0

More than 5 years have passed since last update.

最低限度的 Docker with PHP

Last updated at Posted at 2018-10-06

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 就可以了。

連結是從 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:

參考

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0