端口映射

当使用 -P 标记时,随机映射一个宿主机的端口到内部容器开放的网络端口。
当使用 -p 标记时,需要指定一个宿主服务器端口到内部容器中需要映射的端口。
eg:
-p 8010:8080
-p 51001-51010:51001-51010

网络类型

none

挂在这个网络下的容器除了 lo,没有其他任何网卡。容器创建时,可以通过 —network=none 指定使用 none 网络。

  1. docker run -it --rm --network=none busybox

host

连接到 host 网络的容器共享 Docker host 的网络栈,容器的网络配置与 host 完全一样。使用 host 网络,容器和宿主机共用 host 网络,当启动服务时应该避免端口冲突。可以通过 —network=host 指定使用 host 网络。

  1. docker run -it --network=host alpine /bin/sh

Bridge

Docker Daemon启动后默认创建 docker0 网桥,起初 docker0 启动时网桥上没有任何端口,

自定义网络

创建网络

  1. # 不指定网络驱动时默认创建的bridge网络
  2. docker network create my-bridge
  1. docker network create -d bridge my-bridge
  1. docker network create -d bridge --subnet 172.10.0.0/24 --gateway 172.10.0.1 my-bridge

-d bridge表示自定义网络的驱动为bridge
—subnet 172.10.0.0/24
—gateway 172.10.0.1分别指定网段和网关

查看所有网络

  1. docker network ls
  2. WARNING: Error loading config file: /Users/dh/.docker/config.json: EOF
  3. NETWORK ID NAME DRIVER SCOPE
  4. 3372b4e0587f bridge bridge local
  5. 6aa487329049 host host local
  6. 1e2f55fcb30b my-bridge bridge local
  7. 74293d532b75 none null local
  8. 3df7fcb2e8c5 yjctshare_default bridge local

查看内部信息

  1. $ docker network inspect my-bridge
  2. [
  3. {
  4. "Name": "my-bridge",
  5. "Id": "1e2f55fcb30bbe75b8d3c46e684e1d4dd76242ebea39487d9ff7477818ee1f95",
  6. "Created": "2021-09-16T17:34:40.6187891Z",
  7. "Scope": "local",
  8. "Driver": "bridge",
  9. "EnableIPv6": false,
  10. "IPAM": {
  11. "Driver": "default",
  12. "Options": {},
  13. "Config": [
  14. {
  15. "Subnet": "172.18.0.0/16",
  16. "Gateway": "172.18.0.1"
  17. }
  18. ]
  19. },
  20. "Internal": false,
  21. "Attachable": false,
  22. "Ingress": false,
  23. "ConfigFrom": {
  24. "Network": ""
  25. },
  26. "ConfigOnly": false,
  27. "Containers": {},
  28. "Options": {},
  29. "Labels": {}
  30. }
  31. ]

删除网络

  1. 移除指定的网络
  2. docker network rm my-bridge

连接和断开容器到自定义网桥

1.对于正要启动的新容器

  1. docker create --network my-bridge *** --name my-container my-image:latest
  2. docker run --network my-bridge *** --name my-container my-image:latest
  3. docker run = docker create + docker start .

2.对于正在运行的容器,如下命令

  1. docker network connect my-bridge my-container
  1. docker network disconnect my-bridge my-container

互连

不在一个网桥内,两个容器的互连
--link <容器名>

  1. docker run --name container1 -p8080:8080 -d --link container2 images:latest
  1. docker run -itd -v /root/***/product/:/app/product/ -e TZ="Asia/Shanghai" -p 51004:8955 -h eventgraph --link tcjy-tag --link tcjy-subject --link tcjy-event --name eg-containe eg-image:20211020

eg-containe是总服务出口,tcjy-tag,tcjy-event,tcjy-subject 是子服务。中就可以直接使用 tcjy-event(容器名)作为ip访问了

  1. url_extra = "http://tcjy-event:8080/***/predict"
  2. url_judge = "http://tcjy-event:8080/***/secondpredict"
  3. url_subject = "http://tcjy-subject:8080/***/subject"
  4. url_tag = "http://tcjy-tag:8080/***/tag"

--link <name>:<alias> 设置别名,mysqlDB是mysql的别名

  1. $docker run --name mysql-go --link mysql:mysqlDB baxiang/mysql-go

tips:

查看端口占用

  1. netstat -lnp|grep :80