>  기사  >  운영 및 유지보수  >  docker network 명령에 대한 자세한 설명

docker network 명령에 대한 자세한 설명

王林
王林앞으로
2020-08-21 17:31:5017757검색

docker network 명령에 대한 자세한 설명

먼저 network의 모든 하위 명령을 살펴보겠습니다.

(권장 튜토리얼: docker tutorial)

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

1. 네트워크 생성

Docker 엔진을 설치하면 기본 브리지 네트워크 docker0이 자동으로 생성되었습니다. 또한 자체 브리지 네트워크나 오버레이 네트워크를 생성할 수도 있습니다.

브리지 네트워크는 Docker 엔진을 실행하는 단일 호스트에 연결되는 반면, 오버레이 네트워크는 해당 Docker 엔진을 실행하는 여러 호스트 환경을 포괄할 수 있습니다.

브릿지 네트워크를 생성하는 것은 다음과 같이 비교적 간단합니다:

 # 不指定网络驱动时默认创建的bridge网络
 docker network create simple-network
 # 查看网络内部信息
 docker network inspect simple-network
 # 应用到容器时,可进入容器内部使用ifconfig查看容器的网络详情

그러나 오버레이 네트워크를 생성하려면 몇 가지 전제 조건이 필요합니다(특정 작업에 대해서는 Docker 컨테이너 네트워크 관련 콘텐츠를 참조하십시오):

- key-value store(Engine支持Consul、Etcd和ZooKeeper等分布式存储的key-value store) 
- 集群中所有主机已经连接到key-value store 
- swarm集群中每个主机都配置了下面的daemon参数 
- –cluster-store 
- –cluster-store-opt 
- –cluster-advertise

그런 다음 오버레이 네트워크를 생성합니다:

# 创建网络时,使用参数`-d`指定驱动类型为overlay
docker network create -d overlay my-multihost-network

그냥 사용 - 서브넷을 생성하는 서브넷 옵션의 경우 브리지 네트워크는 하나의 서브넷만 지정할 수 있는 반면 오버레이 네트워크는 여러 서브넷을 지원합니다.

브리지 및 오버레이 네트워크 드라이버에서 생성된 네트워크는 다른 매개변수를 지정할 수 있습니다.

2. 컨테이너 연결

세 개의 컨테이너를 만듭니다. 처음 두 개는 기본 네트워크를 사용하여 컨테이너를 시작하고 세 번째는 사용자 정의 브리지 네트워크를 사용합니다. 그런 다음 두 번째 컨테이너를 사용자 지정 네트워크에 추가합니다. 이 세 가지 컨테이너의 네트워크 조건은 다음과 같습니다.

첫 번째 컨테이너: 기본 docker0만

두 번째 컨테이너: 두 네트워크에 속함 - docker0, 사용자 정의 네트워크

세 번째 컨테이너: 사용자 정의 네트워크에만 속함

참고: 컨테이너를 통해 지정된 네트워크를 시작하면 기본 브리지 네트워크 docker0을 덮어쓰게 됩니다.

# 创建三个容器 conTainer1,container2,container3
docker run -itd --name=container1 busybox
docker run -itd --name=container2 busybox
# 创建网络mynet
docker network create -d bridge --subnet 172.25.0.0/16 mynet
# 将容器containerr2连接到新建网络mynet
docker network connect mynet container2
# 使用mynet网络来容器container3
docker run --net=mynet --ip=172.25.3.3 -itd --name=container3 busybox
 
# 查看这三个容器的网络情况
docker network inspect container1 # docker0
docker network inspect container2 # docker0, mynet
docker network inspect container3 # mynet

3. 기본 네트워크와 커스텀 브리지 네트워크의 차이점

기본 네트워크 docker0: 네트워크의 모든 호스트는 IP를 통해서만 서로 액세스할 수 있습니다. --link 옵션으로 생성된 컨테이너는 연결된 컨테이너 이름(container-name)을 호스트 이름으로 직접 액세스할 수 있습니다.

사용자 정의 네트워크(브리지): IP 액세스 외에도 네트워크의 모든 호스트는 컨테이너 이름(container-name)을 호스트 이름으로 사용하여 서로 직접 액세스할 수도 있습니다.

# 进入container2内部
docker attach container2
ping -w 4 container3 # 可访问
ping -w 4 container1 # 不可访问
ping -w 4 172.17.0.2 # 可访问container1的IP
# Ctrl+P+Q退出容器,让container2以守护进程运行

