沙滩星空的博客沙滩星空的博客

搭建基于Docker的LNMP环境

重点:

以下MySQL,PHP,Nginx三个容器创建时,格外注意:
1.创建顺序不可改变。mysql => php-fpm =>nginx
2.-v命令选项。即目录映射必须一致。
3.--link命令项。容器服务间的关联必须填写正确。
4.宿主机目录挂载到容器内,容器内被挂载的路径,如果有文件将被清空。故被挂载目录必须新建,或可读写。不可挂载到容器系统目录。


0.如果不用--link连接容器的话,请自定义一个网络。

docker network create cm_net

1.创建MySQL容器服务

docker pull mysql:5.7
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root --name cm_mysql57 mysql:5.7

或自定义网络alias别名mysql, 在其他容器内部,可通过别名访问本容器。

docker run -d -p 3306:3306 --network cm_net --network-alias mysql -e MYSQL_ROOT_PASSWORD=root --name cm_mysql57 mysql:5.7

-e 设置环境变量,这里是设置mysql的root用户的初始密码,这个必须设置
-d 让容器在后台运行
-p 添加主机到容器的端口映射


2.创建PHP-FPM容器

docker pull php:7.2-fpm
docker run -d -v /mnt/www:/mnt/www -p 9000:9000 --link cm_mysql57:mysql --name cm_phpfpm72 php:7.2-fpm 

或自定义网络alias别名phpfpm

docker run -d  --network cm_net --network-alias phpfpm -v /mnt/www:/mnt/www -p 9000:9000 --name cm_phpfpm72 php:7.2-fpm 

-v 添加目录映射,即主机上的/mnt/www/html和容器中/var/www/html目录是同步的
–name 容器的名字
–link 与另外一个容器建立起联系,这样我们就可以在当前容器中去使用另一个容器里的服务。
如果前面的mysql容器,定义alias网络别名:mysql,则不需要用-link参数。在php容器内,直接用mysql作为数据库地址。

进入PHP容器内部,在/mnt/www建立目录,发现与宿主机/mnt/www目录实现同步。

docker exec -it cm_phpfpm72 /bin/bash
touch /mnt/www/index.php

查看phpfpm容器中的默认PHP模块,如果没有pdo_mysql,我们需在容器内安装下。

php -m
docker-php-ext-install pdo_mysql

-t:在新容器内指定一个伪终端或终端。
-i:允许你对容器内的标准输入 (STDIN) 进行交互。

至此,PHP与MySQL容器的端口映射,目录挂载,已建立完毕。在PHP容器中,可访问MySQL容器服务。

$con = new PDO('mysql:host=mysql;dbname=your_database_name', 'root', 'root');

MySQL服务器地址不是localhost,也不是127.0.0.1,而是mysql


3.创建NGINX容器:

docker pull nginx
docker run  -d -p 80:80 --name cm_nginx -v /mnt/www:/mnt/www -v ~/vhost:/etc/nginx/conf.d --link cm_phpfpm72:phpfpm nginx

如果前面PHP容器,使用的是alias网络别名phpfpm,则nginx容器启动可省略--link参数。直接用别名phpfpm访问PHP
docker run -d -p 80:80 --name cm_nginx -v /mnt/www:/mnt/www -v ~/vhost:/etc/nginx/conf.d nginx
-v /mnt/www:/mnt/www 宿主机到容器的网站目录映射
-v ~/vhost:/etc/nginx/conf.d 宿主机~/vhost目录挂载到Nginx容器的虚拟主机配置目录。
/etc/nginx/conf.d为Nginx容器的虚拟主机配置文件目录,虚拟主机配置文件名为:*.conf。

可选参数:--privileged=true

因为宿主机~/vhost目录已挂载到nginx容器/etc/nginx/conf.d目录
故修改虚拟主机*.conf文件如下。 例:

vim ~/vhost/demo.yousite.com.conf

让Nginx容器正确使用php-fpm容器服务,应如下配置:

......
location ~ \.php$ {
    fastcgi_index  index.php;
    fastcgi_pass   phpfpm:9000;
#fastcgi_pass的值改成之前--link进来的容器,当然也可以直接用php容器的ip
fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
#如果NGINX容器的网站根目录和php容器挂载的不一样,这里$document_root会找不到php文件。
#所以各容器的目录挂载一定要一致!
    include        fastcgi_params;  
......                                                                                                                                                                                                                                                                                                             
}
......

精简版的NGINX镜像:

docker pull registry.cn-beijing.aliyuncs.com/liyang85/nginx_alpine:v1


Docker基础与多版本PHP环境搭建:http://www.cnblogs.com/LO-gin/p/6958720.html
基于Docker搭建LNMP环境 https://blog.csdn.net/xy752068432/article/details/75975065
未经允许不得转载:沙滩星空的博客 » 搭建基于Docker的LNMP环境

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址