一、安装 mysql

1 获取 mysql 镜像

docker pull  mysql:5.7

2 创建mysql的镜像,并运行

docker run -d -p : -e MYSQL_ROOT_PASSWORD=php@ --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
Server version: 5.7. MySQL Community Server (GPL) Copyright (c) , , 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 = '';
$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  , 到正确的输出,就证明我们的配置成功了。

【docker】 centos7 下 使用docker 安装 LNMP的更多相关文章

  1. Centos7下使用yum安装lnmp zabbix3.2

    1:配置epel-release mysql zabbix 源 配置epel源 wget http://mirrors.aliyun.com/epel/epel-release-latest-7.no ...

  2. Docker Centos7 下建立 Docker 桥接网络

    为什么要让docker桥接物理网络? docker默认提供了一个隔离的内网环境,启动时会建立一个docker0的虚拟网卡,每个容器都是连接到docker0网卡上的.而docker0的ip段为172.1 ...

  3. [Docker]CentOS7下Docker安装教程

    想要倒腾Kubernetes的话,第一步就是要会安装Docker,这篇文章讲一讲过程 安装步骤 检查内核版本,必须是3.10以上 uname -r 安装Docker yum -y install do ...

  4. [Docker]CentOS7通过rpm包安装Docker

    前几天写过一篇文章:[Docker]CentOS7下Docker安装教程,直接使用yum命令下载Docker即可.但是前提是你需要***,所以这篇文章来讲讲,如果不会***,该如何安装Docker. ...

  5. Centos7下卸载docker

    最近发现某台机器上的Docker服务无法开启,报如下错误: [root@localhost ~]# docker ps -a Cannot connect to the Docker daemon. ...

  6. centos7下使用yum安装mysql

    CentOS7的yum源中默认好像是没有mysql的.为了解决这个问题,我们要先下载mysql的repo源. 1. 下载mysql的repo源 wget http://repo.mysql.com/m ...

  7. [转]Centos7下caffe的安装

    Centos7下caffe的安装 原文地址:http://blog.csdn.net/s2392735818/article/details/49796017   版权声明:本文为博主原创文章,未经博 ...

  8. centos7下搜狗输入法的安装教程

    相信用过centos自带的输入法的朋友都会感叹这也实在是太难用了吧,使用拼音打出来的词总是不能在前几个匹配到,即使是一些常用词也是如此,简直无法忍受跟个zz似的.吐槽完了,这里给出centos7下搜狗 ...

  9. centos7下使用yum安装pip

    centos7下使用yum安装pip 首先安装epel扩展源: yum -y install epel-release 更新完成之后,就可安装pip: yum -y install python-pi ...

  10. Centos7 下的SVN安装与配置

    Centos7 下的SVN安装与配置 1.关闭防火墙 临时关闭防火墙 systemctl stop firewalld 永久防火墙开机自关闭 systemctl disable firewalld 临 ...

随机推荐

  1. php可选缓存APC

    1.APC缓存简介 APC,全称是Alternative PHP Cache,官方翻译叫”可选PHP缓存”.它为我们提供了缓存和优化PHP的中间代码的框架. APC的缓存分两部分:系统缓存和用户数据缓 ...

  2. perl 安装Image::Magick 模块

    ImageMagick 是一个处理图片的库,有C, perl, python, java 等多种语言对应的库 在安装perl 对应的Image::Magick 模块之前,首先需要安装 ImgeMagi ...

  3. Java Number类

    一般地,当需要使用数字的时候,我们通常使用内置数据类型,如:byte.int.long.double等. 例如: int i = 5000; float gpa = 13.65; byte mask ...

  4. [Learn AF3]第二章 App Framework 3.0的组件View——AF3的驱动引擎

    View:af3中的驱动引擎   组件名称:View     使用说明:按照官方的说法,view组件是af3的“驱动引擎(driving force)”,view是af3应用的基础,一个app中可以包 ...

  5. RMAN:简单的duplicate创建新数据库 for 12c+

    构建参数文件 *.db_name='test2' ##### 需要注意的地方,和rman的duplicate目标库一致 *.compatible='18.0.0' ##### 关键的地方,每个版本的模 ...

  6. Android开发学习笔记-splash画面的显示

    贴代码: <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android=&qu ...

  7. Cannot call sendError() after the response has been committed - baiyangliu

    当response提交后,不能调用sendError(),什么意思? 出现这个错误,一定是多次response导致的.可以这么理解,承载客户端和服务器进行Http交互的Socket连接已经关闭了,而你 ...

  8. 妙味远程课堂-JS热身运动-上

    希望某个元素移除视线 display:none//显示无 visibility:hidden//可见性 隐藏 width/height 改为0 透明度 定位,left/top值为负值 用与背景颜色一样 ...

  9. EXCEPTION:FATAL: UNABLE TO CREATE ‘…GIT/INDEX.LOCK’ FILE EXISTS

    FATAL: UNABLE TO CREATE ‘…GIT/INDEX.LOCK’ FILE EXISTS Hi, Today I will share you my other experience ...

  10. Java实现局部内部类的简单应用

    日常生活中,闹钟的应用非常广泛.使用它可以更好地帮助人们安排时间.编写程序,实现一个非常简单的闹钟,控制台会不断输出当前的时间,并且每隔一秒钟会发出提示音.用户可以单击“确定”按钮来退出程序. 思路分 ...