摘要
- Docker已经成为现代应用程序开发和部署的瑞士军刀,但是在容器网络连接方面还有很多人不甚了解。本博客将为你揭开Docker网络连接的神秘面纱,让你的容器在网络中互联互通,如虎添翼!从基本概念到高级操作,让我们探索Docker网络的世界,带你轻松玩转容器通信,助你成为容器网络的大师!
一 容器网络基础命令
- 当涉及容器网络时,
Docker
提供多种网络选项,控制容器与主机以及其他容器之间的通信方式。
-
Docker网络类型:
bridge
网络:Docker
默认创建的网络,适用于单个主机上的容器通信。每个容器都被分配一个IP
地址,并且可以使用容器名或IP地址进行通信。host
网络:容器直接使用主机网络,共享主机的网络命名空间。容器与主机共享相同的IP
地址和端口。overlay
网络:用于跨多个主机连接容器。适用于Swarm
模式,允许容器在不同主机之间进行通信,使得容器在多主机环境中可以像在单个主机上一样运行。macvlan
网络:允许将容器绑定到物理网络接口的MAC
地址,使得容器拥有和物理设备相同的MAC
地址,适用于一些特殊网络配置需求。
-
查看网络列表:
docker network ls
-
创建自定义网络:
docker network create <network_name>
-
创建容器时指定网络:
docker run -d --name <container_name> --network <network_name> <image_name>
-
连接容器到网络:
docker network connect <network_name> <container_name>
-
从网络断开容器:
docker network disconnect <network_name> <container_name>
-
查看容器的网络信息:
docker inspect <container_name> --format='{ {.NetworkSettings.Networks}}'
-
端口映射:
- 使用
-p
参数将容器内部的端口映射到主机上的端口。例如,将容器内部的端口 8080 映射到主机的端口 80:
docker run -d -p 80:8080 --name <container_name> <image_name>
- 使用
-
连接到容器的Shell:
docker exec -it <container_name> /bin/bash
-
删除网络:
docker network rm <network_name>
二 实际案例
2.1 查看容器所在的网络
要检查两个容器是否在同一个网络中,您可以使用以下命令:
- 获取容器的网络名称或ID。运行以下命令:
docker inspect <容器ID或名称> --format='{ {.NetworkSettings.Networks}}'
- 比较两个容器的网络信息,如果它们具有相同的网络名称或ID,则表示它们在同一个网络中。
- 演示结果:
root@armbian:/usr/local/aurora-springboot# docker inspect services --format='{ {.NetworkSettings.Networks}}' map[docker_default:0x4000530180] root@armbian:/usr/local/aurora-springboot# docker inspect aurora-springboot-0.0.1.jar --format='{ {.NetworkSettings.Networks}}' map[bridge:0x40005dc9c0]
- 第一个容器 services 在网络
docker_default
中,而第二个容器aurora-springboot-0.0.1.jar
在网络bridge
中,两者并不在一个网络中。
- 第一个容器 services 在网络
2.2 容器加入网络
- 如果想让这两个容器在同一个网络中进行通信,可以考虑将它们连接到同一个网络。您可以使用
docker network connect
命令将容器连接到指定的网络。例如,可以运行以下命令将第二个容器连接到docker_default
网络:
docker network connect docker_default aurora-springboot-0.0.1.jar
2.3 网络配置的持久性
- 如果重新启动存放项目的容器,网络连接还有效吗?
- 当重新启动容器时,网络连接将保持有效。**与容器关联的网络配置是持久的,因此重新启动容器后,它将重新连接到先前连接的网络。只有在删除容器时,它才会断开与网络的连接。**因此,如果重新启动存放项目的容器,网络连接将保持不变,容器将保持在相同的网络中,并且可以与其他容器进行通信。
2.4 容器加入和移除网络
root@armbian:/usr/local/aurora-springboot# docker inspect aurora-springboot-0.0.1.jar --format='{
{.NetworkSettings.Networks}}'
map[bridge:0x40002fe000 docker_default:0x40002fe180]
现在aurora-springboot-0.0.1.jar
容器位于两个网络中,将其从bridge:0x40002fe000
移除,只保证在docker_default:0x40002fe180
网路中。
- 停止容器:
docker stop aurora-springboot-0.0.1.jar
- 移除容器的网络连接:
docker network disconnect bridge aurora-springboot-0.0.1.jar
- 将容器连接到目标网络:
docker network connect docker_default aurora-springboot-0.0.1.jar
- 启动容器:
docker start aurora-springboot-0.0.1.jar
现在,aurora-springboot-0.0.1.jar
容器将只保留在 docker_default
网络中,而不再与 bridge
网络关联。