基於Docker搭建LNMP環境(轉)


關於什么是docker,建議大家先上網查查有關的用法。如果您不了解,在這篇文章中,您可以簡單的理解為他是一個輕量級的虛擬機。

一、docker安裝mysql
首先,我們從倉庫拉取一個MySql的鏡像

docker pull mysql:5.6

  

然后我們可以通過命令 docker images 查看我們剛剛拉下來的mysql的鏡像

docker images
接下來,我們就開始運行並啟動一個容器,通過以下命令

docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=xy123456 --name xy_mysql mysql:5.6

  

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

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

接下來我們就可以通過命令docker ps -a 查看我們剛剛創建的容器

docker ps -a

這里我們可以看到我的容器狀態的Up狀態,表示容器正在運行,並且把可以看到主機和容器的端口映射關系。

接下來,我們就可以進入到我們剛剛創建的容器中,輸入命令

docker exec -it xy_mysql /bin/bash

  

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

容器中默認是沒有vim的,所以我們首先要安裝vim,需要注意的是安裝前記得先執行apt update命令,不然安裝會出現問題。
進入到mysql容器后,我們通過創建一個遠程可以訪問的用戶,這樣我們就能從別的主機訪問到我們的數據庫了。

二、docker安裝php-fpm
同樣首先我們拉取php-fpm的鏡像

docker pull php:7.0-fpm

  

再創建一個phpfpm容器

docker run -d -v /var/nginx/www/html:/var/www/html -p 9000:9000 --link xy_mysql:mysql --name xy_phpfpm php:7.0-fpm 

  

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

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

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

touch index.php

  

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

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

因為后面我要使用pdo模塊進行測試,所以我需要自己安裝pdo_mysql模塊,在docker容器中可以這樣來安裝

docker-php-ext-install pdo_mysql

  

然后我們可以通過命令php -m查看我們的php的所有擴展模塊,我們可以去看到我們剛剛安裝的pdo_mysql擴展也在里面
這里寫圖片描述
三、docker安裝nginx
首先,我們從倉庫里去拉取一個nginx鏡像

docker pull nginx:1.10.3

  

接下來運行nginx容器

docker run -d -p 80:80 -v /var/nginx/www/html:/var/www/html --link xy_phpfpm:phpfpm --name xy_nginx nginx:1.10.3
 

參數說明:

-d 讓容器在后台運行
-p 添加主機到容器的端口映射
-v 添加目錄映射,這里最好nginx容器的根目錄最好寫成和php容器中根目錄一樣。但是不一點非要一模一樣,如果不一樣在配置nginx的時候需要注意
–name 容器的名字
–link 與另外一個容器建立起聯系

然后進入nginx容器,修改nginx的配置文件讓它支持php

docker exec -ti xy_nginx /bin/bash

  

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

在容器里找到nginx的配置文件,默認是在/etc/nginx目錄下

 

	location ~ \.php$ {
		root           /var/www/html;
		fastcgi_index  index.php;
		fastcgi_pass   phpfpm:9000;//這里改成我們之前--link進來的容器,也可以直接用php容器的ip
		fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;//如果你的根目錄和php容器的根目錄不一樣,這里的$document_root需要換成你php下的根目錄,不然php就找不到文件了
		include        fastcgi_params;                                                                                                                                               
	}

  

最后,我們來測試一下我們的安裝是否成功

<?php
try {
    $con = new PDO('mysql:host=mysql;dbname=test', 'root', 'xy123456');
    $con->query('SET NAMES UTF8');
    $res =  $con->query('select * from test');
    while ($row = $res->fetch(PDO::FETCH_ASSOC)) {
        echo "id:{$row['id']} name:{$row['name']}\n";
    }
} catch (PDOException $e) {
     echo '錯誤原因:'  . $e->getMessage();
}

  

 

這里寫圖片描述

當當當,看到正確的輸出,就證明我們的配置成功了。一個最最最基本的環境就搭建好了。是不是很簡單?

不知道大家有沒有注意到我測試代碼中的

$con = new PDO('mysql:host=mysql;dbname=test', 'root', 'xy123456');

  

這一行,我新建容器的時候並沒有把mysql容器link進來,這里的host我直接用mysql也能成功,為什么呢?因為真正執行這段代碼的是php容器,(如果不清楚nginx和php之間的關系,最好先上網查資料弄清楚)而之前我們在php容器里把php容器link進去了,所以這里是可行的,當前換成mysql容器的ip也是一樣的,可以通過dokcer inspect contanier_name|id來查看容器的有關信息, 不過只能在內網里面使用容器的ip。如果你想在外網訪問容器里的mysql,還是要通過主機的公網ip:port這種形式來訪問。

 

查看IP:

docker inspect --format '{{ .NetworkSettings.IPAddress }}' <container-ID>

建數據庫:

CREATE DATABASE IF NOT EXISTS test default charset utf8 COLLATE utf8_general_ci; 
create table test (id int not null auto_increment,name varchar(20) not null default '',constraint pk_test primary key(id)) ;

  

 


免責聲明!

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



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