輕鬆搞定|將PHP和Couchbase應用部署爲Docker

image

數人云以前分享了《如何用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應用程序並對其進行容器化,由於要自動化部署,因此在本地存儲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部署上述容器

基礎工做完成,是時候開始部署兩個容器了,開始建立一系列有用的微服務。是時候開始部署兩個容器了,這樣就能建立一系列有用的微服務。

從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應用框架容器化和部署。

相關文章
相關標籤/搜索