Linux系统: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 容器的名字,随便取,但是必须唯一

 

注意: 其实我们可以仅仅使用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;mysql远程连接,端口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

touch index.php

我们可以看到该目录下新建了一个php文件。

接下来我们回到我们的主机上面,访问一下我们主机上/var/nginx/www/html。

我们发现我们在容器里的 /var/www/html 目录中新建的文件也在主机的 /var/nginx/www/html 目录中,因为在创建容器的时候,我们已经把主机中的目录挂载到了容器中去了。

 

4、安装pdo扩展

以便后边测试数据库连接,在docker容器中可以这样来安装

docker-php-ext-install pdo_mysql

docker-php-ext-install pdo_mysql

 

此时修改 /var/nginx/www/phpfile/php.ini,添加

extension=php_pdo.dll

 

重启php-fpm容器:

docker restart codeforphp_phpfpm

 

查看phpinfo:phpinfo pdo_mysql

 

三、 安装nginx

 

1、拉取镜像

注意: 此处我没指定版本。默认使用 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;
  }

}

 

3、创建容器

映射了配置文件和文件目录

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

 

四、测试 PHP+Mysql+Nginx

 

1、查看服务

docker ps -a

docker ps -a

STATUS 皆为up ,即运行中;

 

2、 测试PHP 解析

在主机 /var/nginx/www/html 目录下新建index.php 文件。index.php代码如下:

<?php echo phpinfo();

访问:php7.1 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 , 到正确的输出,就证明我们的配置成功了。

    A+
发布日期:2018年06月20日 22:43:48  所属分类:Docker
最后更新时间:2018-06-20 22:45:35
头像
  • ¥ 298.0元
  • 市场价:598.0元
  • ¥ 298.0元
  • 市场价:598.0元
  • ¥ 39.0元
  • 市场价:39.0元
  • ¥ 1999.9元
  • 市场价:20000元

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: