[Docker] Network 설정
도커 컨테이너는 서로 간의 통신을 위해 도커 네트워크를 통해 통신합니다.
별도의 네트워크를 생성하여 사용하거나, 네트워크 대역을 설정하는 등 관리할 수 있습니다.
네트워크 리스트 확인
docker network ls
명령어로 도커 네트워크 리스트를 확인할 수 있습니다.
기본 값으로 bridge, host, none 이름의 도커 네트워크가 생성됩니다.
# docker network ls
NETWORK ID NAME DRIVER SCOPE
1828940023a0 bridge bridge local
ed4ac8c45f9c host host local
f906c4534681 none null local
bridge 네트워크 드라이브
bridge
네트워크 드라이브는 기본 네트워크 드라이버입니다. 드라이버를 지정하지 않고 docker-compose를 작성하여 컨테이너를 생성하면 기본적으로 bridge
네트워크 드라이브로 네트워크가 생성됩니다. 일반적으로 응용프로그램이 통신해야 하는 독립형 컨테이너에서 실행될 때 사용됩니다.
host 네트워크 드라이브
host
네트워크 드라이브는 Docker 호스트 간의 네트워크 분리를 제거하고 호스트의 네트워킹을 직접 사용합니다.
none 네트워크 드라이브
none
네트워크 드라이브는 모든 네트워크을 비활성화하는 설정입니다.
기본 설정
별도의 도커 네트워크를 설정하지 않고 docker-compose를 통해 도커 컨테이너를 생성하면 bridge 네트워크 드라이브로 네트워크가 생성됩니다. 동일한 docker-compose 파일에 별도의 네트워크 설정 없이 여러 컨테이너를 추가했다면 모두 동일한 도커 네트워크가 할당됩니다.
services:
httpd:
image: httpd:latest
container_name: "my-web-server1"
restart: "always"
ports:
- "8081:80"
컨테이너를 실행하면 webserver_default
이름의 네트워크가 생성됩니다.
네트워크 이름 규칙은 docker-compose.yml 파일이 위치한 디렉토리 이름에 '_default' 추가된 형태로 생성됩니다.
(docker-compose 버전에 따라 기본 생성 이름은 달라질 수 있습니다.)
# docker-compose up -d
Creating network "webserver_default" with the default driver
Creating my-web-server1 ... done
docker network ls
명령어로 네트워크가 추가된 것을 확인하실 수 있습니다.
# docker network ls
NETWORK ID NAME DRIVER SCOPE
1828940023a0 bridge bridge local
ed4ac8c45f9c host host local
f906c4534681 none null local
162b8673c609 webserver_default bridge local
상세 정보 확인
생성된 네트워크는 inspect
옵션을 통해 상세 정보를 확인할 수 있습니다.
도커 네트워크에 할당된 컨테이너는 "Containers" 항목에서 확인하실 수 있습니다.
# docker network inspect webserver_default
[
{
"Name": "webserver_default",
"Id": "162b8673c60998f9e127f6c3d3c946b7f3005db0277270a0302d64a5d25734bc",
"Created": "2022-11-22T23:16:11.2384848+09:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.25.0.0/16",
"Gateway": "172.25.0.1"
}
]
},
"Internal": false,
"Attachable": true,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"72c4f8408a4c09f12f667de5188452550fa444d57656ac51fbd709f3d28b727e": {
"Name": "my-web-server1",
"EndpointID": "9ace8e9ea4647d52abd9cae0a90e62b7955fecffdfde46c16686b9060aba6714",
"MacAddress": "02:42:ac:19:00:02",
"IPv4Address": "172.25.0.2/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {
"com.docker.compose.network": "default",
"com.docker.compose.project": "webserver",
"com.docker.compose.version": "1.29.2"
}
}
]
도커 네트워크에 2개 이상의 컨테이너가 할당되면 아래와 같이 확인 가능합니다.
"Containers": {
"5af2aed3ae0a96e79aadbb007babb48fad29a866623bbefb10410071def95d91": {
"Name": "my-web-server2",
"EndpointID": "28e88ea1fb41743162a5c7f85af97f7cf152dd1e80c9ace503ae7d11dc355db4",
"MacAddress": "02:42:ac:1a:00:03",
"IPv4Address": "172.26.0.3/16",
"IPv6Address": ""
},
"7d669f907151d747074c50a97ce1c35c32ce214857b6b012ab18dc747883bb28": {
"Name": "my-web-server1",
"EndpointID": "671b2b651d7e4033fc268806c9137e2ac3d517d1397e1cf84f2d667ab177eb31",
"MacAddress": "02:42:ac:1a:00:02",
"IPv4Address": "172.26.0.2/16",
"IPv6Address": ""
}
},
IP 대역 설정
docker-compose.yml 파일을 통해 도커 네트워크를 생성하고, IP 대역을 지정할 수 있습니다.
테스트로 "172.16.101.0/24" 대역으로 도커 네트워크를 생성하고, 도커 컨테이너에 적용해봅시다.
services:
httpd:
image: httpd:latest
container_name: "my-web-server1"
restart: "always"
ports:
- "8081:80"
networks:
- test-network-1
networks:
test-network-1:
ipam:
driver: default
config:
- subnet: "172.16.101.0/24"
도커 컨테이너 실행 후 생성된 네트워크 정보를 확인해보면 "172.16.101.0/24" IP 대역으로 도커 네트워크가 생성되고 "172.16.101.2/24" IP로 도커 컨테이너에 할당된 것을 확인하실 수 있습니다.
# docker network inspect webserver_test-network-1
[
{
"Name": "webserver_test-network-1",
"Id": "6dd881586154cbf2f95d710fc67f6ed6ec79149478b4e7502b3b6472eaf71b8a",
"Created": "2022-12-01T23:29:47.4810513+09:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.16.101.0/24"
}
]
},
"Internal": false,
"Attachable": true,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"e5436808ad268cccee655a2df0ae7a5dc31c8d9e0bd1387cc6dd5aa29cf93a3b": {
"Name": "my-web-server1",
"EndpointID": "d16c3da2b0ccb72a772c8682db0ed7a49441b731b6f2a48cd87b901c833672cb",
"MacAddress": "02:42:ac:10:65:02",
"IPv4Address": "172.16.101.2/24",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {
"com.docker.compose.network": "test-network-1",
"com.docker.compose.project": "webserver",
"com.docker.compose.version": "1.29.2"
}
}
]
네트워크 설정은 이 외에도 다양하게 설정할 수 있지만 간단히 네트워크를 구성하는 방법을 알아보았습니다.
유익하게 보셨다면 공감을 눌러주고, 댓글로 의견을 공유해 남겨주시면 감사하겠습니다!
'Docker' 카테고리의 다른 글
[Docker] error: could not create a builder instance with TLS data loaded from environment 에러 해결 방법 (0) | 2023.06.15 |
---|---|
[Docker] Logging 설정 (0) | 2022.11.07 |
[Docker] Syslog 서버 구축 (0) | 2022.11.01 |
[Docker] Healthcheck 설정을 통한 컨테이너 상태 점검 (0) | 2022.10.19 |
[Docker] Volumes 설정 (0) | 2022.10.11 |