docker-compose 主要是一個控制容器的工具,可以讓我們通過一個簡單的yml設定檔案,就可以通過 docker-compose 的指令,一次控制多個容器,這裡我就跳過了docker-compose 的相關介紹了,如果說有人有興趣瞭解 docker-compose 的相關介紹,可以參考以下官方文件。以下簡單帶過安裝過程。
第一步: 下載
sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
第二步:給予執行權限
sudo chmod +x /usr/local/bin/docker-compose
概念
Drupal 是非常強大的工具,但開發的環境還有正式的環境,對於做網站來說,是不想理他又不行的議題。因此,如果利用 docker-compose 的來寫一個 drupal 的環境配置,再加上好的資料夾結構,就可以做到環境還有資料庫全部帶者走,不僅方便備份,更方便升級,當然,再不同工程師之間開發,更不用擔心環境不一樣的問題了。
第一步:一個資料夾全部東西放裡面
建立一個資料夾( 這裡以 drupal 資料夾為例 ),配置如下:


- conf 資料夾:
裡面主要是放作業系統環境需要的設定檔案,例如:Nginx 設定檔案、Apache 設定檔案、Mysql 設定檔案等等 - mysql 資料夾: 這個裡面主要是放所有的資料庫。
- www 資料夾: 這個裡面主要放所有的程式,也就是一堆php檔案。
- docker-compose.yml 檔案 這個檔案就是裡面最重要的檔案,裡面會描述所有需要用的伺服器資源還有版本設定 ( 都是從 docker hub 上抓下來 ),所以完全不用自己安裝,超輕鬆Der,下面介紹怎麼寫。
第二步: 撰寫docker-compose.yml
寫yml的格式個人覺得是非常的龜毛,多一個空白少一個空白都會出錯,沒法執行。不過好處是,有工程師開發了 yml validator,可以直接拿來使用,看看是否有問題。
- docker-compose.yml
version: "2" services: web: image: nginx:1.13 ports: - "80:80" volumes: - ./www:/var/www/html/ - ./conf/site.conf:/etc/nginx/conf.d/site.conf links: - php php: image: hellosanta/php4drupal:php7.0-fpm volumes: - ./www:/var/www/html/ restart: always links: - db db: image: mysql:5.7.18 volumes: - ./mysql/db:/var/lib/mysql environment: - MYSQL_USER=drupal - MYSQL_PASSWORD=drupal - MYSQL_DATABASE=drupal - MYSQL_ROOT_PASSWORD=drupal
上面的寫法主要分成三個部分,第一個部分是針對 Webserver 的部分,這裡是使用 Nginx 的映像檔,讓 Nginx 來跑我放在 drupal 資料夾裡面的 www。然後預設將系統的 80port 對應到這個容器服務的 80port。
第二部分則是php的服務,由於也是要跑這個資料夾裡面的程式檔案,因此,在 Volumes 的部分就將 www 一樣同步進去對應的資料夾,並且將php這個服務跟底下的資料庫服務進行連結。
最後一個部分就是資料庫的描述檔案囉,我將所有的資料庫,全部寫到 drupal 這個資料夾裡面的 mysql 資料夾。
上述配置都好了以後,恭喜啦,一切就緒
最後一步: 一句指令所有環境一切就緒
接下來只需要打 docker-compose 的指令就一切都安裝起來囉。
啟動
docker-compose up -d
下面附上可能需要用到的其他指令:
停止
docker-compose stop
停止加上移除容器
docker-compose down
切換版本/打包 以秒計算
今天若是用 docker-compose.yml 來處理環境的話,很方便的就是所有環境的設定都在 yml 裡面撰寫,所以今天如果要切換 php 版本或 nginx 版本或 mysql 版本。只需要把 tag 進行更改,重新啟動即可。(例如:nginx:1.12 -> nginx:1.13)
另外,打包整個環境包含資料庫超級簡單,由於全部都在 drupal 這個資料夾中,所以可以直接用tar打包,帶走唷~
結論
由於 docker 的特性,讓環境建立變得非常容易,再加上用容器的效能已經接近原生的程式了,所以當然要使用 docker 來建立所有的 drupal 環境囉。用上述的寫法不僅方便測試不同環境跟升級,更能夠在備份上面容易許多。工程師間的開發,也可以因此解決很多環境間的同步問題,是個不錯的解決方法囉。給大家參考~
沒有留言:
張貼留言