【docker】 centos7 下 使用docker 安裝 LNMP


一、安裝 mysql

1 獲取 mysql 鏡像

docker pull  mysql:5.7

2 創建mysql的鏡像,並運行

docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=php@666 --name codeforphp_mysql mysql:5.7

參數說明 

  • -d 讓容器在后台運行 
  • -p 添加主機到容器的端口映射 
  • -e 設置環境變量,這里是設置mysql的root用戶的初始密碼,這個必須設置 
  • –name 容器的名字,隨便取,但是必須唯一

ps: 其實我們可以僅僅使用docker run命令就行了。docker run會先去pull,然后再create。個人習慣先把鏡像pull下來,在run的時候會很快。

 

3 進入mysql 終端

docker exec -it   codeforphp_mysql    bash

參數說明 

  • -t 在容器里生產一個偽終端 
  • -i 對容器內的標准輸入 (STDIN) 進行交互

輸入命令。進入

root@f489cae3f0f4:/# mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.22 MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

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

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'php@666';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'php@666';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1' IDENTIFIED BY 'php@666';
FLUSH PRIVILEGES;

此時可以使用客戶端連接一下看看。注意,客戶端連接端口為 3307 

 

二、 安裝PHP 

  1 拉取php鏡像

docker pull php:7.1-fpm

 2 創建phpfpm容器

php.ini 默認是不存在的,所以我們要做一些改變

在創建之前。需要自己建立一個映射文件夾以便存放

/var/nginx/www/phpfile   里邊新建  php.ini 文件 和 conf.d 文件夾
docker run -d -v /var/nginx/www/html:/var/www/html   -v  /var/nginx/www/phpfile:/usr/local/etc/php    -p 9000:9000 --link codeforphp_mysql:mysql --name codeforphp_phpfpm php:7.1-fpm 

參數說明 

  • -d 讓容器在后台運行 
  • -p 添加主機到容器的端口映射 
  • -v 添加目錄映射,即主機上的/var/nginx/www/html和容器中/var/www/html目錄是同步的 
  • –name 容器的名字 
  • –link 與另外一個容器建立起聯系,這樣我們就可以在當前容器中去使用另一個容器里的服務。

這里如果不指定–link參數其實也是可以得,因為容易本身也是有ip的且唯一,所以我們也可以直接利用ip去訪問容器。

3  進入到我們的容器,然后我們在/var/www/html目錄下新建一個index.php文件

docker exec -it codeforphp_phpfpm bash

touch index.php

我們可以看到該目錄下新建了一個php文件 
接下來我們回到我們的主機上面,訪問一下我們主機上/var/nginx/www/html 

我們發現我們在容器里的  /var/www/html   目錄中新建的文件也在主機的   /var/nginx/www/html   目錄中,因為在創建容器的時候,我們已經把主機中的目錄掛載到了容器中去了。

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

docker-php-ext-install pdo_mysql

 此時修改

/var/nginx/www/phpfile/php.ini 添加
extension=php_pdo.dll

重啟phpfpm容器

docker  restart codeforphp_phpfpm

 查看phpinfo

 

 

 三、 安裝nginx 

 1 拉取鏡像

  ps: 此處我沒指定版本。默認使用 latest 標簽

docker pull nginx:1.10.3

2創建映射目錄和配置文件

  文件存放目錄: /var/nginx/www/html       配置文件目錄:/var/www/nginx/conf.d

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

server
{
  listen 80;
  server_name localhost;

 
         

  location / {
    root /var/www/html;
    index index.html index.htm;
  }

 
         

  location ~ \.php$ {
    fastcgi_pass codeforphp_phpfpm:9000;  #此處寫docker 里邊 php 的名稱: codeforphp_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 -d -p 80:80  -v /var/nginx/www/html:/var/www/html  -v /var/www/nginx/conf.d:/etc/nginx/conf.d     --link codeforphp_phpfpm:phpfpm --name codeforphp_nginx nginx:1.10.3

 

 四、測試

 

1 查看服務

docker ps -a

STATUS 皆為up ,即運行中

 

2 測試PHP 解析:

在宿主機   /var/nginx/www/html 目錄下新建index.php 文件。

<?php echo phpinfo();

訪問:

 

 

3  測試 mysql 鏈接 

修改index.php

<?php
//echo phpinfo();

$dbms='mysql';     //數據庫類型
$host='codeforphp_mysql'; //數據庫主機名,此處寫mysql 容器的名字
$dbport = '3306';
$dbName='mysql';    //使用的數據庫
$user='root';      //數據庫連接用戶名
$pass='php@666';          //對應的密碼
$dsn="$dbms:host=$host;port=$dbport;dbname=$dbName";


try {
    $dbh = new PDO($dsn, $user, $pass); //初始化一個PDO對象
    echo "連接成功<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  , 到正確的輸出,就證明我們的配置成功了。

 


免責聲明!

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



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