Docker-- 構(gòu)建nginx-php鏡像

1. 概述

最近在研究wordpress,需要在多臺機器上部署php服務(wù)畏鼓,使用Docker構(gòu)建環(huán)境是一個不錯的選擇酱酬;
具體是采用dockerfile單獨構(gòu)建nginx以及php鏡像;
基礎(chǔ)鏡像采用alpine云矫;
比較折騰的是nginx容器與php容器之間的互連膳沽,需要注意配置;

2. 為什么采用Docker泼差?

  1. 切換服務(wù)器/本地機器方便贵少;
  2. 應(yīng)用之間隔離呵俏,不污染宿主機堆缘;
  3. 方便切換PHP版本;

3. 站點目錄結(jié)構(gòu)

image.png

4. 構(gòu)建php鏡像

??注意事項

  1. 需要在php-fpm.conf中配置deamonize=no,使php服務(wù)在前臺運行保證容器不會退出普碎;

  2. 通常吼肥,nginx與php-fpm是在同一臺機器上運行的,可以將listen定義為:127.0.0.1:9000,這樣nginx可以直接找到本機上的9000端口找到php-fpm服務(wù)麻车;
    但現(xiàn)在是獨立的容器運行缀皱,我們需要將listen定義為0.0.0.0:9000或[::]:9000,表示任何IP都可以訪問动猬;

php-fpm.conf:

deamonize=no

listen = [::]:9000

以下是dockerfile內(nèi)容啤斗,
由于我需要更改php上傳文件限制以及l(fā)og級別還有php運行用戶等,所以使用自己的配置文件,務(wù)必更改deamonize以及l(fā)isten赁咙!

FROM alpine

MAINTAINER for_ly@foxmail.com

# 環(huán)境變量
ENV TIMEZONE            Asia/Shanghai

