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