docker-compose搭建nginx+php+mysql

前言

上一篇《docker入門(mén)——安裝(CentOS)、鏡像嫂侍、容器》講了docker鏡像獲取殴胧、啟動(dòng)容器等基本使用,本篇講講常用的php戳鹅、nginx均驶、mysql容器安裝及關(guān)聯(lián)。


鏡像選擇

nginx

nginx使用latest tag枫虏。

php

由于php比較多版本妇穴,讀者在php offical選一個(gè)tag,本文使用7.2-fpm(筆者使用latest啟動(dòng)不起來(lái)隶债,不知道為什么)腾它。

PHP Dockerfile

要讓php連接mysql,還要在docker官方的php鏡像上死讹,安裝插件瞒滴。于是,我們使用Dockerfile來(lái)構(gòu)建一個(gè)新鏡像赞警。

新建php-mysqli目錄:

$ mkdir php-mysqli
$ cd php-mysqli
$ vi Dockerfile

編輯Dockerfile妓忍,內(nèi)容如下:

FROM php:7.2-fpm

RUN apt-get update \
    && apt-get install iputils-ping \
    && docker-php-ext-install mysqli && docker-php-ext-enable mysqli

FROM php:7.2-fpm表示基于php:7.2-fpm tag鏡像;
RUN后面的指令仅颇,是創(chuàng)建完該鏡像的容器后单默,再在容器上執(zhí)行這些指令。

這里先不用手動(dòng)build鏡像忘瓦,等會(huì)用docker-compose會(huì)自動(dòng)build

關(guān)于Dockerfile參考 《Docker — 從入門(mén)到實(shí)踐》——使用 Dockerfile 定制鏡像引颈。

mysql

mysql offical耕皮,本文選5.7tag。


docker compose

官方Guide

安裝

1.下載最新版(本文使用1.19.0):

sudo curl -L https://github.com/docker/compose/releases/download/1.19.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

讀者可以到Compose GitHub查看所有發(fā)布版本蝙场。

2.設(shè)置權(quán)限

sudo chmod +x /usr/local/bin/docker-compose

3.測(cè)試是否安裝成功

$ docker-compose --version
docker-compose version 1.19.0, build 1719ceb

構(gòu)建目錄結(jié)構(gòu)

我們做一個(gè)demo凌停,新建如下目錄結(jié)構(gòu):

php-nginx-compose/
├── conf.d
│   └── nginx.conf
├── docker-compose.yml
├── html
│   └── index.php
└── php-mysqli
    └── Dockerfile

php-mysqli

就是剛才在PHP Dockerfile中創(chuàng)建的目錄,直接放在php-nginx-compose目錄中售滤。

docker-compose.yml:

version: '3'
services:
    nginx:
        image: nginx:latest
        # 端口映射
        ports:
            - "80:80"
        # 依賴關(guān)系 先跑php
        depends_on:
            - "php"
        # 數(shù)據(jù)卷
        volumes:
            # 映射主機(jī)./conf.d目錄到容器/etc/nginx/conf.d目錄
            - "$PWD/conf.d:/etc/nginx/conf.d"
            - "$PWD/html:/usr/share/nginx/html"
        networks:
            - app_net
        # 容器名稱
        container_name: "compose-nginx"
    php:
        build: ./php-mysqli
        # image指定build Dockerfile生成鏡像的名稱
        image: php:7.2-fpm-mysqli
        ports:
            - "9000:9000"
        volumes:
            - "$PWD/html:/var/www/html"
        networks:
            - app_net
        container_name: "compose-php"
    mysql:
        image: mysql:5.7
        ports:
            - "3306:3306"
        # 環(huán)境變量
        environment:
            # mysql密碼
            - MYSQL_ROOT_PASSWORD={自己填密碼}
        networks:
            app_net:
                # 固定子網(wǎng)ip罚拟,網(wǎng)段必須在子網(wǎng)絡(luò)10.10.*.*
                ipv4_address: 10.10.10.1
        container_name: "compose-mysql"
networks:
    # 配置docker network
    app_net:
        driver: bridge
        ipam:
            config:
                # 子網(wǎng)絡(luò)
                - subnet: 10.10.0.0/16

關(guān)于Compose file配置,官方詳細(xì)說(shuō)明完箩。網(wǎng)上還有一篇中文配置說(shuō)明《如何寫(xiě)docker-compose.yml赐俗,Docker compose file 參考文檔》。筆者建議先看官方文檔弊知,不懂了再找翻譯阻逮。

conf.d/nginx.conf

server {
    listen       80;
    server_name  localhost;
    location / {
        root   /var/www/html;
        index  index.html index.htm index.php;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /var/www/html;
    }
    location ~ \.php$ {
        fastcgi_pass   php:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /var/www/html/$fastcgi_script_name;
        include        fastcgi_params;
    }
}

html/index.php

<?php
phpinfo();

啟動(dòng)服務(wù)

$ docker-compose up -d
Creating compose-php ... done
Creating compose-nginx ... done
Creating compose-mysql ...
Creating compose-nginx ...

查看是否啟動(dòng)成功:

 docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
aeb1f626516b        nginx:latest         "nginx -g 'daemon of…"   5 seconds ago       Up 3 seconds        0.0.0.0:80->80/tcp       compose-nginx
4e681d94c146        php:7.2-fpm-mysqli   "docker-php-entrypoi…"   7 seconds ago       Up 5 seconds        0.0.0.0:9000->9000/tcp   compose-php
fcdf6ac20bac        mysql:5.7            "docker-entrypoint.s…"   7 seconds ago       Up 5 seconds        0.0.0.0:3306->3306/tcp   compose-mysql

nginxphp秩彤、mysql容器都啟動(dòng)了叔扼。如果三者沒(méi)全啟動(dòng)事哭,嘗試再docker-compose up -d;如果還啟動(dòng)不成功瓜富,就排查一下是否配置有誤鳍咱。

瀏覽index.php

這個(gè)畫(huà)面出現(xiàn),證明nginxphp容器關(guān)聯(lián)起來(lái)了与柑。

可以用Navicat等數(shù)據(jù)庫(kù)工具連接mysql流炕,賬號(hào):root,密碼是剛才配置的MYSQL_ROOT_PASSWORD環(huán)境變量的值仅胞,端口:3306每辟。

停止服務(wù)

1.docker-compose停止
2.docker命令停止

docker-compose停止

docker-compose up -d。即使用docker命令停止部分容器干旧,也可以用docker-compose up來(lái)啟動(dòng)未成功啟動(dòng)的容器渠欺。

$ docker-compose stop
Stopping compose-nginx ... done
Stopping compose-php   ... done
Stopping compose-mysql ... done

docker命令停止

docker stop 容器名/容器id

重啟服務(wù)

直接用docker-compose up -d重啟即可,即使停止了部分容器椎眯。


php連接mysql

php-nginx-compose/html/目錄挠将,新建connect_mysql.php

<?php
// mysqli_connect參數(shù):ip:port、賬號(hào)编整、密碼舔稀、數(shù)據(jù)庫(kù)
$link = mysqli_connect("10.10.10.1:3306", "root", "密碼", "mysql");

if (!$link) {
    echo "Error: Unable to connect to MySQL." . PHP_EOL . "</br>";
    echo "Debugging errno: " . mysqli_connect_errno() . PHP_EOL. "</br>";
    echo "Debugging error: " . mysqli_connect_error() . PHP_EOL. "</br>";
    exit;
}

echo "Success: A proper connection to MySQL was made! The my_db database is great." . PHP_EOL. "</br>";
echo "Host information: " . mysqli_get_host_info($link) . PHP_EOL;

mysqli_close($link);
?>

ip是剛才docker-compose.yml配置的子網(wǎng)ip ipv4_address: 10.10.10.1。php語(yǔ)法參考官方文檔:mysqli_connect掌测。

瀏覽connect_mysql.php

出現(xiàn)Success: A proper connection to MySQL was made! The my_db database is great. Host information: 10.10.10.1:3306 via TCP/IP證明連接mysql成功内贮。

Demo

kkmike999/docker-compose-php-nginx-mysql


關(guān)于作者

我是鍵盤(pán)男。
在廣州生活汞斧,在互聯(lián)網(wǎng)公司上班夜郁,猥瑣文藝碼農(nóng)。喜歡科學(xué)粘勒、歷史竞端,玩玩投資。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末庙睡,一起剝皮案震驚了整個(gè)濱河市事富,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌乘陪,老刑警劉巖统台,帶你破解...
    沈念sama閱讀 219,039評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異暂刘,居然都是意外死亡饺谬,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)募寨,“玉大人族展,你說(shuō)我怎么就攤上這事“斡ィ” “怎么了仪缸?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,417評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)列肢。 經(jīng)常有香客問(wèn)我恰画,道長(zhǎng),這世上最難降的妖魔是什么瓷马? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,868評(píng)論 1 295
  • 正文 為了忘掉前任拴还,我火速辦了婚禮,結(jié)果婚禮上欧聘,老公的妹妹穿的比我還像新娘片林。我一直安慰自己,他們只是感情好怀骤,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布费封。 她就那樣靜靜地躺著,像睡著了一般蒋伦。 火紅的嫁衣襯著肌膚如雪弓摘。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,692評(píng)論 1 305
  • 那天痕届,我揣著相機(jī)與錄音韧献,去河邊找鬼。 笑死爷抓,一個(gè)胖子當(dāng)著我的面吹牛势决,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蓝撇,決...
    沈念sama閱讀 40,416評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼陈莽!你這毒婦竟也來(lái)了渤昌?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,326評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤走搁,失蹤者是張志新(化名)和其女友劉穎独柑,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體私植,經(jīng)...
    沈念sama閱讀 45,782評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡忌栅,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片索绪。...
    茶點(diǎn)故事閱讀 40,102評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡湖员,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出瑞驱,到底是詐尸還是另有隱情娘摔,我是刑警寧澤,帶...
    沈念sama閱讀 35,790評(píng)論 5 346
  • 正文 年R本政府宣布唤反,位于F島的核電站凳寺,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏彤侍。R本人自食惡果不足惜肠缨,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望盏阶。 院中可真熱鬧晒奕,春花似錦、人聲如沸般哼。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,996評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)蒸眠。三九已至漾橙,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間楞卡,已是汗流浹背霜运。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,113評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蒋腮,地道東北人淘捡。 一個(gè)月前我還...
    沈念sama閱讀 48,332評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像池摧,于是被迫代替她去往敵國(guó)和親焦除。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評(píng)論 2 355