网络环境准备
docker network create --subnet 172.18.0.0/16 my-net
redis 安装
docker run -d --name redis -p 6379:6379 redis --requirepass "123"
nginx安装
docker run --name web-nginx -p 80:80 -v /usr/local/var/www:/usr/share/nginx/html -d nginx
这里,因为设置了本地80端口映射,先确定本地是否80端口被占用则kill掉
lsof -i:80
kill -9 pid
因为是mac环境,需要提前配置路径权限:
php7.2安装
docker run -d --name php-fpm -p 9000:9000 -v /usr/local/var/www:/usr/share/nginx/html php:7.2-fpm
php扩展安装
pdo_mysql扩展
扩展目录,为:/usr/src/php/ext/,因为容器自带pdo_mysql,可以直接安装
docker-php-ext-install pdo pdo_mysql
redis扩展
curl -L -o ~/redis.tar.gz https://codeload.github.com/phpredis/phpredis/tar.gz/5.3.0
tar xfz redis.tar.gz
mv phpredis-5.3.0 /usr/src/php/ext/redis (如果没有路径/usr/src/php/ext/,mkdir -p创建)
docker-php-ext-install redis
xdebug扩展
curl -L -o ~/xdebug-3.0.3.tgz https://xdebug.org/files/xdebug-3.0.3.tgz
tar xfz xdebug-3.0.3.tgz
mv xdebug-3.0.3 /usr/src/php/ext/xdebug
docker-php-ext-install xdebug
重启php容器
docker restart php-fpm
查看nginxphp容器是否正确运行
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0d642340b24a php:7.2-fpm "docker-php-entrypoi…" 9 minutes ago Up 9 minutes 0.0.0.0:9000->9000/tcp php-fpm
06c88a111a61 nginx "/docker-entrypoint.…" 4 hours ago Up 3 hours 0.0.0.0:80->80/tcp web-nginx
配置nginx,启用php
# 进入容器
docker exec -it php-fpm bash
# 查看配置文件
whereis nginx
nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
# vim编辑文件(如果没有则先下载安装vim)
cd /etc/nginx/conf.d
cp default.conf default.conf.bak
vim default.conf
# 修改内容
location ~ .php$ {
root html;
fastcgi_pass 172.18.0.3:9000; # 也可以通过别名指定php-alias
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name;
include fastcgi_params;
}
# 172.18.0.3为php容器在bridge网络下的ip,通过命令查看:
docker inspect php-fpm | grep -i 'IPAddress'
# 停止php容器等,指定IP地址
docker network connect --ip 172.18.0.2 --alisa nginx-alias my-net web-nginx
docker network connect --ip 172.18.0.3 --alisa php-alias my-net php-fpm
docker network connect --ip 172.18.0.4 --alisa redis-alias my-net redis
测试是否生效
vim /usr/local/var/www/phpinfo.php
<?php
echo phpinfo();
?>
浏览器访问:localhost/phpinfo.php , 看到正确信息则说明生效了
其他补充内容
如果创建时未指定 --restart=always ,可通过 update 命令更改
docker update --restart=always 容器ID