关于什么是docker,建议大家先上网查查有关的用法。如果您不了解,在这篇文章中,您可以简单的理解为他是一个轻量级的虚拟机。

一、docker安装mysql
首先,我们从仓库拉取一个MySql的镜像

docker pull mysql:5.6

  

然后我们可以通过命令 docker images 查看我们刚刚拉下来的mysql的镜像


接下来,我们就开始运行并启动一个容器,通过以下命令

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 查看我们刚刚创建的容器

这里我们可以看到我的容器状态的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)) ;

  

基于Docker搭建LNMP环境(转)的更多相关文章

  1. docker搭建lnmp环境(问题,资料,命令)

    入门参考 http://www.runoob.com/docker/docker-install-nginx.html 十大常用命令玩转docker 1. #从官网拉取镜像 docker pull & ...

  2. Mac下docker搭建lnmp环境 + redis + elasticsearch

    之前在windows下一直使用vagrant做开发, 团队里面也是各种开发环境,几个人也没有统一环境,各种上线都是人肉,偶尔还会有因为开发.测试.生产环境由于软件版本或者配置不一致产生的问题, 今年准 ...

  3. 使用docker搭建lnmp环境

    Docker容器LNMP环境搭建 安装 制作镜像 启动并关联实例 安装 系统环境 硬件型号: ThinkPad T520 系统版本: ubuntu 14.04 CPU: i7 RAM: 8G 添加软件 ...

  4. docker搭建lnmp环境

    1.搭建lnmp网站平台 1.创建mysql数据库容器 docker run -it -d --name lnmp_mysql -p 3308:3306 -e MYSQL_ROOT_PASSWORD= ...

  5. docker 搭建lnmp环境以及docker常用命令

    1.首先docker 的基本操作. 2.然后命令深入,网络映射. 3.访问docker 内的应用 端口映射网桥之类. docker pull hub.c.163.com/library/php:7.0 ...

  6. Docker快速搭建LNMP环境

    一.使用Dockerfile制作镜像 前面的博客中已经介绍了如何基于容器制作镜像,此方法的原理是使用一个正在运行的容器,根据生产所需进行配置更改等操作后,使其满足生产环境,再将这个容器打包制作为镜像, ...

  7. Ubuntu 基于Docker的TensorFlow 环境搭建

    基于Docker的TensorFlow 环境搭建 基于(ubuntu 16.04LTS/ubuntu 14.04LTS) 一.docker环境安装 1)更新.安装依赖包 sudo apt-get up ...

  8. 深入浅出Docker(五):基于Fig搭建开发环境

    概述 在搭建开发环境时,我们都希望搭建过程能够简单,并且一劳永逸,其他的同事可以复用已经搭建好的开发环境以节省开发时间.而在搭建开发环境时,我们经常会被复杂的配置以及重复的下载安装所困扰.在Docke ...

  9. EOS Dapp开发(1)-基于Docker的开发环境搭建

    随着EOS主网的上线,相信基于EOS的Dapp开发会越来越多,查阅了很多资料相关的开发资料都不是很多,只能自己摸索,按照网上仅有的几篇教程,先git clonehttps://github.com/E ...

随机推荐

  1. 转:初探nginx架构(一)

    来源:http://tengine.taobao.org/book/chapter_02.html 众所周知,nginx性能高,而nginx的高性能与其架构是分不开的.那么nginx究竟是怎么样的呢? ...

  2. directive完成UI渲染后执行JS

    ui-view有相应的$viewContentLoaded http://blog.csdn.net/xinshangshangxin/article/details/44700813 ng-repe ...

  3. C# new和初始化

    虽然知道使用new可以创建对象,但一直不是很理解初始化和new等知识的具体. 通过8个问题和需求,了解相关知识. 了解问题和需求 1.new 的三个步骤 2.初始化是什么意思. 3.变量声明后和变量赋 ...

  4. Hibernate学习笔记一:项目创建与基本配置文件

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6760773.html  一:ORM ORM:对象-关系 映射. 即:把Java中有关联关系的对象,转换成关系型 ...

  5. java 日期工具类DateUtils

      日期工具类DateUtils CreateTime--2017年5月27日08:48:00Author:Marydon DateUtils.java-对日期类的进一步封装 import java. ...

  6. APache PDFbox API使用(1)----简单介绍

    因为项目的须要.近期在学习APache  PDFbox API,Apache PDFbox API是Apache Java 开源社区中个一个项目,其受Apache 版权 V2的保护,其提供了以下的功能 ...

  7. SpringBoot之配置google kaptcha

    项目中引入POM: <dependency> <groupId>com.google.code.kaptcha</groupId> <artifactId&g ...

  8. IM系统架构设计之浅见

    转自:http://mobile.51cto.com/hot-439693.htm 背景:除去大名鼎鼎的QQ这款即时聊天工具,还有许多细分行业的IM,比如淘宝阿里旺旺.网易泡泡.YY语音....... ...

  9. iscsi共享分区测试

    要求:在服务器端Server0上创建一个分区/dev/sdb1(无需格式化),配置成iscsi target设备,块设备名称为sun1,iqn名称为iqn.2018-01.com.ultrapower ...

  10. Ubuntu 安装asciidoc时默认推荐了巨大的安装包

    $ sudo apt-get install asciidocReading package lists... DoneBuilding dependency tree       Reading s ...