輕鬆搞定|將PHP和Couchbase應用部署為Docker
數人云之前分享了《如何用Docker實現PHP命令行程序的CI/CD》,詳細地介紹了整體過程中的思路以及以及注意事項,今天帶來的文章將闡述怎樣部署一個PHP應用容器,並且與後端Couchbase Server容器進行通信。
本篇文章講述如何創建一個自動提供的Couchbase節點和簡化PHP應用程序讀取寫入Couchbase NoSQ資料庫。
首先定義代表兩個容器的項目結構:
root-- couchbase-- -- configure.sh-- -- Dockerfile-- php-- -- application-- -- -- index.php-- -- configuration-- -- -- php.ini-- -- Dockerfile-- docker-compose.yml
每個容器都有包含自身構建鏡像步驟對應的Dockerfile文件,docker-compose.yml將使用定義好的埠和環境變數信息構建和部署容器。
每個容器都有包含自身構建鏡像步驟對應的Dockerfile文件,docker-compose.yml將使用定義好的埠和環境變數信息構建和部署容器。
PHP應用程序容器化
本文是PHP容器化教程,首先構建簡單的PHP應用程序並對其進行容器化,因為要自動化部署,所以在本地存儲php.ini文件,並在構建過程中複製。
在此之前,為index.php文件中添加一些代碼:
<?phpheader("Content-Type: application/json");$cluster = new CouchbaseCluster("couchbase://" . getenv("COUCHBASE_HOST"));$bucket = $cluster->openBucket(getenv("COUCHBASE_BUCKET_NAME"), getenv("COUCHBASE_BUCKET_PASSWORD"));try { $result = $bucket->get("nraboy");} catch (CouchbaseException $e) { $bucket->insert("nraboy", array( "name" => "Nic Raboy", "social_media" => array( "twitter" => "https://www.twitter.com/nraboy", "website" => "https://www.thepolyglotdeveloper.com" ) )); $result = $bucket->get("nraboy");}echo json_encode($result->value);?>
所有列印數據都將是JSON格式,與Couchbase集群建立一個連接,並在該集群中打開一個特定的Bucket,稍後使用環境變數來定義集群名和Bucket,將在部署過程中進行設置。
應用程序連接Couchbase並且成功打開Bucket,嘗試通過Couchbase讀取文檔。若該文檔不存在,將會創建並讀取該文檔,所獲文檔會被列印出來。
這是一個簡單的應用,現在可以專註於應用程序的Docker方面。
打開Dockerfile文件,內容如下:
FROM php:5.6.30-apacheRUN apt-get updateRUN apt-get install -y wget lsb-releaseRUN wget http://packages.couchbase.com/releases/couchbase-release/couchbase-release-1.0-2-amd64.debRUN dpkg -i couchbase-release-1.0-2-amd64.debRUN rm couchbase-release-1.0-2-amd64.debRUN apt-get updateRUN apt-get install -y libcouchbase-dev build-essential php5-dev zlib1g-devRUN pecl install pcs-1.3.3RUN pecl install couchbaseWORKDIR /var/www/htmlCOPY ./configuration/php.ini /usr/local/etc/php/COPY ./application/ /var/www/html/RUN chown www-data:www-data . -R
將使用Apache鏡像,如果曾經使用過PHP和Couchbase,下面看起來會很熟悉,所有依賴關係都是直接從Couchbase官方SDK文檔中獲取,RUN命令表示依賴關係將在構建時收集安裝,而非運行過程中。
依賴安裝完成後,把php.ini文件以及index.php文件複製到構建鏡像的過程中去。首先從php.ini文件這一步:
最好是從官方的PHP GitHub倉庫下載php.ini文件,而非粘貼一冗長的配置文件。擴展唯一要做的改變,根據Couchbase SDK文檔 找到擴展部分,在php.ini文件中添加一行extension=couchbase.so。
此時,可以構建PHP映像,並將其部署為容器。但我們多做一些:創建一個Compose文件。
打開docker-compose.yml文件內容如下:
version: 2services:couchbase: build: ./couchbase ports: - 8091:8091 - 8092:8092 - 8093:8093 environment: - COUCHBASE_ADMINISTRATOR_USERNAME=Administrator - COUCHBASE_ADMINISTRATOR_PASSWORD=password - COUCHBASE_BUCKET=default - COUCHBASE_BUCKET_PASSWORD=php: build: ./php ports: - 8080:80 environment: - COUCHBASE_HOST=couchbase - COUCHBASE_BUCKET_NAME=default - COUCHBASE_BUCKET_PASSWORD= restart: always
這裡包括了另外一個名為Couchbase的服務,使用了一系列埠映射環境變數的。此處有一些重要的注意事項,COUCHBASE_HOST在PHP服務的設置,Key對應的值必須與資料庫的服務名稱Couchbase相匹配。
使用Docker部署上述容器
基礎工作完成,是時候開始部署兩個容器了,開始創建一系列有用的微服務。是時候開始部署兩個容器了,這樣就能創建一系列有用的微服務。
從Docker CLI執行以下操作:
docker-compose run -d --service-ports --name couchbase couchbasedocker-compose run -d --service-ports --name php php
以上命令將使用Compose文件中定義的埠,構建對應鏡像和部署成為容器。從Web瀏覽器,http:// localhost:8091 可以轉到Couchbase Server儀錶板,http:// localhost:8080 可以進入PHP應用程序。
成功後,即可看到保存在資料庫中並顯示在屏幕上的信息。
結論
以上是部署一個PHP應用容器並且與後端的Couchbase Server容器進行通信的過程,雖然選擇的應用很簡單,但方法可以很容易地推廣到任意PHP應用框架容器化和部署。
推薦閱讀:
※通過非常規手段添加PHP後門
※大數據告訴你:為啥近5年來Python如此火爆?
※在 OS X 上是否能跟 Linux 下一樣編譯安裝 PHP、MySQL、Apache 等?Mac 做網頁後端開發是否方便?
※PHP黑系列之一:PHP 為什麼大小寫規則是如此不規則?
※為什麼http請求要3次握手與4次揮手?