文章写了很久了,慢慢整理一下发出来。

目标

部署好mysql,php,nginx,运行一个php程序

安装Docker

看这个:https://yeasy.gitbooks.io/docker_practice/

创建资源文件夹

既然安装好了Docker,我们创建容器后,我们需要映射一些配置文件或网站程序文件到宿主机,所以我们创建一些文件夹来存放这些东西,我是创建了以下这些文件夹,你可以按照自己平时的习惯来创建。

    /data
/mysql 存放数据库备份
/nginx nginx配置文件
/conf
/logs
/apache2 apache2配置文件
/conf
/extra
/logs
/php

/wwwroot 网站文件
/wwwlogs 日志
/source 程序源代码
/download 下载目录

部署Mysql

1. 拉取镜像

  1. # docker pull mysql:5.7

2. 运行容器

     # docker run \
-d \
-p : \
-e MYSQL_ROOT_PASSWORD= \
--name m_mysql mysql:5.7

参数说明
-d 让容器在后台运行
-p 添加主机到容器的端口映射,前面是映射到本地的端口,后面是需要映射的端口
-e 设置环境变量,MYSQL_ROOT_PASSWORD这里是设置mysql的root用户的初始密码
--name 容器的名字,随便取,但是必须唯一

ps:其实我们可以仅仅使用docker run命令就行了。docker run会先去pull,然后再create。个人习惯先把镜像pull下来,在run的时候会很快。

3. 进入容器

  1. # docker exec -it m_mysql /bin/bash

参数说明
-t 在容器里生产一个伪终端
-i 对容器内的标准输入 (STDIN) 进行交互

容器中默认是没有vim的,所以我们首先要安装vim,需要注意的是安装前记得先执行apt-get update命令,不然安装会出现问题。

4. 开启Mysql远程连接

这步你当然也可以不开启,可以使用ssh通道来连接,但是我这里记一笔。这里是5.7,注意了。

1.进入mysql

  1. # mysql -uroot -p12345678910

2.选择数据库

  1. > use mysql

3.开启远程连接

  1. > GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
  2. > FLUSH PRIVILEGES;

4.重启

  1. # service mysqld restart

这样就可以通过公网IP连接了,如果还是不行,请看看防火墙(自身防火墙或者各大云服务商的安全组配置)。

部署PHP

1. 拉取镜像

  1. # docker pull bitnami/php-fpm:7.0

2. 运行容器

     # docker run \
-d \
-p : \
-v /data/wwwroot:/usr/share/nginx/html \
--link m_mysql:mysql \
--name m_phpfpm bitnami/php-fpm:7.0

参数说明
-d 让容器在后台运行
-p 添加主机到容器的端口映射
-v 添加目录映射
–-name 容器的名字,随便取,但是必须唯一
--link link 是在两个contain之间建立一种父子关系,父container中的web,可以得到子container db上的信息。
通过link的方式创建容器,我们可以使用被Link容器的别名进行访问,而不是通过IP,解除了对IP的依赖。

3. 创建php文件

在/data/wwwroot文件夹中创建一个文件夹default,代表一个默认的工作目录,在default中创建一个文件

  1. # touch index.php

编辑index.php

  1. <?php
  2. echo "hello!";
  3. ?>

这时候你进php容器,在/usr/share/nginx/html文件夹中也能看到我们创建的index.php文件,因为我们设置了目录映射。这样我们就可以直接在宿主机直接更改,而不用进容器修改。

配置Nginx

1. 拉取镜像

  1. # docker pull nginx

2. 运行容器

我们先运行无挂载的容器,拿到nginx的一些配置文件

    # docker run \
-d \
-p : \
--name m_nginx nginx:latest

成功后,我们进入容器/etc/nginx/文件夹中,我们需要的挂载nginx.confconf.d文件夹中的配置文件,因为是我们平时需要频繁更改的配置,所以,我们将他们复制到宿主机上。

退出命令行,不要使用exit,因为exit会让容器停止。这里使用ctrl + p + q来退出容器。

