docker-compose的實(shí)踐(lnmp的多容器服務(wù))

前言

服務(wù)器技術(shù)日益高大上,docker持續(xù)火熱。作為一個(gè)開發(fā)者,不使用docker,那就太落后。從去年就開始接觸docker,在本地的開發(fā)中也使用了dokcer.但是還是處于不熟練狀態(tài)。這2天抽空研究了docker-compose,將docker多容器組合進(jìn)行了實(shí)踐,以方便后期的軟件部署的需要。

文件地址

下載

問(wèn)題

使用docker-compose 實(shí)現(xiàn)Lnmp的搭建。
linux+nginx+mysql+php
docker 好處:

  • 環(huán)境的一致性。本地,測(cè)試,生產(chǎn)環(huán)境不再存在差異。
  • 生產(chǎn)環(huán)境下,運(yùn)維的自動(dòng)化和擴(kuò)容方便。容易復(fù)制和遷移。

docker-compose的好處:

  • 批量管理docker,省時(shí)省力。

解決

  • 在本地創(chuàng)建一個(gè)文件夾,里面結(jié)構(gòu)如下:
├── README.md
├── db_data    數(shù)據(jù)庫(kù)文件存儲(chǔ)目錄
├── docker-compose.yml    docker-compose的配置文件
├── mysql
│   └── Dockerfile    mysql的dockfile文件。這里沒(méi)用到。是空白
├── nginx
│   ├── Dockerfile   nginx的dockfile文件
│   └── default.conf   nginx的配置
├── php-fpm
│   ├── Dockerfile  php的dockfile文件
│   ├── php.ini     php的配置文件
│   ├── php.ini-development  php的開發(fā)配置文件
│   └── php.ini-production  php的生產(chǎn)配置文件
└── web    php項(xiàng)目代碼
    ├── db.sql    數(shù)據(jù)庫(kù)文件
    ├── index.html     
    ├── index.php   
    └── mysql.php  
  • 介紹下docker-compose的配置文件
#版本號(hào)
version: "3"
#服務(wù)
services:
    #mysql服務(wù)
    db:
      #服務(wù)器鏡像
     image: mysql:latest
     #磁盤映射。./db_data 是宿主的目錄。后者是容器里的目錄。
     volumes:
       - ./db_data:/var/lib/mysql
     restart: always
     # 端口映射。前者是宿主的。后者是容器里端口
     ports:
       - "3307:3306"
     #環(huán)境變量
     environment:
      #mysql的root密碼
       MYSQL_ROOT_PASSWORD: 123456
       #容器會(huì)創(chuàng)建的數(shù)據(jù)庫(kù)
       MYSQL_DATABASE: testdb
       #test用戶
       MYSQL_USER: test
       #test用戶的密碼
       MYSQL_PASSWORD: 123456 
    #php-fpm服務(wù)
    php:
     volumes:
       - ./web:/www/web
      #依賴的服務(wù)。會(huì)在容器里的host文件里添加 一條記錄。訪問(wèn)db,即可訪問(wèn)mysql的服務(wù)。
     depends_on:
       - db
       #服務(wù)器鏡像構(gòu)建的目錄。會(huì)在該目錄下尋找dockerfile構(gòu)建鏡像。
     build: ./php-fpm
     restart: always
    #nginx服務(wù)
    nginx:
     depends_on:
       - php
     volumes:
       - ./web:/www/web
     build: ./nginx
     ports:
       - "81:80"
     restart: always
  • 安裝步驟

nginx的基礎(chǔ)鏡像

docker pull daocloud.io/library/nginx:1.13.0

php的基礎(chǔ)鏡像

docker pull daocloud.io/library/php:7.0.20-fpm

mysql的基礎(chǔ)鏡像

docker pull mysql:latest

執(zhí)行服務(wù)編排,創(chuàng)建容器,啟動(dòng)php mysql nginx

docker-compose up -d
  • 訪問(wèn)測(cè)試

測(cè)試nginx

http://localhost:81/  

測(cè)試phpinfo

http://localhost:81/index.php

測(cè)試數(shù)據(jù)庫(kù)

http://localhost:81/mysql.php
  • 遇到的坑
    • php找不到文件路徑。
      nginx服務(wù)和php服務(wù)需要映射相同的路徑。例如這里都是/www/web
      配置如下:
location ~ \.php$ {
        root           /www/web;
        fastcgi_pass   php:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /www/web/$fastcgi_script_name;
        include        fastcgi_params;
    }
  • nginx轉(zhuǎn)發(fā)php解析失敗。
    主要問(wèn)題是php的服務(wù)需要修改配置,默認(rèn)的配置php-fpm只監(jiān)控127.0.0.1地址。需要修改監(jiān)控任意地址。
RUN sed -i -e 's/listen = 127.0.0.1:9000/listen = 9000/' /usr/local/etc/php-fpm.d/www.conf
  • php服務(wù)無(wú)法連接mysql配置。
    主要是php擴(kuò)展的問(wèn)題。這個(gè)問(wèn)題其實(shí)很奇怪,按理基礎(chǔ)鏡像里應(yīng)該包含這個(gè)。不知道為何沒(méi)有。
RUN docker-php-ext-install mysqli && docker-php-ext-enable mysqli
  • 補(bǔ)充命令。
    停止容器
docker-compose stop

刪除容器

docker-compose rm
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容