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

来源:https://www.cnblogs.com/zmdComeOn/archive/2020/05/21/12933974.html
-Advertisement-
Play Games

準備鏡像 我使用的centos系統,docker-ce最新版本。 先準備好三個鏡像 docker pull mysql:5.7 docker pull php:5.6-fpm docker pull nginx:latest 註意,mysql和php不要使用最新版本,坑很多。 docker imag ...


準備鏡像

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

先準備好三個鏡像

docker pull mysql:5.7

docker pull php:5.6-fpm

docker pull nginx:latest

註意,mysql和php不要使用最新版本,坑很多。

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 , 到正確的輸出,就證明我們的配置成功了。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 問題:控制台tomcat日誌亂碼,網站頁面亂碼 配置:idea2019.2、win10、tomcat8.5 字元集: idea2019.2 File Encoding UTF-8 win10 系統預設GBK tomcat8.5 UTF-8 控制台亂碼 1、將tomcat目錄下conf\logging ...
  • 一、電腦要完成兩數相加,可以大致分為如下幾個步驟: 1.從記憶體位置2000上把一個數字拷貝到寄存器1; 2.從記憶體位置2004上把另一個數字拷貝到寄存器2; 3.把寄存器2裡面的內容與寄存器1中的內容相加,把結果儲存在寄存器1中。 4.把寄存器1中的內容拷貝到記憶體位置2008。 二、高級語言以更抽 ...
  • 今天是521,就分享一個程式員必會的——情侶回憶殺《愛情電子相冊》吧!話不多說,先上思路,後接源碼! 具備能力: 1.基本可視化編程 1.1 initgraph(800,600); 1.2 關閉視窗closegraph(); 1.3 視窗坐標 2.基本繪圖函數 2.1 line 畫線 2.2 cir ...
  • Level 7kyu :Two to One 取2個字元串s1,s2僅包含從a到的字母z。 返回一個新的排序字元串,最長的字元串,包含不同的字母, 每個僅取一次-來自s1或s2。 主要方法: toCharArray()->字元串轉字元數組 arraycopy(from,0,to,0,長度)->複製數 ...
  • Level 7kyu :Get the Middle Character 您將得到一個單詞。 您的工作是返回單詞的中間字元。 要求: 如果單詞的長度是奇數,則返回中間字元。 如果單詞的長度是偶數,請返回中間的2個字元。 主要方法: length()->獲取字元串長度 charAt(索引下標)->返回 ...
  • manacher 線性查找演算法 manacher演算法中需要知道的概念: 迴文半徑: 迴文中心 到 迴文邊界的距離. 迴文半徑數組: radius[i]表示以 i 為迴文中心的最大迴文半徑. 迴文最右邊界: 出現的迴文邊界中最右的位置. 首次迴文中心: 迴文最右邊界首次出現時的迴文中心. 首次迴文左邊 ...
  • 1. PIL Image圖片顯示 在使用PIL函數中的Image方法讀取圖片時,對於圖片的shape,可能有不少寶寶存在疑惑。是什麼疑惑了?就是image = Image.open(image_path),當你執行print(image.size)時,你得到的是圖片的真實維度:W * H(寬和高), ...
  • Token驗證是驗證用戶身份的重要方式,在golang開發中具有廣泛應用,文中主要闡述了利用jwt包加密後的token驗證。 導入包: import ( "github.com/dgrijalva/jwt-go") // GenerateToken 生成Tokenfunc GenerateToken ...
一周排行
    -Advertisement-
    Play Games
  • C#TMS系統代碼-基礎頁面BaseCity學習 本人純新手,剛進公司跟領導報道,我說我是java全棧,他問我會不會C#,我說大學學過,他說這個TMS系統就給你來管了。外包已經把代碼給我了,這幾天先把增刪改查的代碼背一下,說不定後面就要趕鴨子上架了 Service頁面 //using => impo ...
  • 委托與事件 委托 委托的定義 委托是C#中的一種類型,用於存儲對方法的引用。它允許將方法作為參數傳遞給其他方法,實現回調、事件處理和動態調用等功能。通俗來講,就是委托包含方法的記憶體地址,方法匹配與委托相同的簽名,因此通過使用正確的參數類型來調用方法。 委托的特性 引用方法:委托允許存儲對方法的引用, ...
  • 前言 這幾天閑來沒事看看ABP vNext的文檔和源碼,關於關於依賴註入(屬性註入)這塊兒產生了興趣。 我們都知道。Volo.ABP 依賴註入容器使用了第三方組件Autofac實現的。有三種註入方式,構造函數註入和方法註入和屬性註入。 ABP的屬性註入原則參考如下: 這時候我就開始疑惑了,因為我知道 ...
  • C#TMS系統代碼-業務頁面ShippingNotice學習 學一個業務頁面,ok,領導開完會就被裁掉了,很突然啊,他收拾東西的時候我還以為他要旅游提前請假了,還在尋思為什麼回家連自己買的幾箱飲料都要叫跑腿帶走,怕被偷嗎?還好我在他開會之前拿了兩瓶芬達 感覺感覺前面的BaseCity差不太多,這邊的 ...
  • 概述:在C#中,通過`Expression`類、`AndAlso`和`OrElse`方法可組合兩個`Expression<Func<T, bool>>`,實現多條件動態查詢。通過創建表達式樹,可輕鬆構建複雜的查詢條件。 在C#中,可以使用AndAlso和OrElse方法組合兩個Expression< ...
  • 閑來無聊在我的Biwen.QuickApi中實現一下極簡的事件匯流排,其實代碼還是蠻簡單的,對於初學者可能有些幫助 就貼出來,有什麼不足的地方也歡迎板磚交流~ 首先定義一個事件約定的空介面 public interface IEvent{} 然後定義事件訂閱者介面 public interface I ...
  • 1. 案例 成某三甲醫預約系統, 該項目在2024年初進行上線測試,在正常運行了兩天後,業務系統報錯:The connection pool has been exhausted, either raise MaxPoolSize (currently 800) or Timeout (curren ...
  • 背景 我們有些工具在 Web 版中已經有了很好的實踐,而在 WPF 中重新開發也是一種費時費力的操作,那麼直接集成則是最省事省力的方法了。 思路解釋 為什麼要使用 WPF?莫問為什麼,老 C# 開發的堅持,另外因為 Windows 上已經裝了 Webview2/edge 整體打包比 electron ...
  • EDP是一套集組織架構,許可權框架【功能許可權,操作許可權,數據訪問許可權,WebApi許可權】,自動化日誌,動態Interface,WebApi管理等基礎功能於一體的,基於.net的企業應用開發框架。通過友好的編碼方式實現數據行、列許可權的管控。 ...
  • .Net8.0 Blazor Hybird 桌面端 (WPF/Winform) 實測可以完整運行在 win7sp1/win10/win11. 如果用其他工具打包,還可以運行在mac/linux下, 傳送門BlazorHybrid 發佈為無依賴包方式 安裝 WebView2Runtime 1.57 M ...