安装docker
按照官网上面安装就可以了
拉取镜像文件
一开始我拉取的都是latest镜像,后面我把docker run 这些镜像写在shell脚本中,去执行,发现有些状态是退出,然后一直没有成功,后面我就单独拿出来docker run又成功了。
我shell脚本执行的时候如果后面没有带 TAG,就会一直起不来是退出状态,我也很诧异,百度也没能拯救我,所以后面我的都是带有版本的。
创建目录
mkdir -p /myDocker/firstDemo/nginx/html
mkdir -p /myDocker/firstDemo/nginx/log
mkdir -p /myDocker/firstDemo/nginx/conf.d
编写三个shell文件:
如果这几个shell脚本不能跑起来容器,那就直接将文件里面的内容拿出了跑吧。
- docker_nginx.sh
#!/usr/bin bash
docker run -p 80:80 --name nginx \
-v /myDocker/firstDemo/nginx/html:/usr/share/nginx/html \
-v /myDocker/firstDemo/nginx/log/:/var/log/nginx \
-v /myDocker/firstDemo/nginx/conf.d:/etc/nginx/conf.d \
--privileged=true \
-idt nginx:1.16
- docker_php.sh
#!/usr/bin bash
docker run -p 9000:9000 --name php \
-v /myDocker/firstDemo/nginx/html:/var/www/html/ \
--privileged=true \
-d php:7.2-fpm
- docker_mysql.sh
#!/usr/bin bash
docker run -p 3306:3306 --name mysql \
-e MYSQL_ROOT_PASSWORD=root \
-v /usr/lib/mysql:/usr/lib/mysql \
-d mysql:5.7
执行shell脚本
sh docker_nginx.sh
sh docker_php.sh
sh docker_mysql.sh
编写nginx配置文件
创建default.conf文件
vim /myDocker/firstDemo/nginx/conf.d/default.conf
nginx配置如下
server {
listen 80; #监听80端口,接收http请求
server_name mgk.com; #就是网站地址
root /usr/share/nginx/html; # 准备存放代码工程的路径
#路由到网站根目录www.example.com时候的处理
location / {
index index.php index index.html index.htm; #跳转到mgk.com/index.php
autoindex on;
}
#当请求网站下php文件的时候,反向代理到php-fpm
location ~ \.php$ {
fastcgi_pass 172.16.236.190:9000; #nginx fastcgi进程监听的IP地址和端口,docker中要写内网的ip,127.0.0.1不行
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;#这里要写/var/www/html,不然 php fastcgi解析不了目录
include fastcgi_params;
}
}
重启nginx
docker restart nginx
测试
在/myDocker/firstDemo/nginx/html
中编写测试代码
echo "<?php echo phpinfo(); ?>" > index.php
然后浏览访问出现php相关信息。
总结
- 出现的很多问题:
- 服务启不来然后直接docker run ...
- nginx解析不了PHP,不是权限的问题,是nginx配置问题,上面的配置文件作了说明
- 没有复杂的操作
- PHP的扩展
- MYSQL的使用测试
- 其他服务的配置redis、swoole等
补充说明:
出现了502错误,检查了半天的nginx配置,后来发现反向代理地址配置有问题:
proxy_pass http://127.0.0.1:8888;
因为nginx在docker中,所以不能使用127.0.0.1:8888来访问宿主机里的nodejs应用,docker内部实际上实现了一个虚拟网桥docker0,所以要通过宿主机内网地址(192.168.102.1)来访问.
补充php+mysql测试
创建文件
vim mysql.php
编辑内容
<?php
$link=mysqli_connect("172.16.236.190","root","root");
if(!$link) echo "FAILD!连接错误,用户名密码不对";
else echo "OK!可以连接";
?>
- 一开始会报错 mysql_connect()不可用,PHP7不支持,改用mysqli。
- mysqli_connect()不可用,没有开扩展。
- mysql连接的host写localhost报错,应该需要写内外ip
解决mysqli扩展:
1、先得进入容器:docker exec -it php_server /bin/bash
2、然后运行 docker-php , 按两下tab键会有提示
root@781322cc6de5:/var/www/html# docker-php-
docker-php-entrypoint docker-php-ext-configure docker-php-ext-enable docker-php-ext-install docker-php-source
3、执行docker-php-ext-install mysqli
4、重启php
5、访问成功
网友评论