Docker容器中nginx的端口映射

例子1. 一个运行nginx的Docker容器

一台机器下,一个Docker容器运行nginx,并将容器中nginx的端口映射到主机的80端口的命令,如下,

$ docker run -it -p 80:80 nginx

测试a: 宿主机192.168.0.108访问192.168.0.108:80,如下,

$ curl 192.168.0.108:80
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
...

测试b: 其他机器192.168.0.109访问192.168.0.108:80,如下,

$ curl 192.168.0.108:80
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
...

例子2. 两个运行nginx的Docker容器

两台机器下,两个Docker容器运行nginx,并分别将容器中nginx的端口映射到其主机的80端口的命令,如下,

// 主机192.168.0.108
$ docker run -it -p 80:80 nginx

// 主机192.168.0.109
$ docker run -it -p 80:80 nginx

测试a: 主机192.168.0.109的运行nginx的Docker容器,访问主机192.168.0.108的80端口。其中,主机192.168.0.108的80端口是由其nginx的Docker容器映射而成的。

// 主机192.168.0.109
$ docker ps
CONTAINER ID        IMAGE                  COMMAND                  CREATED             STATUS              PORTS                NAMES
af94cb2ea807        nginx                  "/docker-entrypoint.…"   4 minutes ago       Up 4 minutes        0.0.0.0:80->80/tcp   strange_murdock
$ docker exec -it af94cb2ea807 /bin/bash
root@af94cb2ea807:/# curl 192.168.0.108:80
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
...

总结

Docker,可以采用容器和其宿主机之间的端口映射的方法,达到跨主机的容器之间的通信目的。但这种方法本质上还是映射到宿主机的端口进行宿主机之间通信的方法,是一种虚拟IP之间间接通信的方法。

如果要达到虚拟IP之间直接通信的目的,技术上可行的方案是overlay network,产品比如Docker Swarm,Kubernetes Flannel等。

你可能感兴趣的:(分布式集群)