欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

详解docker容器间通信的一种方法

程序员文章站 2022-06-14 12:48:57
以我的ghost博客为例进行说明,我在vps上用docker启动了两个ghost博客,还有一个nginx做反向代理,将两个域名分别指向两个博客。 docker启动命令...

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

docker启动命令

ghost:

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:

复制代码 代码如下:

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段内添加如下内容

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参数添加进来的。

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

补充

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。