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/
出现错误:
很明显,要在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/
然后发现还是无法进入,出现 “ 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
登录成功后界面右侧会显示下图信息
好了,至此我们用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 容器名