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