# 安裝php及其拓展 更新alpine軟件源
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories \
    && apk update \
    && apk upgrade \
    && apk add \
        curl \
        tzdata \
        php7-fpm\
        php7 \
        php7-dev \
        php7-apcu \
        php7-bcmath \
        php7-xmlwriter \
        php7-ctype \
        php7-curl \
        php7-exif \
        php7-iconv \
        php7-intl \
        php7-json \
        php7-mbstring\
        php7-opcache \
        php7-openssl \
        php7-pcntl \
        php7-pdo \
        php7-mysqlnd \
        php7-mysqli \
        php7-pdo_mysql \
        php7-pdo_pgsql \
        php7-phar \
        php7-posix \
        php7-session \
        php7-xml \
        php7-simplexml \
        php7-mcrypt \
        php7-xsl \
        php7-zip \
        php7-zlib \
        php7-dom \
        php7-redis\
        php7-tokenizer \
        php7-gd \
        php7-fileinfo \
        php7-zmq \
        php7-memcached \
        php7-xmlreader \
    # 設(shè)置時區(qū)钮莲,刪除文件
    && cp /usr/share/zoneinfo/${TIMEZONE} /etc/localtime \
    && echo "${TIMEZONE}" > /etc/timezone \
    && apk del tzdata \
    && rm -rf /var/cache/apk/* \
    # 創(chuàng)建自定義log以及pid目錄
    && mkdir -p /usr/local/logs/php7/ \
    && mkdir -p /run/php-fpm/

# 加載自定義配置文件  
COPY php.ini /etc/php7/
COPY php-fpm.conf /etc/php7/
COPY www.conf /etc/php7/php-fpm.d/


# 安裝libiconv
RUN apk add --no-cache --repository http://dl-3.alpinelinux.org/alpine/edge/testing gnu-libiconv
ENV LD_PRELOAD /usr/lib/preloadable_libiconv.so php
RUN rm -rf /var/cache/apk/*

# Install-Composer
RUN curl -sS https://getcomposer.org/installer | \
    php -- --install-dir=/usr/bin/ --filename=composer

EXPOSE 9000

# 啟動
CMD ["/usr/sbin/php-fpm7", "-R"]

5. 構(gòu)建nginx鏡像

FROM alpine
MAINTAINER for_ly@foxmail.com

# 環(huán)境變量
ENV TIMEZONE            Asia/Shanghai
RUN apk add nginx \
    && mkdir /run/nginx/
COPY nginx.conf /etc/nginx/

EXPOSE 80

# 運行nginx并保持在前臺運行
CMD ["/usr/sbin/nginx","-g","daemon off;"]

6. 構(gòu)建鏡像免钻、啟動容器

# 1. nginx
cd xx/my-site/docker-files/nginx
docker build --no-cache nginx:zion .

# 2. php
cd xx/my-site/docker-files/php
docker build --no-cache php:zion

# 3. 啟動php容器  -v指定容器與宿主機目錄映射關(guān)系
docker run -d --name php -v /xxx/my-site/wordpress:/xxx/my-site/wordpress php:zion

# 4. 啟動nginx容器,映射80端口以及網(wǎng)站目錄,nginx與php容器通過--link互連
docker run -d --name nginx -p 0.0.0.0:80:80 -v /xxx/my-site/wordpress:/xxx/my-site/wordpress --link php:php nginx:zion
image.png

7. nginx.conf 摘要

 server {
        listen   80;
        root /xxx/my-site/wordpress;
        index index.htm index.html index.php;
        server_name www.zlld.top;

        location / {
            try_files $uri $uri/ /index.php?_url=$uri&$args;
        }

        location ~ \.php$ {
            fastcgi_pass php:9000;
            fastcgi_index index.php;  # 劃重點崔拥,nginx通過link訪問php容器的php-fpm服務(wù)
            fastcgi_param  SCRIPT_FILENAME  /xxx/my-site/wordpress/$fastcgi_script_name;
            include fastcgi_params;
        }

8. 測試服務(wù)是否能正常訪問

此時php與nginx服務(wù)已正常啟動:


image.png

前面已經(jīng)通過-v映射宿主機與容器共用同一網(wǎng)站目錄
我們在網(wǎng)站目錄下增加index.php

echo '<?php phpinfo(); ?>' > index.php

輸入服務(wù)器公網(wǎng)IP訪問nginx极舔,直接展示php信息


image.png

ps:以上操作花了一整天時間總結(jié)出來,大家有問題或者有建議可私信我指出链瓦,一起交流~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末拆魏,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子慈俯,更是在濱河造成了極大的恐慌渤刃,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,888評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件贴膘,死亡現(xiàn)場離奇詭異溪掀,居然都是意外死亡,警方通過查閱死者的電腦和手機步鉴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評論 3 399
  • 文/潘曉璐 我一進店門揪胃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人氛琢,你說我怎么就攤上這事喊递。” “怎么了阳似?”我有些...
    開封第一講書人閱讀 168,386評論 0 360
  • 文/不壞的土叔 我叫張陵骚勘,是天一觀的道長。 經(jīng)常有香客問我撮奏,道長俏讹,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,726評論 1 297
  • 正文 為了忘掉前任畜吊,我火速辦了婚禮泽疆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘玲献。我一直安慰自己殉疼,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,729評論 6 397
  • 文/花漫 我一把揭開白布捌年。 她就那樣靜靜地躺著瓢娜,像睡著了一般。 火紅的嫁衣襯著肌膚如雪礼预。 梳的紋絲不亂的頭發(fā)上眠砾,一...
    開封第一講書人閱讀 52,337評論 1 310
  • 那天,我揣著相機與錄音托酸,去河邊找鬼褒颈。 笑死伙单,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的哈肖。 我是一名探鬼主播吻育,決...
    沈念sama閱讀 40,902評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼淤井!你這毒婦竟也來了布疼?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,807評論 0 276
  • 序言:老撾萬榮一對情侶失蹤币狠,失蹤者是張志新(化名)和其女友劉穎游两,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體漩绵,經(jīng)...
    沈念sama閱讀 46,349評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡贱案,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,439評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了止吐。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片宝踪。...
    茶點故事閱讀 40,567評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖碍扔,靈堂內(nèi)的尸體忽然破棺而出瘩燥,到底是詐尸還是另有隱情,我是刑警寧澤不同,帶...
    沈念sama閱讀 36,242評論 5 350
  • 正文 年R本政府宣布厉膀,位于F島的核電站,受9級特大地震影響二拐,放射性物質(zhì)發(fā)生泄漏服鹅。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,933評論 3 334
  • 文/蒙蒙 一百新、第九天 我趴在偏房一處隱蔽的房頂上張望企软。 院中可真熱鬧,春花似錦吟孙、人聲如沸澜倦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至碘勉,卻和暖如春巷挥,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背验靡。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評論 1 272
  • 我被黑心中介騙來泰國打工倍宾, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留雏节,地道東北人。 一個月前我還...
    沈念sama閱讀 48,995評論 3 377
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親胡桃。 傳聞我的和親對象是個殘疾皇子馋辈,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,585評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 一、準備工作: 使用工具: 1.主流版本的docker渣锦,本人使用的是 docker 1.91 版本 2.cento...
    dreamer_lk閱讀 2,756評論 1 8
  • docker提供了在服務(wù)端分布式的部署應(yīng)用,這樣的好處是方便維護和升級。 接下來我來介紹一些我在自己的服務(wù)器是如何...
    TonnyAlmend閱讀 7,484評論 5 14
  • runoob-docker教程 總結(jié) 查看ip 查看容器運行狀態(tài)(cpu和內(nèi)存這些) 進入容器內(nèi)進行命令行操作 使...
    tianmac閱讀 1,224評論 1 1
  • [toc] 在公司的網(wǎng)站上推薦使用 docker 容器來安裝環(huán)境涝涤,一個項目一個 docker 容器。 岛杀、阔拳、 百度百...
    Mdvtrw閱讀 1,499評論 0 1
  • 1、背景介紹 為了方便開發(fā)人員對自己的應(yīng)用代碼進行鏡像封裝类嗤,需要提供一個中間件基礎(chǔ)鏡像讓他們直接在上面封裝應(yīng)用鏡像...
    jaymarco閱讀 2,357評論 0 2