Docker Compose架設PHP+Mysql+Apache

Alvin
6 min readJan 7, 2021

--

之前和一位朋友討論到環境,聽到Docker Compose這個工具,以下是最近實作的經驗分享,主要在實作,不包含太多Docker的介紹,關於Docker介紹內容還在產出中:P

不免俗還是要介紹一下Docker Compose

主要用來串連不同Container(Docker容器)的工具,即使不太熟的人也能輕鬆實作,使用Yaml(壓某)設定檔就能簡單設定。

官方文件介紹

實作流程

Windows和MacOS的Docker Desktop版內建會安裝docker compose,主要在實作,這邊就跳過囉!

啟動Docker後

開啟Terminal把目錄移動到你想要的路徑,我是設定在/Users/alvin/hapache,所以輸入

$ cd /Users/alvin/hapache

使用vi工具編寫docker-compose.yml

$ vi docker-compose.yml

不習慣用vi(vim)編寫,也可以使用下面指令之後就可以看到檔案了

$ touch docker-compose.yml

先不要管內容為什麼,之後會解釋!貼上下面的內容

services:
php-apache:
container_name: php-apache
image: php:7.4-apache
restart: unless-stopped
networks:
dev:
ports:
- 80:80
depends_on:
- mysqlhaha
volumes:
- ./logs/apache:/var/log/apache2
- ./apache/apache2.conf:/etc/apache2/apache2.conf
- ./apache/php.ini:/usr/local/etc/php/php.ini
mysqlhaha:
container_name: mysqlhaha
image: mysql:8.0.22
restart: unless-stopped
ports:
- 3306:3306
environment:
- MYSQL_DATABASE=${PROJECT_NAME}
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
volumes:
- ./mysql/data:/var/lib/mysql
networks:
dev:
networks:
dev:
driver: bridge

*注意yml格式看空白當作層級(類似python),如果對錯層會造成docker compose無法順利運行

儲存之後新建以下目錄

$ mkdir /Users/alvin/hapache/apache \
/Users/alvin/hapache/logs \
/Users/alvin/hapache/logs/apache \
/Users/alvin/hapache/mysql \
/Users/alvin/hapache/mysql/data

增加環境參數,加入.env檔案

$ vi .envor$ touch .env

裡面貼上以下內容後儲存

PROJECT_NAME=hapache
MYSQL_ROOT_PASSWORD=secret

上面做完後,需要把對應的檔案拉出來

使用指令pull我們需要的Image,並查看目前local的Image清單

$ docker pull php:7.4-apache
$ docker image ls

我的長這樣

下指令執行,並取出裡面我們需要的檔案

$ docker run -d php:7.4-apache

再輸入docker ps就可以看到目前啟動的container

這時我要取出裡面的檔案,方便針對container修改設定檔

$ docker cp 4ffb3392b2f4:/etc/apache2/apache2.conf /Users/alvin/hapache/apache$ docker cp 4ffb3392b2f4:/usr/local/etc/php/php.ini /Users/alvin/hapache/apache

在apache資料夾內就可以看到apache2.conf與php.ini檔案

之後需要調整相關設定可以直接更動這兩個檔案內容,重新啟動docker-compose就會生效了~

最後的步驟

輸入以下指令啟動

$ docker-compose up -d

輸入docker ps就可以看到啟動的container

依照yml設定的內容,我們開啟的port是80(注意80和3306port是否被佔用)

這時候去網址輸入 localhost

就可以看到apache已經成功啟動了,只是裡面沒有任何檔案造成forbidden

幫他增加一個簡單的index.html

#進入container的terminal
$ docker exec -it 090a2f95463c /bin/sh
#加入內容
$ echo "hello alvin" >> /var/www/html/index.html

重新整理localhost就可以看到剛剛新增的內容啦 \ /

輸入exit或者ctrl+c離開終端

再輸入以下指令關閉docker compose

$ docker-compose down

就會依序被關閉了~

以上是簡單的實作方式

下一篇文章應該會仔細點介紹docker compose的設定檔指令和一些用法

本篇如果有什麼錯誤或建議作法或無法順利執行的

拜託一定要告訴我RRR

看到一定會感謝/回覆m (_ _) m

--

--

Alvin
Alvin

Written by Alvin

這條路上,好玩但學不完

No responses yet