IOTXING

记录技术学习之路

0%

一台机器部署多个docker

部署多个docker有两种方式,一种是让容器映射端口到宿主机,然后可以直接从外部访问到该端口,一种是利用nginx做转发,容器端口不对外暴露。

端口映射方式

WX20180305-105350@2x 这种是容器在建立的时候,使用-p参数来将容器的端口绑定到宿主机的端口上面,直接输入宿主机ip+端口可以直接访问服务。如果觉得麻烦,也可以使用nginx来做转发,根据不同的域名来转发到不同的端口上面。下面是nginx文件

server {
        listen       80 ;
        server_name  www.iotxing.com;


        location / {
        proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://127.0.0.1:8000;
        }


    }

所有访问www.iotxing.com的请求都会被转发到http://127.0.0.1:8000上面,然后由占用8000端口的docker容器里面的nginx进行处理。 这种方式存在的一个劣势是访问的地址都会带一个8000的端口号,类似于www.iotxing.com:8000/postxx这种,会显得很难看

ip转发

docker有一套自己的网络管理,每个docker容器都会有一个docker虚拟出来的网卡,然后会被分配一个内部ip,这个内部网络里面只有宿主机和容器之间才能访问,外界是无法访问到的。 由于宿主机可以根据这个ip访问到容器,自然也可以将服务转发到该ip上面,而且还是80端口,不用另开端口 WX20180305-105358@2x 这样就能够解决使用端口转发所带来的端口后缀的问题,下面是我的nginx配置文件

server {
        listen       80 ;
        server_name  www.iotxing.com;


        location / {
        proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://xx.xx.xx.2;
        }


    }
    server{
    listen 80;
    server_name xx.xx;
    location /{
        proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_pass http://xx.xx.xx.4;

跟上面的区别就是proxy_pass里面的内容