上一集我們已經可以通過 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 的方式在配置一遍
主要步驟如下:
建立一個目錄 easy-docker 作為 docker-compose 目錄
執行一個臨時的 nginx 容器,將 nginx 配置檔案複製到 easy-docker 目錄中,並修改配置檔案
在 easy-docker 目錄中建立 php 目錄並在該目錄下建立 Dockerfile 檔案
編輯 phpfpm 目錄下的 Dockerfile 檔案
在 easy-docker 目錄下建立 docker-compose.yml 檔案並編輯
使用 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 配置檔案
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 檔案可能比較困難(大神忽略)。那麼有什麼簡單的方法呢?
下面我推薦兩個我用過還不錯的專案,大家可以參考學習。
本作品採用《CC 協議》,轉載必須註明作者和本文連結