數人云以前分享了《如何用Docker實現PHP命令行程序的CI/CD》,詳細地介紹了總體過程當中的思路以及以及注意事項,今天帶來的文章將闡述怎樣部署一個PHP應用容器,而且與後端Couchbase Server容器進行通訊。php
本篇文章講述如何建立一個自動提供的Couchbase節點和簡化PHP應用程序讀取寫入Couchbase NoSQ數據庫。html
首先定義表明兩個容器的項目結構:web
root -- couchbase -- -- configure.sh -- -- Dockerfile -- php -- -- application -- -- -- index.php -- -- configuration -- -- -- php.ini -- -- Dockerfile -- docker-compose.yml
每一個容器都有包含自身構建鏡像步驟對應的Dockerfile文件,docker-compose.yml將使用定義好的端口和環境變量信息構建和部署容器。docker
每一個容器都有包含自身構建鏡像步驟對應的Dockerfile文件,docker-compose.yml將使用定義好的端口和環境變量信息構建和部署容器。數據庫
本文是PHP容器化教程,首先構建簡單的PHP應用程序並對其進行容器化,由於要自動化部署,因此在本地存儲php.ini文件,並在構建過程當中複製。apache
在此以前,爲index.php文件中添加一些代碼:json
<?php header("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方面。app
打開Dockerfile文件,內容以下:
FROM php:5.6.30-apache RUN apt-get update RUN apt-get install -y wget lsb-release RUN wget http://packages.couchbase.com/releases/couchbase-release/couchbase-release-1.0-2-amd64.deb RUN dpkg -i couchbase-release-1.0-2-amd64.deb RUN rm couchbase-release-1.0-2-amd64.deb RUN apt-get update RUN apt-get install -y libcouchbase-dev build-essential php5-dev zlib1g-dev RUN pecl install pcs-1.3.3 RUN pecl install couchbase WORKDIR /var/www/html COPY ./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: '2' services: 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 CLI執行如下操做:
docker-compose run -d --service-ports --name couchbase couchbase docker-compose run -d --service-ports --name php php
以上命令將使用Compose文件中定義的端口,構建對應鏡像和部署成爲容器。從Web瀏覽器,http:// localhost:8091 能夠轉到Couchbase Server儀表板,http:// localhost:8080 能夠進入PHP應用程序。
成功後,便可看到保存在數據庫中並顯示在屏幕上的信息。
以上是部署一個PHP應用容器而且與後端的Couchbase Server容器進行通訊的過程,雖然選擇的應用很簡單,但方法能夠很容易地推廣到任意PHP應用框架容器化和部署。