Docker 的 Network(一)

Docker 的 Network(一)

Docker的网络设定这一部份,在我们使用Docker 时也常会被用到,因为我们启动了一个long time service 的Docker container之后,如果希望能被其它的Host 连到这个service 就要设定网路这一个部份,如下图:

Docker 的 Network(一)

例如Host1 的实体主机需要连线到Host2 的实体主机里面的Container1,如果在没有设定网路情况下Host1 连不到Host2,因为Container1 是被保护在Host2 实体机器里,如果要让Host1 连到Host2 上,最简单的方法是先让Host2 的Port 对应到Container1 的Port,然后Host1 会先连到Host2 实体主机的Port,然后就会对应到Container1 的Port,这样Host1 就可以连到Host2 上的Container1,这是最常使用的方法。

还有一种做法是直接让Container 桥接到实体主机网卡的方式,让Container 能得到一组能让其它Host 连到的IP,这样就可以直接被其它的Host 连接到,但这种做法会让Container 暴露在外,这时侯有必要考虑到安全性上的问题。

另外还有一种需求是 Container1 需要直接连到 Container2,如下图

Docker 的 Network(一)

就是在相同的 Host 的情况下,如果要让 Container1 的 Web Server,能连到 Container2 的 db server,可以使用 docker run 的 --link 参数。

今天要实作的部份如下:

在启动 Container 的时侯设定实体主机 Host 的 Port 对应到 Container 里面的 Port

实作让 Container2 可以直接的连到 Container1

Example1:

测试在使用 docker run 指令时参数指定为大写的 -P,这样实体主机会随机的产生一个 Port 对应到 Container 里面的 Port,但在这之前需要修改一下 Dockerfile,实作的步骤如下:

1. Dockerfile 如下

Docker 的 Network(一)

EXPOSE 就是宣告有 8080 Port,在执行 Docker Container时需要把它开放出去

2. Build Docker Image 指令如下

Docker 的 Network(一)

3. Build 完 Image 之后,使用以下的指令启动 Docker Container 指令如下

Docker 的 Network(一)

4. 我们可以使用 docker ps 指令或是 docker port 指令得到对应实体主机随机产生出来的 Port,指令和画面如下

Docker 的 Network(一)

2fec91391edb 为 ContainerID。

5. 上个步骤可以得出实体主机对应的 Port 为 32770,因此我们可以用实体主机的IP 和 32770 Port,连到 Tomcat 的 Web 画面,画面如下

Docker 的 Network(一)

Example2:

使用 Example1 的 Docker Image,在执行 docker run 时,指定小写的-p参数,指令如下:

Docker 的 Network(一)

左边的 8080 Port 代表指定实体主机的 Port,对应到右边 Container 里面的 8080 Port,画面如下:

Docker 的 Network(一)

Example3:

启动 container1 的 Docker Container,然后再启动 container2 并且 link 到 container1,最后测试看看直接在 container2 上是否 ping 得到 container1,步骤如下:

1. 启动 container1 指令如下

Docker 的 Network(一)

2. 开启另外一个视窗,启动 container2 指令如下

Docker 的 Network(一)

3. 测试 container2 是否 ping 得到 container1,画面如下

Docker 的 Network(一)

上面的画面可以看到 container2 可以 ping 到 container1,并且也会把 container1 的 IP 和 container name 加入到 container2 的 /etc/hosts 档案里。

本文介绍了有关于Docker 在执行docker run 时要如何指定对应的port 和如何在Dockerfile 里面写Expose 指令,以及也说明如何使用在同一台实体主机上的Container 之间要如何的连结起来。希望各位看官能有所收获。


分享到:


相關文章: