本节概述docker中与网络相关的一些操作,如docker与主机之间的网络互通,docker之间的网络互相访问等……

参考网址: https://docs.docker.com/network/

外部访问网络

容器中可以运行一些网络应用,要让外部也可以访问这些网络应用,可以使用-P或者-p参数来指定端口映射。

当使用-P标记时,Docker会随机主机的一个49000~49900端口到容器的内部端口。
使用docker container ps可以查看到。

docker run -d -P --name ngxin-net nginx

创建容器nginx-net并后台启动。

[vagrant@ymu ~]$ sudo docker run -d -P --name ngxin-net nginx
cfb84ca5f6837d14ea5f9c4d670ca4f9b126fbbe3e0d78f9cbaa949772f892be
[vagrant@ymu ~]$ sudo docker container ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                   NAMES
cfb84ca5f683        nginx               "nginx -g 'daemon of…"   14 seconds ago      Up 13 seconds       0.0.0.0:32768->80/tcp   ngxin-net
d120d176e25c        nginx               "nginx -g 'daemon of…"   13 days ago         Up 3 minutes        0.0.0.0:80->80/tcp      nginx

可以看到容器ngxin-net的端口映射信息,把主机32768端口映射到了容器的80端口。这样,在主机就可以访问:localhost:32768

同样,可以查看应用访问日志:

[vagrant@ymu ~]$ sudo docker logs -f ngxin-net

另外,小写-p可以明确指定主机和容器之间的端口映射。 并且,在一个指定端口上只可以绑定一个容器。
支持的格式:

  • ip:hostPort:containerPort
  • ip::containerPort
  • hostPort:containerPort

前面一个为主机端口,后面一个为容器端口。

常用:

-p 80:80

将本地主机80端口映射到容器80端口。

容器互联

容器与容器之间的端口互通。 互相访问容器信息。

使用--link参数可以让容器之间安全的进行交互。

下面创建一个新的redis数据库容器:

docker run --name redis-test -d  redis

然后创建一个web容器:

docker run -d -p 80:80 --name nginx-web --link redis-test nginx 

此时,redis-test容器和nginx-web容器建立了互联关系。

--link 参数格式 --link name:alias,其中name是容器名称,alias是这个连接的别名。

可以通过docker ps查看连接信息。
这样,nginx-web容器将可以访问redis-test容器中的信息。

Docker在两个容器之间建立起了一个安全隧道,而且不用映射它们的端口到宿主主机上。启动redis-test的时候,采用大写-P,从而避免了暴露数据库端口到外部网络上。

Docker的4种网络模式

https://developer.aliyun.com/article/653905?spm=a2c6h.13813017.0.dArticle738638.25e44811JPmdCV