docker下如何搭建MySQL+php-fpm+nginx容器環境,本文詳解


 

docker下搭建MySQL+php-fpm+nginx容器環境

准備鏡像

我使用的centos系統,docker-ce最新版本。

先准備好三個鏡像

docker pull mysql:5.7

docker pull php:5.6-fpm

docker pull nginx:latest

注意,mysql和php不要使用最新版本,坑很多。另外注意:很多人在學Java高級過程中難免會遇到各種問題解決不了。為此我建了個裙 783802103,里面很多架構師一起交流解答,薪資低於8k的勿進哦!

docker images #查看鏡像

一、構建mysql容器

docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=ziqin666 -v /mysql:/var/lib/mysql --name your_mysql mysql:5.7

配置容器(進入容器)

docker exec -it   your_mysql    bash

進入之后,要對用戶進行授權,以便使用遠程連接

連接mysql 輸入密碼:ziqin666 執行如下命令

GRANT ALL PRIVILEGES ON *.* TO "root"@"localhost" IDENTIFIED BY "ziqin666"; GRANT ALL PRIVILEGES ON *.* TO "root"@"%" IDENTIFIED BY "ziqin666"; GRANT ALL PRIVILEGES ON *.* TO "root"@"127.0.0.1" IDENTIFIED BY "ziqin666"; FLUSH PRIVILEGES;

 此時可以使用客戶端連接一下看看。(一定要把安全組規則對應端口打開)

二、構建php-fpm容器

准備工作

php.ini 默認是不存在的

在/home/app/phpfile文件夾下創建 php.ini文件和conf.d文件夾

創建容器

 docker run -p 9000:9000 --name your_phpfpm -v /home/app/html:/var/www/html -v /home/app/phpfile:/usr/local/etc/php --link your_mysql:mysql  -d php:5.6-fpm

 命令說明:

  • --name your_phpfpm : 將容器命名為 your_phpfpm。
  • -v /home/app/html:/var/www/html : 將主機中項目的目錄 /home/app/html 掛載到容器的 /var/www/html

安裝 pdo 以便后邊測試數據庫連接,在docker的php容器中可以這樣來安裝

docker-php-ext-install pdo_mysql

安裝其他插件也可以使用這種辦法

並加入到php.ini

extension=php_curl.dll extension=php_gd2.dll extension=php_mysql.dll extension=php_mysqli.dll extension=php_pdo_mysql.dll extension=php_pdo_odbc.dll extension=php_pdo.dll

如果插件還不夠就需要自己定制鏡像

FROM php:7.0.12-fpm MAINTAINER Tairy <tairyguo@gmail.com> WORKDIR /working RUN apt-get update --fix-missing && apt-get install -y g++ autoconf bash git apt-utils libxml2-dev libcurl3-dev pkg-config && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo "Asia/Shanghai" > /etc/timezone && docker-php-ext-install iconv curl mbstring xml json mcrypt mysqli pdo pdo_mysql zip && docker-php-ext-configure gd --with-gd --with-freetype-dir=/usr/include/ --with-png-dir=/usr/include/ --with-jpeg-dir=/usr/include/ && docker-php-ext-install gd && docker-php-ext-enable gd && pecl install /pecl/redis-3.0.0.tgz && docker-php-ext-enable redis && apt-get purge -y --auto-remove && rm -rf /var/cache/apt/* && rm -rf /var/lib/apt/lists/* && rm -rf /pecl

三、安裝nginx

配置文件目錄:/home/app/nginx/conf.d (注釋:沒有的文件自主創建哈)

在配置文件目錄新建 default.conf

server
{
  listen 80;   server_name localhost;   location / {     root /usr/share/nginx/html;     index index.html index.htm;   }   location ~ .php$ {     fastcgi_pass your_phpfpm:9000; #此處寫docker里邊php 的名稱: your_phpfpm     fastcgi_index index.php;     fastcgi_param SCRIPT_FILENAME /var/www/html/$fastcgi_script_name;     include fastcgi_params;   }   error_page 500 502 503 504 /50x.html;   location = /50x.html {     root /usr/share/nginx/html;   } }

創建容器

docker run -p 81:80 --name your_nginx -v /home/app/nginx/www:/usr/share/nginx/html -v /home/app/nginx/conf.d:/etc/nginx/conf.d --link your_phpfpm:phpfpm -d nginx:latest

映射容器中的phpfpm和mysql都為固定,不能修改!

這里需要配置nginx使用用戶,即把/etc/nginx/nginx.conf里的nginx用戶修改為www-data,同時把/home/app/nginx/www下的文件所有者改為www-data:www_data,否則訪問會有權限問題

chown -R www-data:www-data www

四 、 測試

1、查看服務

docker  ps -a

STATUS 皆為up ,即運行中

2、測試 php解析

宿主機 /home/app/nginx/www/目錄下修改 index.php 文件。

<?php echo phpinfo();

3、測試mysql 鏈接

修改 index.php

<?php //echo phpinfo(); $dbms="mysql"; //數據庫類型 $host="your_mysql"; //數據庫主機名,此處寫mysql 容器的名字 $dbport = "3306"; $dbName="mysql"; //使用的數據庫 $user="root"; //數據庫連接用戶名 $pass="123456"; //對應的密碼 $dsn="$dbms:host=$host;port=$dbport;dbname=$dbName"; try { $dbh = new PDO($dsn, $user, $pass); //初始化一個PDO對象 echo "successful<br/>"; //你還可以進行一次搜索操作 // foreach ($dbh->query("SELECT * from user") as $row) { // print_r($row); //你可以用 echo($GLOBAL); 來看到這些值 // } $dbh = null; } catch (PDOException $e) { die ("Error!: " . $e->getMessage() . "<br/>"); }

訪問ip , 到正確的輸出,就證明我們的配置成功了。最后注意:很多人在學Java高級過程中難免會遇到各種問題解決不了。為此我建了個裙 783802103,里面很多架構師一起交流解答,沒基礎勿進哦!

本文的文字及圖片來源於網絡加上自己的想法,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯系我們以作處理


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM