docker 搭建多容器LNMP平台遇到的坑

1. 采用什么样的镜像很重要。必须是php:7.3-fpm,采用默认的latest镜像是不行的,所以

$ docker pull php:7.3-fpm  #现在有了7.4-fpm

$ docker pull nginx

$ docker pull mariadb

2. 搭建独立的lnmp网络环境 

$ docker network create --driver bridge --subnet 172.168.1.0/24 --gateway 172.168.1.1 lnmp-net  #网络名称为lnmp-net

3.建立lnmp的根目录,并创建应有的目录体系

$ mkdir /lnmp  

 其他的目录结构:

/lnmp/data/mariadb  #用于存储mariadb数据库的数据 

/lnmp/php                 #用于存放php的配置文档 

 /lnmp/nginx/html    #用于存放网页源码,phpMyAdmin,wordpress 等

/lnmp/conf.d           #用于存放nginx的配置文档,也就是 default.conf  

4.构建各个容器

构建mariadb数据库容器:

$ docker run -itd  --name mysql -h mysql -p 3306:3306 --network=lnmp-net --ip 172.168.1.201 -v /lnmp/data/mariadb:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456789 mariadb

构建php-fpm容器:

$  docker run -itd --name myphp -h myphp -p 9000:9000 --network=lnmp-net --ip 172.168.1.202 -v /lnmp/nginx/html:/usr/share/nginx/html  --privileged=true  php:7.3-fpm

也可以使用php镜像自身的路径,也就是:

 

$ docker run -itd --name myphp -h myphp -p 9000:9000 --network=lnmp-net --ip 172.168.1.202 -v /lnmp/nginx/html:/var/www/html  --privileged=true  php:7.3-fpm

构建nginx:

$ docker run -itd --name mynginx -h mynginx -p 80:80  --network=lnmp-net --ip 172.168.1.203 -v /lnmp/nginx/html:/usr/share/nginx/html  --link myphp  nginx

5. 对nginx配置文件进行编辑,主要是将default.conf 中的下列段落进行修改。增加解析类型,指定php文件的目录:

location / {
        root   /usr/share/nginx/html;
        index  index.html index.php index.htm;   #较默认内容增加了 index.php
        client_max_body_size 64m;    
   }



location ~ \.php$ {
    #    root           html;
        fastcgi_pass   172.168.1.202:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /usr/share/nginx/html$fastcgi_script_name;   #这一行也比较关键,这个路径是php容器内的路径。如果上一步构建php容器使用的是 /var/www/html/ 则用就是 /var/www/html
        include        fastcgi_params;
        client_max_body_size 64m;
    }

若容器内没有vi、vim等编辑工具,可以使用 docker cp 命令向容器内进行配置文件的更新,例如本例中

# docker cp /home/nginx/conf.d/default.conf  mynginx:/etc/nginx/conf.d/default.conf     这是将编辑好的defaul.conf文件进行覆盖

6.在/lnmp/nginx/html中新建info.php,并增加内容

$ vi info.php

内容:  

7.重启相关容器

$ docker restart myphp mynginx 

8.用浏览器查看nginx欢迎页和php信息:

http://host-ip/index.html

http://host-ip/info.php

9. 下载并解压phpMyAdmin到 /lnmp/nginx/html中,通过浏览器进入

http://host-ip/phpMyAdmin/

出现错误:

docker 搭建多容器LNMP平台遇到的坑_第1张图片

很明显,要在myphp容器中添加mysqli扩展

10.为php容器添加扩展组件

$ docker exec -it myphp /bin/bash          #进入myphp容器

$ cd /usr/local/bin                                  #进入安装命令和组件所在目录

$ ./docker-php-ext-install pdo_mysql     #安装扩展pdo_mysql

$ ./docker-php-ext-install mysqli             #安装扩展 mysqli

$ exit                                                      #退出myphp容器

$ docker myphp restart                          #重启容器,使扩展组件生效

11.再次尝试   http://host-ip/phpMyAdmin/

docker 搭建多容器LNMP平台遇到的坑_第2张图片

然后发现还是无法进入,出现 “  mysqli_real_connect(): (HY000/2002): No such file or directory   ”的 错误提示,还是需要修改

具体方法为:

将phpmyadmin\libraries\config.default.php,修改条目为: $cfg['Servers'][$i]['host']='172.168.1.201';

将phpmyadmin\config.sample.inc.php重命名为config.inc.php,修改条目为:  $cfg['Servers'][$i]['host'] = '172.168.1.201';
 

然后重新登录。 

这里我们在构建mariadb数据库时,指定了root账户的密码为 123456789

登录成功后界面右侧会显示下图信息

docker 搭建多容器LNMP平台遇到的坑_第3张图片

 

好了,至此我们用3个独立的docker 容器组成了LNMP开发环境。

 

其他

A。从容器内复制文件和把外部编辑好的文件复制进容器

1. 从容器复制到host

$ docker cp myphp:/usr/local/etc/php/php.ini-production /home/lnmp/php/php.ini

2.从host复制到容器

$ docker cp /home/lnmp/php/php.ini myphp:/usr/local/etc/php/php.ini

从php7开始,php.ini 没有直接给出,而是给了 php.ini-production  php.ini-development 这两个预置文件,将其cp一份命名为php.ini 即可。

B。对配置内容进行部分更新,也就是upload

新建并编辑 uploads.ini文件,内容为

file_uploads = On
memory_limit = 128M
upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 600

用上面的复制命令,将其添加到myphp 容器的   /usr/local/etc/php/conf.d/ 目录下

$ docker cp  /home/lnmp/php/uploads.ini  myphp:/usr/local/etc/php/conf.d/  

 

重启 myphp容器

$ docker restart myphp

 

开机启动参数的补加:

docker update --restart=always  容器名

docker update --restart=no         容器名

 

你可能感兴趣的:(CoreOS容器Linux相关,CentOS7服务器相关)