Mac、Linux使用docker快速构建Nginx+PHP开发环境

一、前言

为什么要用docker构建,直接在主机上装一个nginx和一个php不就行了吗。

其实如果是单机应用,这样做自然可以。但是我们后面用到的基本都会做负载均衡,包括Nginx、PHP、MySQL、RabbitMQ、Consul、Keepalived、Haproxy等等。

甚至于说都不是在两个Nginx可能安装在不同的主机上,这样为了保证环境的一致,且高效快速安装,使用docker镜像无疑是最好的选择。

当然,我们也可以通过dockerfile构建镜像,或者通过docker-compose编排一组服务,不过这里我们为的就是速度,因此我们直接使用已经构建好的镜像。

 

二、准备工作

1、拉取Nginx镜像
docker pull haveyb/nginx
docker tag docker.io/haveyb/nginx nginx1.21
docker rmi docker.io/haveyb/nginx
2、拉取PHP镜像
docker pull haveyb/php
docker tag docker.io/haveyb/php php7.4
docker rmi docker.io/haveyb/php
3、创建网络,用于nginx容器和php容器的网络连接
docker network create --driver bridge haveyb

 

三、构建环境

1、创建Nginx容器
docker run -itd --name nginx1.21 -p 80:80 -p 5600:5600  nginx1.21

说明:这里本来是想将nginx的conf通过-v映射到Mac上的目录的,但是不论是用直接目录映射还是数据卷挂载都不行,其中有nginx的问题,也有Mac自身的问题,因为在Linux环境虽然不能直接通过目录映射,但是是可以通过数据卷挂载方式来映射的,但是Mac上这两种方式都不行,所以只能进入容器内部来修改了,这种无法进行目录映射的情况当前仅出现在nginx镜像上,当然也有方式解决,就是把Mac上映射目录和Nginx容器内的映射目录的用户名和用户组都改为一模一样,但我懒( ̄▽ ̄)~*

2、将Nginx容器加入我们创建的网络里
docker network connect haveyb nginx1.21
3、编写Nginx配置文件nginx.conf
docker exec -it nginx1.21 bash
cd /etc/nginx
vi nginx.conf

worker_processes  1;
error_log  logs/error.log  error;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;

    server {
        listen       80;
        server_name  localhost;
        error_page   500 502 503 504  /50x.html;

        location = /50x.html {
            root   html;
        }

        location ~ /\.ht {
            deny  all;
        }
    }
    include /etc/nginx/conf.d/*.conf;
}
4、创建conf.d目录及测试站点配置文件
docker exec -it nginx1.21 bash
mkdir -p /etc/nginx/conf.d
cd /etc/nginx/conf.d
vi test.conf

server {
    listen       80;
    server_name  test.cn;

    client_max_body_size 128M;

    error_log logs/error.log warn;

    charset utf-8;

    root   /data;
    index  index.html index.htm index.php;

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~ ^/assets/.*\.php$ {
        deny all;
    }

    location ~ \.php$ {
        fastcgi_pass   php7.4:9000;
        fastcgi_index  index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

    location ~ /\.ht {
        deny  all;
    }

}
5、创建PHP容器
docker run -itd --name php7.4 -p 9000:9000 -v /Users/SH-Server:/data php7.4

这里,我设置了/Users/SH-Server目录为PHP项目目录,该目录下有很多项目,每个项目对应Nginx容器内/etc/nginx/con.d目录下的一个conf文件

6、将PHP容器加入我们创建的网络
docker network connect haveyb php7.4
7、创建测试文件index.php
cd /Users/SH-Server
vi index.php
<?php
phpinfo();

wq保存成功后,通过exit命令退出容器,返回宿主机

8、重启Nginx容器
docker restart nginx1.21
9、编辑电脑hosts
sudo vi hosts

# 添加下面一行记录
127.0.0.1     test.cn
10、查看结果

在电脑访问 test.cn