docker容器间通讯的一种方法

转载请注明出处,原文连接http://tailnode.tk/2017/01/do...node

以个人ghost博客为例进行说明,我在VPS上用docker启动了两个ghost博客,还有一个Nginx作反向代理,将两个域名分别指向两个博客。nginx

docker启动命令

ghost:docker

docker run -e NODE_ENV=production --name ghost1 -v /path/to/data/ghost/ghost1/:/var/lib/ghost -d ghost
docker run -e NODE_ENV=production --name ghost2 -v /path/to/data/ghost/ghost2/:/var/lib/ghost -d ghost

nginx:dom

docker run -p 80:80 --name nginx --link ghost1 --link ghost2 -v /path/to/data/nginx/nginx.conf:/etc/nginx/nginx.conf -d nginx

先启动两个ghost,而后启动nginx。使用--link参数将容器“连接”到一块儿,此参数会在容器中加入环境变量并在/etc/hosts中插入一条容器名与IP的映射代理

root@fabfd4bacfda:/# cat /etc/hosts
172.17.0.3      ghost1 d19c0134011a
172.17.0.5      ghost2 0e2e66ba70e0
172.17.0.4      fabfd4bacfda

设置nginx反向代理

修改nginx.conf,在http段内添加以下内容code

http {
    server {
        listen 80;
        server_name www.domain1.tk domain1.tk;

        location / {
            proxy_pass http://ghost1:2368;
            proxy_redirect     off;
            proxy_set_header   Host             $host;
            proxy_set_header   X-Real-IP        $remote_addr;
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        }
    }
    server {
        listen 80;
        server_name www.domain2.tk domain2.tk;

        location / {
            proxy_pass http://ghost2:2368;
            proxy_redirect     off;
            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的值proxy_pass http://ghost2:2368;。 ghost2是nginx容器/etc/hosts中的一条,是由--link参数添加进来的。server

设置完这些后,nginx就会将两个域名的请求分别代理到两个博客中。rem

补充

容器重启后IP可能变化,因此直接在nginx.conf中指定IP并非一个好方法。使用--link时hosts文件会随着容器IP的变化更新,因此使用域名才是更容易维护的方法。get

相关文章
相关标签/搜索