Docker 學習筆記(第八集:使用 docker-compose 搭建 php 開發環境 )

chenggx發表於2020-09-07

上一集我們已經可以通過 docker 搭建 LNMP 的開發環境了,但是想必大家也發現配置挺複雜的,每個容器啟動都有好長的命令。那有沒有更簡單一點的方式呢?有的,就是今天要學習的——docker-compose。

什麼是 docker-compose 呢?

docker-compose 是一個使用 python 編寫,用於定義和執行多容器的工具。

安裝

二進位制包安裝


// 由於網路原因可以將檔案直接下載下來,然後放到對應的位置,最後賦予相應的執行許可權也是一樣的

$ sudo curl -L https://github.com/docker/compose/releases/download/1.25.5/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

$ sudo chmod +x /usr/local/bin/docker-compose

pip 安裝


$ sudo pip install -U docker-compose

bash 補全命令

使用如下命令使 docker-compose 具有程式碼提示功能(如不生效,可以退出終端重新進入就可以了)


$ curl -L https://raw.githubusercontent.com/docker/compose/1.25.5/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose

解除安裝

通過二進位制包安裝的解除安裝方式


$ sudo rm /usr/local/bin/docker-compose

通過 pip 安裝的解除安裝方式


$ sudo pip uninstall docker-compose

通過 docker-compose 配置 LNMP 開發環境

我們直接將上一集中配置的 LNMP 環境通過docker-compose 的方式在配置一遍

主要步驟如下:

  1. 建立一個目錄 easy-docker 作為 docker-compose 目錄

  2. 執行一個臨時的 nginx 容器,將 nginx 配置檔案複製到 easy-docker 目錄中,並修改配置檔案

  3. 在 easy-docker 目錄中建立 php 目錄並在該目錄下建立 Dockerfile 檔案

  4. 編輯 phpfpm 目錄下的 Dockerfile 檔案

  5. 在 easy-docker 目錄下建立 docker-compose.yml 檔案並編輯

  6. 使用 docker-compose up -d 執行


// 建立一個目錄用於儲存 docker-compose 專案所需的內容

$ mkdir easy-docker && cd easy-docker

// 執行一個臨時的 nginx 容器並將配置檔案複製到當前目錄

$ docker run --name temp-nginx -d nginx

$ docker cp temp-nginx:/etc/nginx ./

// 刪除臨時 nginx 容器

$ docker rm -f temp-nginx

// 修改 nginx 配置檔案(詳情見下圖)

$ vim nginx/conf.d/default.conf

// 建立一個目錄作為 nginx 容器專案主目錄

$ mkdir wwwroot

// 建立 phpfpm 目錄

$ mkdir phpfpm && cd phpfpm

// 建立 Dockerfile 檔案(見下圖)

$ vim Dockerfile

// 在 easy-docker 目錄下建立 docker-compose.yml 檔案(見下文)

$ cd ..

$ vim docker-compose.yml

//構建映象並啟動容器

$ docker-compose up

// 測試

$ echo  "<?php phpinfo(); ?>" > ./wwwroot/info.php

// 訪問頁面可以看到 phpinfo 頁面怎成功

nginx 配置檔案

nginx 配置檔案


phpfpm Dockerfile 內容


FROM php:7.2-fpm

RUN sed -i "s@http://deb.debian.org@http://mirrors.aliyun.com@g" /etc/apt/sources.list

&& rm -Rf /var/lib/apt/lists/*

&& apt-get update && apt-get install -y

libfreetype6-dev

libjpeg62-turbo-dev

libpng-dev

&& docker-php-ext-install -j$(nproc) iconv

&& docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/

&& docker-php-ext-install -j$(nproc) gd

&& docker-php-ext-install mysqli pdo pdo_mysql

docker-compose 檔案內容

上面的 docker-compose.yml 檔案只展示了部分指令的用法,可以參考連結檢視其他指令的詳細用法。

docker-compose 常用命令

該命令非常常用,主要功能是嘗試自動完成包括構建映象,(重新)建立服務,啟動服務,並關聯服務相關容器的一系列操作。


$ docker-compose up -d

將會停止 up 命令所啟動的容器,並移除網路


$ docker-compose down

其他一些命令類似有 docker 相關命令,只是把關鍵指令換成 docker-compose 了,例如 docker-compose ps、docker-compose exec 等,可自行嘗試。 相關文件

優秀專案參考

上面我們只是簡單的搭建了一個開發環境,實際上真實的環境會很複雜,我們自己寫一個完整的 docker-compose 檔案可能比較困難(大神忽略)。那麼有什麼簡單的方法呢?

下面我推薦兩個我用過還不錯的專案,大家可以參考學習。

laradock

LNMP

程式設計師的藝術人生

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章