Docker 컨테이너끼리 통신할 때는 Docker Network를 통해 수행하고 'docker network ls' 명령으로 Docker 네트워크 목록을 확인할 수 있다.
기본적으로 bridge, host, none 네트워크가 있다.
docker network ls [옵션]
옵션 | 설명 |
---|---|
-f, --filter=[] | 출력을 필터링 |
--no-trunc | 상세 정보 출력 |
-q, --quiet | 네트워크 ID만 표시 |
값 | 설명 |
---|---|
driver | 드라이버 지정 |
id | 네트워크 ID |
label | 네트워크에 설정된 라벨 |
name | 네트워크명 |
scope | 네트워크의 스코프 |
type | 네트워크의 타입 |
# 네트워크 드라이버가 bridge인 네트워크의 네트워크 ID를 출력
docker network ls -q --filter=bridge
# 컨테이너 실행
docker run --name test -dit centos:latest
# docker container inspect로 네트워크 확인
docker container inspect test
'docker container inspect'에서 NetworkSettings 외에도 여러가지 설정을 볼 수 있다.
# 컨테이너 실행
docker run --name webserver -d nginx:latest
#IP 확인
docker container inspect | grep IP
# test 컨테이너로 접속해서 nginx와 통신해보자
docker attach test
curl 172.17.0.4
이렇게 bridge를 만들어 네트워크를 만들어 줄 수도 있다.
docker network create [옵션] 네트워크
옵션 | 설명 |
---|---|
--driver, -d | 네트워크 브리지 또는 오버레이(기본값은 bridge) |
--ip-range | 컨테이너에 할당하는 IP 주소의 범위를 지정 |
--subnet | 서브넷을 CIDR 형식으로 지정 |
--ipv6 | IPv6 네트워크 유효화 여부(true/false) |
-label | 네트워크에 설정하는 라벨 |
# web-network 생성
docker network create --driver birdge web-network
docker network inspect web-network | grep Subnet
서브넷 자동으로 지정됨
ip addr show
로 확인하면
docker network create --driver bridge --subnet 172.72.0.0/16 --gateway 172.72.0.1 mybridge
ip addr show
로 확인하면
호스트에 네트워크 정보를 공유하는 형태로 쓴다.
docker container run [네트워크 옵션] 이미지명[:태그명] [인수]
옵션 | 설명 |
---|---|
-add-host=[호스트명:IP 주소] | 컨테이너의 /etc/hosts에 호스트명과 IP주소를 정의 |
--dns=[IP주소] | 컨테이너용 DNS 서버의 IP 주소 지정 |
--expose | 지정한 범위의 포트 번호를 할당 |
--mac-address=[MAC 주소] | 컨테이너의 MAC 주소를 지정 |
--net=[bridge | none | container:<name | id> | host | NETWORK] | 컨테이너의 네트워크를 지정 |
--hostname, -h | 컨테이너 자신의 호스트명을 지정 |
--publish, -p[호스트의 포트번호]:[컨테이너의 포트 번호] | 호스트와 컨테이너의 포트 매핑 |
--publish-all, -P | 호스트의 임의의 포트를 컨테이너에 할당 |
--link | 컨테이너끼리 연결 |
# 컨테이너 생성 (네트워크 지정 : mybridge)
docker container run -dit --name test2 --network mybridge centos:latest
# IP 주소 확인
docker container inspect test2 | grep IPAddress
172.72.0.2의 IP 주소는 설정한 서브넷에서 할당 되었다.
docker run -it --name test3 --network host centos:latest
--network host 옵션을 이용해서 호스트 IP 정보 그대로 공유하는게 가능하다.
이런 식이지만 충돌이 발생 가능하고 충돌 방지도 어렵다.
None 그대로 네트워크가 없으며 루프백만 존재한다.
# macvlan 생성
docker network create --driver macvlan\
--subnet 172.16.67.0/24\
--ip-range 172.16.67.64/26\
--gateway 172.16.67.1\
-o parent=ens33 macvlantest
# 백그라운드 1개
docker container run -dit --rm --name m1 --network macvlantest centos:latest
# IP 주소 확인
docker container inspect m1 | grep IPAddress
# 포그라운드 1개
docker container run -it --rm --name m2 --network macvlantest centos:latest