Docker网络类

00 前言

今天任务:

  1. 提高安全性,使用容器网络连接不同容器
  2. 连接使用固定ip,以防容器重启后地址改变
  3. 研究容器网络链接如何实现

01 实现方式 : Docker容器访问与互联 (端口映射)

过时资料 推荐参考链接

–name –hostname参数

首先设置各个容器的名称,使用–name参数

-p 和 -P 的区别就是一个指定端口,一个随机端口

删除所有容器(不兼容fish): docker rm $(docker ps -a -q)

列出所有容器的IP地址:

1
docker inspect --format='{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)

02 容器间通信 (容器互联)

已不支持–link参数

~ –link :alias ~

~ 参考连接 ~


继续更新,两班倒的生活真是要人命


03 进阶结果 (hostname直接访问)

居然找的是过时的4年前的资料。。。

一口老血吐出来,经过大佬指点,直接使用hostname访问即可

--name--hostname有什么区别?

name只是容器名字,用来容器操作

hostname为容器主机名字,可以用来网络查找,类似于域名,但却缺少DNS过程,详细DNS过程以后再详细研究(应该涉及到跨主机容器通信)

这里有个疑问点:使用hostname访问需不需要创建网络?

不行,指定IP的话就必须要创建一个网络

必须指定网络

不指定IP的话,–add-host参数又好像不太可用
所以还是创建一个网络最保险

04 网络设置

创建网络 docker network create -d bridge my-bridge-network

删除网络 docker network rm my-bridge-network

设置子网 docker network create --subnet=172.18.0.0/16 mynetwork

1
2
3
4
5
6
7
8
docker network所有子命令如下:

docker network create
docker network connect
docker network ls
docker network rm
docker network disconnect
docker network inspect

创建网络参考链接1
创建网络参考链接2_推荐链接

05 –expose参数

EXPOSE 仅仅是声明容器打算使用什么端口而已,并不会自动在宿主进行端口映射
只是一个声明,在运行时并不会因为这个声明应用就会开启这个端口的服务

用法 : --expose 3389

expose优秀参考链接

06 最后结果

最后结果为:

  1. 创建一个网络,分配子网 docker network create --subnet=172.18.0.0/16 mynetwork
  2. 创建容器时,使用--ip指定IP
  3. 使用expose避免暴露端口到主机
  4. 添加namehostname
  5. 使用--add-host把容器加进host表 --add-host NAME:IP

最后结果命令为:

1
2
3
docker network create --subnet=172.18.0.0/16 GitHub_NetWork     # 创建网络
docker run -itd --expose 27017 --name mongo_name --hostname mongo --network test_network --ip 172.18.0.2 --add-host hawkeye:172.18.0.3 -v $PWD/db:/data/db mongo # 创建容器
docker run -tid -p 8004:80 --name hawkeye_name --hostname hawkeye --network test_network --ip 172.18.0.3 --add-host mongo:172.18.0.2 -e MONGODB_URI=mongodb://mongo:27017 daocloud.io/0xbug/hawkeye # 创建容器2

-------------本文结束  感谢您的阅读-------------