然后使用docker cp操作复制出文件

    # docker cp m_nginx:/etc/nginx/nginx.conf /data/nginx
# docker cp m_nginx:/etc/nginx/conf.d/default.conf /data/nginx/conf

3. 删除之前运行的Nginx容器

    # docker stop m_nginx
# docker rm m_nginx

4. 重新运行Nginx容器

    # docker run \
-d \
-p : \
-v /data/wwwroot:/usr/share/nginx/html \
-v /data/nginx/nginx.conf:/etc/nginx/nginx.conf:ro \
-v /data/nginx/conf:/etc/nginx/conf.d \
-v /data/wwwlogs:/var/log/nginx \
--link m_phpfpm:phpfpm \
--name m_nginx nginx:latest

参数说明:
-d 让容器在后台运行
-p 添加主机到容器的端口映射
-v 添加目录映射,这里最好nginx容器的根目录最好写成和php容器中根目录一样。但是不一点非要一模一样,如果不一样在配置nginx的时候需要注意
-–name 容器的名字
–-link 与另外一个容器建立起联系

5. 编辑配置文件

修改/data/nginx/conf/default.conf,我的配置如下:

    server {
listen ;
server_name _;
#charset koi8-r;
access_log /var/log/nginx/default_nginx.log main;
location / {
root /usr/share/nginx/html/default;
index index.html index.htm;
}
#error_page /.html;
# redirect server error pages to the static page /50x.html
#
error_page /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:
#
location ~ \.php$ {
root /usr/share/nginx/html/default;
fastcgi_pass phpfpm:;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}

配置文件中的fastcgi_pass phpfpm:9000;,因为我们在启动容器的时候--linkphpfpm容器,所以这里直接填phpfpm,就能找到phpfpm的IP,当然你也可以不配置--link,那么你可以这样找到容器IP,再将IP填入。

  1. docker inspect 容器名或ID | grep "IPAddress"

最后,我们来测试一下配置是否成功

安装phpMyAdmin

安装个phpMyAdmin,顺便测试一下MYSQL

1. 下载解压

下载地址:https://www.phpmyadmin.net/

解压到/data/wwwroot/default,并将文件夹重命名为phpMyAdmin

2. 配置phpMyAdmin

打开 libraries 目录下,找到config.sample.inc.php,改名为config.inc.php,用文本编辑器打开文件。

blowfish_secret中填入值,如:

  1. $cfg['blowfish_secret'] = 'sadsadsadasffdsadfsa'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */

host中填入数据库的访问IP,这里我填的Mysql容器的内网IP,你也可以填外网IP试试。

  1. $cfg['Servers'][$i]['host'] = '172.17.0.2';

保存退出

3. 访问

访问http://外网IP/phpMyAdmin/index.php

用数据库账号密码登录

 
 
 
 
修改软件的配置,可以通过docker exec -it xxx /bin/bash进入容器,然后修改配置,但是最好的还是进入容器后,通过docker cp命令将配置文件拷贝到宿主机,在宿主机修改配置文件后,再docker run 时通过-v选项把修改的配置文件所在目录挂载到容器的相应软件配置目录下。
 
 

Docker快速搭建PHP+Nginx+Mysql环境(https://notemi.cn/docker-quickly-set-up-php-nginx-mysql-environment.html)的更多相关文章

  1. docker快速搭建php7.2-nginx开发环境

    1.输入命令: docker search -s 100 php 搜索出下面图中列表,选择webdevops/php-nginx. 2.通过docker拉取webdevops/php-nginx镜像, ...

  2. Docker 快速搭建 MySQL8 开发环境

    使用 Docker 快速搭建一个 MySQL8 开发环境 步骤 获取镜像 docker pull mysql:8 启动容器,密码 123456,映射 3306 端口 docker run --name ...

  3. 一文教您如何通过 Docker 快速搭建各种测试环境(Mysql, Redis, Elasticsearch, MongoDB) | 建议收藏

    欢迎关注个人微信公众号: 小哈学Java, 文末分享阿里 P8 高级架构师吐血总结的 <Java 核心知识整理&面试.pdf>资源链接!! 个人网站: https://www.ex ...

  4. Docker 快速搭建 MySQL 5.6 开发环境

    使用 Docker 快速搭建一个 MySQL 5.6 开发环境 步骤 获取镜像 docker pull mysql:5.6 启动容器,密码 123456,映射 3306 端口 docker run - ...

  5. spring boot / cloud (十八) 使用docker快速搭建本地环境

    spring boot / cloud (十八) 使用docker快速搭建本地环境 在平时的开发中工作中,环境的搭建其实一直都是一个很麻烦的事情 特别是现在,系统越来越复杂,所需要连接的一些中间件也越 ...

  6. 五分钟用Docker快速搭建Go开发环境

    挺早以前在我写过一篇用 `Docker`搭建LNMP开发环境的文章:[用Docker搭建Laravel开发环境](http://mp.weixin.qq.com/s?__biz=MzUzNTY5MzU ...

  7. 使用Docker快速搭建ELK环境

    今天由于Win系统的笔记本没带回家,其次Docker在非Linux系统下都需要安装额外的软件去镜像才行 所以感觉没有差别,先直接用Mac搭建一遍呢, 本篇部分命令和配置内容为摘抄 Mac下使用Dock ...

  8. Docker-教你如何通过 Docker 快速搭建各种测试环境

    今天给大家分享的主题是,如何通过 Docker 快速搭建各种测试环境,本文列举的,也是作者在工作中经常用到的,其中包括 MySQL.Redis.Elasticsearch.MongoDB 安装步骤,通 ...

  9. 使用docker快速搭建hive环境

    记录一下使用docker快速搭建部署hive环境 目录 写在前面 步骤 安装docker 安装docker 安装docker-compose 配置docker国内镜像源(可选) 安装git & ...

  10. 快速搭建 Node.js 开发环境以及加速 npm

    如何快速搭建 node 开发环境 npm 超慢 github 无法打开的问题 于是我觉得应该写一篇文章解答所有这些起步问题,让新同学也能顺顺利利入门. 快速搭建 Node.js 开发环境 如果你想长期 ...

随机推荐

  1. nginx+tomcat集群

    参考: 简单:http://blog.csdn.net/wang379275614/article/details/47778201 详细:http://www.jb51.net/article/77 ...

  2. asp.net mvc 获取ajax的 request payload 参数

    注意事项: 传输的格式要设置城:"contentType": "application/x-www-form-urlencoded"

  3. 延迟载入Dll(动态载入Dll)

    windows核心编程(第五版)20.3节的延迟载入Dll 延迟载入Dll技术出现的原因: 因为DLL的加载是比较浪费时间的,特别是大型软件加载,因此,这项技术是在应对软件初始化过程中避免浪费太多的时 ...

  4. Java作业五

    1.编程生成10个1~100之间的随机数,并统计每个数出现的概率. 这个博文里面又random的详细解释:https://www.cnblogs.com/ningvsban/p/3590722.htm ...

  5. static关键字(修饰函数、局部变量、全局变量)

    在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条. (1)先来介绍它的第一条也是最重要的一条:隐藏. 当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有 ...

  6. L312 难看懂的

    There are few sadder sights than 8 pile of fan letters ,lovingly decorated with hand drawings,suffer ...

  7. python第二天 python介绍与变量

    编程语言的分类: 分别为 机器语言,汇编语言,高级语言 所以按照翻译方式又被分为两种 编译型:在代码执行时,需要先进行编译成二进制文件之后,才能够被执行 代表如:c语言,执行速度快,但是调试麻烦 解释 ...

  8. css3渐变 两边透明中间高亮

    颜色自己可以调节 如图: 采集器管理下面的那条线就是 css代码: .linear{            width:100%;            height:2px;            ...

  9. HDU 6124 17多校7 Euler theorem(简单思维题)

    Problem Description HazelFan is given two positive integers a,b, and he wants to calculate amodb. Bu ...

  10. JSON的学习,希望可以指导

    1.JSON的介绍 是一种轻量级的数据交换格式.简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言. 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率. 2.格式 JSON ...