๐ก ๋ณธ ๋ฌธ์๋ 'Docker ๋คํธ์ํฌ ์ฌ์ฉ๋ฒ'์ ๋ํด ์ ๋ฆฌํด๋์ ๊ธ์ ๋๋ค.
Docker๋ฅผ ์ฌ์ฉํ๋ค๋ณด๋ฉด ๋ฌธ๋ ์ปจํ ์ด๋ ์ฌ์ด์ ํต์ ๋ฐ ๊ด๋ จ ๋คํธ์ํฌ์ ๋ํด ๊ถ๊ธํด์ง๊ธฐ ์์ํฉ๋๋ค. ์ด์ ๋ํด ์ ๋ฆฌํด๋์ ๋ฌธ์์ด๋ ์ฐธ๊ณ ๋ถํ๋๋ฆฝ๋๋ค.
1. Docker ๋คํธ์ํฌ ์์๋ณด๊ธฐ
1.1. ๋คํธ์ํฌ ์กฐํ
Docker ๋คํธ์ํฌ์ ๊ธฐ๋ณธ์ ๋ด ์ปดํจํฐ์์ ์ด๋ค ๋คํธ์ํฌ๊ฐ ์์ฑ๋์ด ์๋์ง๋ฅผ ์๋ ๊ฒ์ผ ๊ฒ๋๋ค. docker network ls ์ปค๋งจ๋๋ฅผ ์ฌ์ฉํ๋ฉด ํ์ฌ ์์ฑ๋์ด ์๋ Docker ๋คํธ์ํฌ ๋ชฉ๋ก์ ์กฐํํ ์ ์์ต๋๋ค.
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
9c30a1171e7e bridge bridge local
c7e387e38900 host host local
05328f1badbd install_PKI bridge local
72af805ed4d5 install_default bridge local
4b19ab4ddff9 none null local
- bridge, host, none์ Docker ๋ฐ๋ชฌ(daemon)์ด ์คํ๋๋ฉด์ ๋ํดํธ๋ก ์์ฑ๋๋ ๋คํธ์ํฌ์ ๋๋ค.
- ๋๋ถ๋ถ์ ๊ฒฝ์ฐ์๋ ์ด๋ฌํ ๋ํดํธ ๋คํธ์ํฌ๋ฅผ ์ด์ฉํ๋ ๊ฒ ๋ณด๋ค๋ ์ฌ์ฉ์๊ฐ ์ง์ ๋คํธ์ํฌ๋ฅผ ์์ฑํด์ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ถ์ฅ๋ฉ๋๋ค.
1.2 ๋คํธ์ํฌ ์ข ๋ฅ
Docker ๋คํธ์ํฌ๋ bridge, host, overlay ๋ฑ ๋ชฉ์ ์ ๋ฐ๋ผ ๋ค์ํ ์ข ๋ฅ์ ๋คํธ์ํฌ ๋๋ผ์ด๋ฒ(driver)๋ฅผ ์ง์ํฉ๋๋ค.
bridge ๋คํธ์ํฌ
- ํ๋์ ํธ์คํธ ์ปดํจํฐ ๋ด์์ ์ฌ๋ฌ ์ปจํ ์ด๋๋ค์ด ์๋ก ์ํตํ ์ ์๋๋ก ํด์ค๋๋ค.
- ๊ฐ์ Docker daemon host๋ฅผ ํตํด ์์ฑ๋ ์ปจํ ์ด๋๋ค์ ๋์ผํ bridge network์ ์ฐ๊ฒฐ๋๊ฒ ๋ฉ๋๋ค. NAT๋ Docker๊ฐ ์ ๊ณตํ๋ ๋ธ๋ฆฟ์ง ์ธํฐํ์ด์ค๊ฐ ๊ฒ์ดํธ์จ์ด ์ญํ ์ ํ๋ฉฐ ์ํํฉ๋๋ค.
- ์ผ๋ฐ์ ์ผ๋ก Bridge๋ ์ด๋๋ท ๋คํธ์ํฌ์ MAC ์ฃผ์๋ฅผ ์ด์ฉํด Link Layer์์ ์ฌ๋ฌ ๊ฐ์ ๋คํธ์ํฌ ์ธ๊ทธ๋จผํธ๋ฅผ ์ฐ๊ฒฐํ๋ ๊ฒ์ ๋งํ์ง๋ง, Host์ kernel์์ ์๋ํ๋ software๋ก ๋ํ๋ ์ ์์ต๋๋ค.
- ๋ณ๋ค๋ฅธ ์ค์ ์ ํ์ง ์์์ ๋ ์ฌ์ฉ๋๋ Default Network Driver์ด๋, HOST์ docker0 ๋ธ๋ฆฌ์ง ์ธํฐํ์ด์ค์ ์๋ก ๋ง๋ค์ด์ง ์ปจํ ์ด๋์ eth0๋ฅผ ์ฐ๊ฒฐํด์ฃผ์ด user-defined bridge๋ฅผ ์ง์ ์ค์ ํ์ฌ ์ฌ์ฉํ ์๋ ์๋ค.
host ๋คํธ์ํฌ
- ์ปจํฐ์ด๋๋ฅผ ํธ์คํธ ์ปดํจํฐ์ ๋์ผํ ๋คํธ์ํฌ์์ ์ปจํ ์ด๋๋ฅผ ๋๋ฆฌ๊ธฐ ์ํด์ ์ฌ์ฉ๋ฉ๋๋ค.
- ์คํ๋ ์ปจํ ์ด๋๋ค์ด ๋ธ๋ฆฟ์ง ๋คํธ์ํฌ์ฒ๋ผ ๋ถ๋ฆฌ๋์ง ์๊ณ Host์ Port๋ฅผ ๊ทธ๋๋ก ๋ฐ์ธ๋ฉํด ์ฌ์ฉํฉ๋๋ค.
- HOST์ ๋คํธ์ํฌ ์คํ์ fully access ํ ์ ์์ต๋๋ค.
overlay ๋คํธ์ํฌ
- ์ฌ๋ฌ ํธ์คํธ์ ๋ถ์ฐ๋์ด ๋์๊ฐ๋ ์ปจํ ์ด๋๋ค ๊ฐ์ ๋คํธ์ํน์ ์ํด์ ์ฌ์ฉ๋ฉ๋๋ค.
- ๋ณต์์ docker daemon host, swarm service ๊ฐ์ ๋คํธ์ํฌ
- swarm์ ์์ฑํ๊ฑฐ๋, ์๋ก์ด docker host๋ฅผ swarm์ ์ถ๊ฐํ ๊ฒฝ์ฐ ๋ ๊ฐ์ง ์๋ก์ด ๋คํธ์ํฌ๊ฐ ํ์ฑ๋๋ค.
- ingress๋ผ๋ overlay network๋ swarm service๋ค์ ํธ๋ํฝ์ ์ปจํธ๋กคํ๋ฉฐ, swarm service๋ฅผ ์์ฑํ๊ณ user-defined overlay network์ ์ง์ ์ฐ๊ฒฐํด์ฃผ์ง ์์ผ๋ฉด default๋ก ingress ์ ์ฐ๊ฒฐ๋๋ค.
- docker_gwbridge ๋ผ๋ bridge network๊ฐ ๋์ผ swarm ๋ด์ ์๋ Docker Daemon๋ค์ ์ฐ๊ฒฐํ๋ค.
macvlan ๋คํธ์ํฌ
- ์ปจํ ์ด๋์ MAC address๋ฅผ ํ ๋นํ๋ค.
null ๋คํธ์ํฌ
- ip๋ฅผ ํ ๋น๋ฐ์ง ์๊ณ ์ด๋ ๋คํธ์ํฌ์๋ ์ํ์ง ์์ต๋๋ค.
- ๋ฃจํ๋ฐฑ ์ธํฐํ์ด์ค๋ง ์์ฑ๋์ด, ๋ณดํต cronjob๊ฐ์ด ๋ฐฐ์น์์ ์ ํ ๋ ์๋๋ค.
1.3 ๋คํธ์ํฌ ์์ธ ์ ๋ณด
๋คํธ์ํฌ์ ์์ธ์ ๋ณด๋ docker network inspect ์ปค๋งจ๋๋ก ํ์ธํ ์ ์์ต๋๋ค.
$ docker network inspect bridge
2. Docker ๋คํธ์ํฌ ๋ค๋ฃจ๊ธฐ
2.1 ๋คํธ์ํฌ ์์ฑ
๋จผ์ docker network create ์ปค๋งจ๋๋ฅผ ์ฌ์ฉํด์ ์๋ก์ด Docker ๋คํธ์ํฌ๋ฅผ ์์ฑํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
$ docker network create our-net
e6dfe4a9a5ec85abcb484662c30a3a0fc76df217dde76d52fac39fae8412ca68
2.2 ๋คํธ์ํฌ์ ์ปจํ ์ด๋ ์ฐ๊ฒฐ
๋จผ์ ์ปจํ ์ด๋ ํ๋๋ฅผ one๋ผ๋ ์ด๋ฆ์ผ๋ก ์คํํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
$ docker run -itd --name one busybox
660bafdce2996378cde070dfd894731bb90745e46d2ab10d6504c0cc9f4bdea9
์ปจํ ์ด๋๋ฅผ ์คํํ ๋ --network ์ต์ ์ ๋ช ์ํด์ฃผ์ง ์์ผ๋ฉด, ๊ธฐ๋ณธ์ ์ผ๋ก bride๋ผ๋ ์ด๋ฆ์ ๋ํดํธ ๋คํธ์ํฌ์ ๋ถ๊ฒ ๋ฉ๋๋ค.
$ docker network inspect bridge
...
"Containers": {
"660bafdce2996378cde070dfd894731bb90745e46d2ab10d6504c0cc9f4bdea9": {
"Name": "one",
"EndpointID": "40b4bbd8385debf86eef2fc2136315e1a82fa1ef72877bfae25477d6e8e46726",
"MacAddress": "02:42:ac:11:00:04",
"IPv4Address": "172.17.0.4/16",
"IPv6Address": ""
},
},
...
์ด one ์ปจํ ์ด๋๋ฅผ ์์์ ์์ฑํ our-net ๋คํธ์ํฌ์ ์ฐ๊ฒฐํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. Docker ๋คํธ์ํฌ์ ์ปจํ ์ด๋๋ฅผ ์ฐ๊ฒฐํ ๋๋ docker network connect ์ปค๋งจ๋๋ฅผ ์ฌ์ฉํฉ๋๋ค.
$ docker network connect our-net one
our-net ๋คํธ์ํฌ์ ์์ธ ์ ๋ณด๋ฅผ ๋ค์ ํ์ธํด๋ณด๋ฉด Containers ํญ๋ชฉ์ one ์ปจํ ์ด๋๊ฐ ์ถ๊ฐ๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค. one ์ปจํ ์ด๋์ IP 172.19.0.2๊ฐ ํ ๋น๋ ๊ฒ๋ ํ์ธํ ์ ์์ต๋๋ค.
2.3 ๋คํธ์ํฌ๋ก๋ถํฐ ์ปจํ ์ด๋ ์ฐ๊ฒฐ ํด์
ํ๋์ ์ปจํ ์ด๋๋ ์ฌ๋ฌ ๊ฐ์ ๋คํธ์ํฌ์ ๋์์ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค. ์ต์ด์ one ์ปจํ ์ด๋๋ฅผ ์์ฑํ ๋ bridge ๋คํธ์ํฌ ๋ถ์๊ธฐ ๋๋ฌธ์, ํ์ฌ one ์ปจํ ์ด๋๋ our-net ๋คํธ์ํฌ์ bridge ๋คํธ์ํฌ์ ๋์์ ๋ถ์ด์๊ฒ ๋ฉ๋๋ค.
one ์ปจํ ์ด๋๋ฅผ bridge ๋คํธ์ํฌ๋ก๋ถํฐ ๋์ด ๋ด๋๋ก ํ๊ฒ ์ต๋๋ค. Docker ๋คํธ์ํฌ๋ก๋ถํฐ ์ปจํ ์ด๋์ ์ฐ๊ฒฐ์ ๋์ ๋๋ docker network disconnect ์ปค๋งจ๋๋ฅผ ์ฌ์ฉํฉ๋๋ค.
$ docker network disconnect bridge one
2.4 ๋๋ฒ์งธ ์ปจํ ์ด๋ ์ฐ๊ฒฐ
๋คํธ์ํฌ์ ํ๋ก ์๋ ์ปจํ ์ด๋๋ ํฐ ์๋ฏธ๊ฐ ์์ ๊ฒ์ ๋๋ค. ํ๋์ ์ปจํ ์ด๋๋ฅผ ๋ our-net ๋คํธ์ํฌ์ ์ฐ๊ฒฐํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. ์ด๋ฒ์๋ --network ์ต์ ์ ์ฌ์ฉํด์ ์ปจํ ์ด๋๋ฅผ ์คํํ๋ฉด์ ๋ฐ๋ก ์ฐ๊ฒฐํ ๋คํธ์ํฌ๋ฅผ ์ง์ ํด์ฃผ๋๋ก ํ๊ฒ ์ต๋๋ค.
$ docker run -itd --name two --network our-net busybox
0e7fe8a59f9d3f8bd545d3e557ffd34100a09b8ebe92ae5a375f37a5d072873d
our-net ๋คํธ์ํฌ์ ์์ธ ์ ๋ณด๋ฅผ ํ์ธํด๋ณด๋ฉด two ์ปจํ ์ด๋์ IP 172.19.0.3๊ฐ ํ ๋น๋์ด ์ฐ๊ฒฐ๋์ด ์๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
$ docker network inspect our-net
[
{
"Name": "our-net",
"Id": "e6dfe4a9a5ec85abcb484662c30a3a0fc76df217dde76d52fac39fae8412ca68",
"Created": "2020-04-26T19:23:04.563643516Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "172.19.0.0/16",
"Gateway": "172.19.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"0e7fe8a59f9d3f8bd545d3e557ffd34100a09b8ebe92ae5a375f37a5d072873d": {
"Name": "two",
"EndpointID": "a0e3625e48f0b833cd551d6dfb3b1a2a7614f1343adbc5e6aefa860d917ddea9",
"MacAddress": "02:42:ac:13:00:03",
"IPv4Address": "172.19.0.3/16",
"IPv6Address": ""
},
"660bafdce2996378cde070dfd894731bb90745e46d2ab10d6504c0cc9f4bdea9": {
"Name": "one",
"EndpointID": "cc490148a533d40b3aff33a421cc9a01c731c75a8deb70ab729a5358f2fd381c",
"MacAddress": "02:42:ac:13:00:02",
"IPv4Address": "172.19.0.2/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {}
}
]
2.5 ์ปจํ ์ด๋ ๊ฐ ๋คํธ์ํน ํ์ธ
์ด์ ๋ ๊ฐ์ ์ปจํ ์ด๋๊ฐ ๋คํธ์ํฌ๋ฅผ ํตํด ์๋ก ์ํต์ด ๊ฐ๋ฅํ์ง ํ ์คํธ๋ฅผ ํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. one ์ปจํ ์ด๋์์ two ์ปจํ ์ด๋๋ฅผ ์๋๋ก ping ๋ช ๋ น์ด๋ฅผ ๋ ๋ ค๋ณด๊ฒ ์ต๋๋ค. ์ปจํ ์ด๋ ์ด๋ฆ์ ํธ์คํธ๋ค์(hostname)์ฒ๋ผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
$ docker exec one ping two
PING two (172.19.0.3): 56 data bytes
64 bytes from 172.19.0.3: seq=0 ttl=64 time=0.119 ms
64 bytes from 172.19.0.3: seq=1 ttl=64 time=0.105 ms
...
2.6 ๋คํธ์ํฌ ์ ๊ฑฐ
๋ง์ง๋ง์ผ๋ก docker network rm ์ปค๋งจ๋๋ฅผ ์ฌ์ฉํด์ our-net ๋คํธ์ํฌ๋ฅผ ์ ๊ฑฐํด๋ณด๊ฒ ์ต๋๋ค.
$ docker network rm our-net
Error response from daemon: error while removing network: network our-net id e6dfe4a9a5ec85abcb484662c30a3a0fc76df217dde76d52fac39fae8412ca68 has active endpoints
์์ ๊ฐ์ด ์ ๊ฑฐํ๋ ค๋ ๋คํธ์ํฌ ์์์ ์คํ ์ค์ธ ์ปจํ ์ด๋๊ฐ ์์ ๋๋ ์ ๊ฑฐ๊ฐ ๋์ง๊ฐ ์์ต๋๋ค. ๊ทธ๋ด ๋๋ ํด๋น ๋คํธ์ํฌ์ ์ฐ๊ฒฐ๋์ด ์คํ ์ค์ธ ๋ชจ๋ ์ปจํ ์ด๋๋ฅผ ๋จผ์ ์ค์ง ์ํค๊ณ , ๋คํธ์ํฌ๋ฅผ ์ญ์ ํด์ผ ํฉ๋๋ค.
$ docker stop one two
one
two
$ docker network rm our-net
our-net
2.7 ๋คํธ์ํฌ ์ฒญ์ (prune)
ํ๋์ ํธ์คํธ ์ปดํจํฐ์์ ๋ค์์ ์ปจํ ์ด๋๋ฅผ ๋๋ฆฌ๋ค ๋ณด๋ฉด ์๋ฌด ์ปจํ ์ด๋๋ ์ฐ๊ฒฐ๋์ด ์์ง ์์ ๋คํธ์ํฌ๊ฐ ์๊ธฐ๊ฐ ๋ง๋ จ์ ๋๋ค. ์ด๋ด ๋๋ docker network prune ์ปค๋งจ๋๋ฅผ ์ด์ฉํด์ ๋ถํ์ํ ๋คํธ์ํฌ๋ฅผ ํ๋ฒ์ ๋ชจ๋ ์ ๊ฑฐํ ์ ์์ต๋๋ค.
$ docker network prune
WARNING! This will remove all networks not used by at least one container.
Are you sure you want to continue? [y/N] y
์ฐธ๊ณ
- Docker ๋คํธ์ํฌ ์ฌ์ฉ๋ฒ: https://www.daleseo.com/docker-networks/
- [Tistory] ๋์ปค ๋คํธ์ํฌ ๋ค๋ฃจ๊ธฐ -1: https://xodwkx2.tistory.com/entry/%EB%8F%84%EC%BB%A4-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC
'Study: DeveloperTools(DevTool) > DevTool: Container' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Docker] ๋์ปค ์ปจํ ์ด๋, ๊ฐ์ํ, ๋ด๋ถ๊ตฌ์กฐ (feat. VM vs Container) (1) | 2022.11.27 |
---|---|
[Docker] ๋์ปค ์ฉ๋ ํ์ธ ๋ฐ ๊ด๋ฆฌ (feat. ์๋ฒ์ ์ฉ๋์ด ๊ฝ ์ฐจ๋ฒ๋ ธ๋ค) (1) | 2022.10.29 |
[Docker] Privileged Container์ ๋ํ์ฌ (1) | 2022.10.03 |
[Docker] docker-compose VS docker compose ์ฐจ์ด์ ๋น๊ต (0) | 2022.09.07 |
[Docker] Docker Compose ์ปค๋งจ๋ ์ฌ์ฉ๋ฒ (0) | 2022.09.06 |