Docker 컨테이너와 서비스가 강력한 이유 중 하나는 컨테이너와 서비스를 서로 연결하거나 도커가 아닌 워크로드에 연결할 수 있기 때문입니다.
Docker 컨테이너와 서비스는 Docker에 배포되었다는 사실이나 해당 피어가 Docker 워크로드인지 여부를 알 필요조차 없습니다.
Docker 호스트가 Linux, Windows 또는 이 두 가지를 혼합하여 실행되는지 여부에 관계없이 Docker를 사용하여 플랫폼에 구애받지 않고 네트워크를 관리할 수 있습니다.
Docker의 네트워킹 서브시스템은 드라이버를 사용하여 플러그할 수 있습니다. 기본적으로 다음과 같은 드라이버가 존재하며 핵심 네트워킹 기능을 제공합니다
bridge
호스트
오버레이
IPvlan
맥블랜
none
네트워크 플러그인
컨테이너는 오로지 IP주소, 게이트웨이, 라우팅 테이블, DNS 서비스, 그리고 다른 네트워킹 세부 정보가 있는 네트워크 인터페이스만 볼 수 있습니다.
즉, 컨테이너는 자신이 어떤 네트워크에 붙었는 지 알 수 없습니다.컨테이너 관점의 네트워킹에 대해서 알아보겠습니다.
docker create
또는 docker run
명령어를 사용하여 컨테이너를 생성하거나 실행하는 경우, 컨테이너는 기본적으로 자신의 포트를 노출하지 않습니다.
외부 서비스가 포트를 사용할 수 있도록 하기 위해서 또는 다른 네트워크에서 도커 컨테이너가 실행되도록 하기 위해서는 --publish
또는 -p
플래그를 사용해야만 합니다.
이를 통해 컨테이너 내부에 방화벽 규칙이 생성되어, 컨테이너 포트가 외부와 연결되는 Docker 호스트의 포트에 매핑됩니다.
Flag value | Description |
---|---|
-p 8080:80 | 컨테이너의 TCP 80 포트 를 도커 호스트 8080 포트와 매핑 |
-p 192.168.1.100:8080:80 | 컨테이너의 TCP 포트 80 를 호스트 IP 192.168.1.100 에 연결하기 위한 Docker 호스트의 포트 8080 에 매핑 |
-p 8080:80/udp | 컨테이너의 UDP 포트 80 을 Docker 호스트의 포트 8080 에 매핑 |
-p 8080:80/tcp -p 8080:80/udp | 컨테이너의 TCP 포트 80 을 Docker 호스트의 TCP 포트 8080 에 매핑하고, 컨테이너의 UDP 포트 80 을 Docker 호스트의 UDP 포트 8080 에 매핑 |
기본적으로 컨테이너는 연결되는 모든 Docker 네트워크에 대해 IP 주소를 얻으며, 연결한 네트워크의 IP 풀에서 IP 주소를 받습니다. Docker 데몬은 각 컨테이너에 대해 DHCP 서버 역할을 효과적으로 수행합니다. 각 네트워크에는 기본 서브넷 마스크와 게이트웨이도 있습니다.
컨테이너가 시작되면 --network
플래그를 사용하여 단일 네트워크에만 연결할 수 있습니다. 도커 네트워크 연결 명령을 사용하여 실행 중인 컨테이너를 여러 네트워크에 연결할 수 있습니다.
network
플래그를 사용하여 컨테이너를 시작할 때 --ip
또는 --ip6
플래그를 사용하여 해당 네트워크에 있는 컨테이너의 IP 주소를 지정할 수 있습니다.
도커 네트워크 연결을 사용하여 기존 컨테이너를 다른 네트워크에 연결하는 경우, 해당 명령의 --ip
또는 --ip6
플래그를 사용하여 추가 네트워크에 있는 컨테이너의 IP 주소를 지정할 수 있습니다.
같은 방식으로 컨테이너의 호스트 이름은 기본적으로 Docker에서 컨테이너의 ID가 됩니다.
호스트 이름은 --hostname
을 사용하여 재정의할 수 있습니다.
도커 네트워크 연결을 사용하여 기존 네트워크에 연결할 때 --alias
플래그를 사용하여 해당 네트워크에서 컨테이너의 추가 네트워크 별칭을 지정할 수 있습니다.