https://www.daleseo.com/docker-networks/
도커에서 생성한 컨테이너는 개별적인 환경에서 돌아가기 때문에 기본적으로 다른 컨테이너와의 통신이 불가능함
여러개의 컨테이너를 도커 네트워크에 연결하면 서로 통신이 가능함
- bridge : 네트워크는 하나의 호스트 컴퓨터 내에서 여러 컨테이너들이 서로 소통할 수 있도록 해줌
- host : 네트워크는 컨터이너를 호스트 컴퓨터와 동일한 네트워크에서 컨테이너를 돌리기 위해서 사용됨
- overlay : 네트워크는 여러 호스트에 분산되어 돌아가는 컨테이너들 간에 네트워킹을 위해서 사용됨
======================================================================================================
docker network ls
======================================================================================================
- 실행 후 화면
======================================================================================================
NETWORK ID NAME DRIVER SCOPE
2bf61c1472b4 bridge bridge local
d457701c6583 host host local
1ba007a7f649 none null local
5b01e3506555 springboot-mysql-net bridge local
======================================================================================================
test11 이라는 네트워크를 생성
======================================================================================================
docker network create test11
======================================================================================================
위에서 생성한 test11 네트워크의 상세 정보를 확인
======================================================================================================
docker network inspect test11
======================================================================================================
- 실행 후 화면
======================================================================================================
[
{
"Name": "test11",
"Id": "91b898c22303cadcc7338e30c629a05516812180cb855b02f8b25eb41ce8e0d4",
"Created": "2022-08-09T12:47:30.9683971Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "172.20.0.0/16",
"Gateway": "172.20.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {},
"Options": {},
"Labels": {}
}
]
======================================================================================================
======================================================================================================
docker run -itd --name one busybox
======================================================================================================
--network 옵션을 주지 않으면 기본적으로 bride 라는 디폴트 네트워크테 붙게됨
======================================================================================================
docker network inspect bridge
======================================================================================================
- 아래를 확인해보면 Containers 부분에 one 가 들어있음
======================================================================================================
[
{
"Name": "bridge",
"Id": "2bf61c1472b453ea2f74acaaaa17ed0b1f2e5c02d3a573bb2e5c8eda028a9bf1",
"Created": "2022-08-09T10:30:43.686715Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.17.0.0/16",
"Gateway": "172.17.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"33480a6661bc192f85775385c5d69841599a4290a4657db253c640e3f9058db7": {
"Name": "one",
"EndpointID": "9628ee038ac0261b977a99a6c1c21f558766cf6eb7321c4f91d5ac359c086f21",
"MacAddress": "02:42:ac:11:00:02",
"IPv4Address": "172.17.0.2/16",
"IPv6Address": ""
}
},
"Options": {
"com.docker.network.bridge.default_bridge": "true",
"com.docker.network.bridge.enable_icc": "true",
"com.docker.network.bridge.enable_ip_masquerade": "true",
"com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
"com.docker.network.bridge.name": "docker0",
"com.docker.network.driver.mtu": "1500"
},
"Labels": {}
}
]
======================================================================================================
docker network connect [네트워크명] [컨테이너명]
======================================================================================================
docker network connect test11 one
======================================================================================================
- 연결한 네트워크를 확인
======================================================================================================
docker network inspect test11
======================================================================================================
- 아래와 같이 one 가 test11 네트워크에 추가되어있음
======================================================================================================
[
{
"Name": "test11",
"Id": "91b898c22303cadcc7338e30c629a05516812180cb855b02f8b25eb41ce8e0d4",
"Created": "2022-08-09T12:47:30.9683971Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "172.20.0.0/16",
"Gateway": "172.20.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"33480a6661bc192f85775385c5d69841599a4290a4657db253c640e3f9058db7": {
"Name": "one",
"EndpointID": "5264799d5e5f5942170dc606884c0dabae39c160d4e121c160250720e13ecc00",
"MacAddress": "02:42:ac:14:00:02",
"IPv4Address": "172.20.0.2/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {}
}
]
======================================================================================================
처음생성할때 --network 옵션을 주지 않고 생성하면 bridge 에 연결됨
connect 명령어로 다른 네트워크에 붙이게 될 경우 bridge 와 추가로 연결한 네트워크에 둘다 연결되어 있게됨
ex) one 컨테이너는 bridge 와 test11 네트워크에 둘다 연결되어있음
docker network disconnect [네트워크명] [컨테이너명]
======================================================================================================
docker network disconnect bridge one
======================================================================================================
위의 명령어를 실행 후 bridge 네트워크를 확인해보면 one 컨테이너가 삭제된 것을 확인할수있음
======================================================================================================
docker network inspect bridge
======================================================================================================
컨테이너 실행시 --network [네트워크명] 옵션을 추가하여서 컨테이너를 실행하면
바로 해당 네트워크에 연결된 상태로 실행됨
======================================================================================================
docker run -itd --name two --network test11 busybox
======================================================================================================
- 아래의 명령어로 네트워크에 추가된 컨테이너들 확인
======================================================================================================
docker network inspect test11
======================================================================================================
- 추가된 컨테이너는 Containers 에서 확인가능함
======================================================================================================
[
{
"Name": "test11",
"Id": "91b898c22303cadcc7338e30c629a05516812180cb855b02f8b25eb41ce8e0d4",
"Created": "2022-08-09T12:47:30.9683971Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "172.20.0.0/16",
"Gateway": "172.20.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"0f293ac16aa8fe8a2d05961ab3f2b0e4f14ea9e3246a53d898e93841c1443a53": {
"Name": "two",
"EndpointID": "b9ab2009d18e8651c59b9ff85fa18fde0b9a111786cbdb0bb0c56f345b20d449",
"MacAddress": "02:42:ac:14:00:03",
"IPv4Address": "172.20.0.3/16",
"IPv6Address": ""
},
"33480a6661bc192f85775385c5d69841599a4290a4657db253c640e3f9058db7": {
"Name": "one",
"EndpointID": "5264799d5e5f5942170dc606884c0dabae39c160d4e121c160250720e13ecc00",
"MacAddress": "02:42:ac:14:00:02",
"IPv4Address": "172.20.0.2/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {}
}
]
======================================================================================================
컨테이너의 이름을 hostname 처럼 사용할 수 잇음
- 아래의 명령어 실행
======================================================================================================
docker exec one ping two
======================================================================================================
- 결과
======================================================================================================
PS C:\Users\sung> docker exec one ping two
PING two (172.20.0.3): 56 data bytes
64 bytes from 172.20.0.3: seq=0 ttl=64 time=0.069 ms
64 bytes from 172.20.0.3: seq=1 ttl=64 time=0.063 ms
64 bytes from 172.20.0.3: seq=2 ttl=64 time=0.088 ms
64 bytes from 172.20.0.3: seq=3 ttl=64 time=0.070 ms
64 bytes from 172.20.0.3: seq=4 ttl=64 time=0.060 ms
======================================================================================================
또는 docker network inspect test11 명령어로 컨테이너들의 IP를 확인하여 ping 실행
172.20.0.2 -> one
172.20.0.3 -> two
- 아래의 명령어 실행
======================================================================================================
docker exec two ping 172.20.0.2
======================================================================================================
- 결과
======================================================================================================
PS C:\Users\sung> docker exec two ping 172.20.0.2
PING 172.20.0.2 (172.20.0.2): 56 data bytes
64 bytes from 172.20.0.2: seq=0 ttl=64 time=0.081 ms
64 bytes from 172.20.0.2: seq=1 ttl=64 time=0.089 ms
64 bytes from 172.20.0.2: seq=2 ttl=64 time=0.099 ms
64 bytes from 172.20.0.2: seq=3 ttl=64 time=0.082 ms
64 bytes from 172.20.0.2: seq=4 ttl=64 time=0.085 ms
64 bytes from 172.20.0.2: seq=5 ttl=64 time=0.084 ms
======================================================================================================
※ ip ping ip 는 안됌
ex)
docker exec 172.20.0.3 ping 172.20.0.2
======================================================================================================
PS C:\Users\sung> docker exec 172.20.0.3 ping 172.20.0.2
Error: No such container: 172.20.0.3
======================================================================================================
도커 네트워크를 삭제하기전에는 실행중인 컨테이너들을 전부 제거해야 함
======================================================================================================
docker network rm test11
======================================================================================================
- 실행중인 컨테이너 있을 시 아래와 같이 표시됨
======================================================================================================
PS C:\Users\sung> docker network rm test11
Error response from daemon: error while removing network: network test11 id 91b898c22303cadcc7338e30c629a05516812180cb855b02f8b25eb41ce8e0d4 has active endpoints
======================================================================================================
- 컨테이너 중지
컨테이너 중지시에는 컨테이너의 ID 나 name 을 사용하여 중지 할수 있음, 또한 한번에 여러개의 컨테이너를 중지할수 있음
1. 실행중엔 컨테이너확인
======================================================================================================
PS C:\Users\sung> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0f293ac16aa8 busybox "sh" 7 minutes ago Up 7 minutes two
33480a6661bc busybox "sh" 15 minutes ago Up 15 minutes one
02b1ae25a18b stock "java -jar /myboot.j…" 25 minutes ago Up 25 minutes 0.0.0.0:9090->80/tcp test
144ebf25dd0a mysql:5.7 "docker-entrypoint.s…" 7 days ago Up 3 hours 0.0.0.0:3306->3306/tcp, 33060/tcp mysql
======================================================================================================
2. 컨테이너 중지, 중지시 두개를 동시에 중지할수 있으며 하나는 컨테이너명으로 중지하고 하나는 컨테이너 ID 로 중지함
======================================================================================================
PS C:\Users\sung> docker stop one 0f293ac16aa8
one
0f293ac16aa8
======================================================================================================
컨테이너 중지가 끝나면 도커 네트워크 삭제
======================================================================================================
docker network rm test11
======================================================================================================
여러개의 컨테이너와 네트워크를 사용하다보면 사용하지 않는 도커 네트워크가 있을수 있음
사용하지 않는 네트워크를 청소해주는 명령어는 prune 임
======================================================================================================
docker network prune
======================================================================================================
테스트 - 도커 네트워크 생성
======================================================================================================
docker network create abc123
docker network create test123
======================================================================================================
테스트 - 도커 네트워크 확인
======================================================================================================
docker network ls
======================================================================================================
- 실제 명령어 실행
======================================================================================================
PS C:\Users\sung> docker network ls
NETWORK ID NAME DRIVER SCOPE
ab49ab76e77b abc123 bridge local
2bf61c1472b4 bridge bridge local
d457701c6583 host host local
1ba007a7f649 none null local
5b01e3506555 springboot-mysql-net bridge local
d59addc2c710 test123 bridge local
======================================================================================================
테스트 - 사용하지 않는 네트워크 삭제
======================================================================================================
docker network prune
======================================================================================================
- 실제 명령어 실행
======================================================================================================
PS C:\Users\sung> docker network prune
WARNING! This will remove all custom networks not used by at least one container.
Are you sure you want to continue? [y/N] y
Deleted Networks:
abc123
test123
======================================================================================================
- 삭제 후 확인해보면 abc123 , test123 두개의 네트워크가 지워진 것이 확인됨
======================================================================================================
PS C:\Users\sung> docker network ls
NETWORK ID NAME DRIVER SCOPE
2bf61c1472b4 bridge bridge local
d457701c6583 host host local
1ba007a7f649 none null local
5b01e3506555 springboot-mysql-net bridge local
======================================================================================================