4. 컨테이너 연결에서 기본 네트워크와 커스텀 브리지 네트워크의 차이점

기본 네트워크에서 링크(레거시 링크)를 사용하면 다음과 같은 기능이 있습니다.

- 使用容器名作为hostname 
- link容器时指定alias: --link=<Container-Name>:<Alias> 
- 配合--icc=false隔离性,实现容器间的安全连接 
- 环境变量注入

커스텀 네트워크에서 docker net을 사용하면 다음과 같은 기능을 제공합니다. :

- 使用DNS实现自动化的名称解析 
- 一个网络提供容器的安全隔离环境 
- 动态地attach与detach到多个网络 
- 支持与--link选项一起使用,为链接的容器提供别名(可以是尚不存在链接容器,与默认容器中–link使用的最大差别)

기본 네트워크의 링크는 정적이며 링크 컨테이너가 다시 시작되는 것을 허용하지 않는 반면, 사용자 정의 네트워크 아래의 링크는 동적이며 링크 컨테이너 다시 시작(및 IP 변경)을 지원합니다.
따라서 연결된 컨테이너는 --link 사용 기본 네트워크는 미리 생성해야 하지만, 커스텀 네트워크는 미리 구축할 필요가 없습니다.

docker network connectct를 사용하여 컨테이너를 새 네트워크에 연결할 때 --link 매개변수를 사용하여 동일한 컨테이너를 연결할 때 다른 네트워크에 대한 다른 별칭을 지정할 수 있습니다.

# 运行容器使用自定义网络,同时使用--link链接尚不存在的container5容器
docker run --net=mynet -itd --name=container4 --link container5:c5 busybox
# 创建容器container5
docker run --net=mynet -itd --name=container5 --link container4:c4 busybox
# 虽然是相同容器,但是在不同的网络环境连接中可以不同的alias链接
docker network connect --link container5:foo local_alias container4
docker network connect --link container4:bar local_alias container5

5. 컨테이너의 네트워크 범위 별칭 지정(Network-scoped alias)

네트워크 범위 별칭은 동일한 네트워크 범위 내의 다른 컨테이너에서 액세스할 수 있는 지정된 컨테이너의 별칭입니다.

링크 별칭과 달리 링크 별칭은 링크 컨테이너 사용자가 제공하며 자체적으로만 사용할 수 있는 반면, 지정된 네트워크 범위 내의 별칭은 네트워크의 다른 컨테이너에서 사용할 수 있도록 컨테이너에서 제공됩니다.

네트워크 범위 별칭: 동일한 네트워크의 여러 컨테이너는 동일한 별칭을 지정할 수 있습니다. 물론 지정된 별칭을 가진 첫 번째 컨테이너만 적용됩니다.
첫 번째 컨테이너가 닫힐 때만 동일한 별칭을 가진 세 번째 컨테이너가 적용됩니다. 그러면 두 컨테이너의 별칭이 적용됩니다.

docker run --net=mynet -itd --name=container6 --net-alias app busybox
docker network connect --alias scoped-app local_alias container6
docker run --net=isolated_nw -itd --name=container7 --net-alias app busybox
docker network connect --alias scoped-app local_alias container7
# 在container4中
docker attach container4
ping app # 访问container6的IP
# 从container4中以守护进程运行退出:Ctrl+P+Q
docker stop container6
docker attach container4
ping app # 访问的container7的IP

6. 네트워크 연결 끊기 및 제거

# 容器从mynet网络中断开(它将无法再网络中的容器container3通讯)
docker network disconnect mynet container2
# 测试与容器container3失败
docker attach container2
ping contianer3 # 访问失败

다중 호스트 네트워크 환경에서 컨테이너 이름이 제거된 네트워크에 컨테이너를 연결하면 이미 네트워크에 연결되어 있는 오류 컨테이너가 나타납니다. docker rm -f를 사용하여 새 컨테이너를 제거하고 다시 실행한 후 네트워크에 연결하세요.

네트워크를 제거하려면 제거 명령을 사용하기 전에 네트워크의 모든 컨테이너를 닫거나 이 네트워크에서 연결을 끊어야 합니다.

# 断开最后一个连接到mynet网络的容器
docker network disconnet mynet container3
# 移除网络
docker network rm mynet

위 내용은 docker network 명령에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제