標籤:

輕鬆搞定|將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次揮手?

TAG:PHP | Docker |