도커에서 컨테이너의 포트를 노출하면 그 머신 외부에서 네트워크 레이어를 통해 해당 컨테이너로 들어가는 네트워크 경로가 생성됩니다. 이렇게 하면 다른 컨테이너들이 호스트로 나갔다가 해당 경로를 통해 다시 들어오면서 연결할 수 있습니다. 도커는 컨테이너 간의 연결을 제어하고 보안을 유지하며 원하는 방식으로 설정할 수 있는 광범위한 네트워킹 옵션을 제공합니다.
컨테이너 간의 통신
컨테이너는 격리된 상태에서도 서로 또는 외부와 상호 작용해야 합니다. 이러한 상호 작용은 컨테이너 간의 네트워킹을 통해 이루어질 수 있습니다. 이는 한 컨테이너의 애플리케이션이 다른 컨테이너의 포트를 통해 네트워크 연결을 설정하는 것을 의미합니다. 밑에 예제에서 두 개의 다른 컨테이너에서 우분투를 실행하고 포트를 정의하여 네트워크를 통해 통신하도록 하겠습니다.
docker network ls
기본적으로 세 개의 네트워크가 있습니다.
- bridge: 컨테이너가 다른 네트워크에 속하도록 지정하지 않으면 이 네트워크를 사용합니다. bridge 네트워크는 동일한 호스트의 컨테이너 간에 기본적인 통신을 제공합니다.
- host: 컨테이너 간에 네트워크 격리를 원하지 않을 때 사용합니다. 보안 문제를 일으킬 수 있습니다.
- none: 네트워크가 없습니다.
네트워크 생성하기
docker network crate ubuntu-net
ubuntu-net이라는 bridge 네트워크를 만들었습니다.
터미널을 2개를 연 뒤 한 터미널에 명령을 입력해야 ubuntu-net 네트워크를 가지는 컨테이너를 생성합니다.
docker run --rm -it --net ubuntu-net --name ubuntu1 ubuntu bash
다른 하나의 터미널에서도 동일한 명령이지만 name ubuntu2로 해서 만듭니다.
docker run --rm -it --net ubuntu-net --name ubuntu2 ubuntu bash
- --rm은 컨테이너를 중지하면 자동으로 컨테이너가 제거됩니다.
- -it는 인터랙티브 모드를 나타냅니다.
- --net으로 만든 네트워크를 설정할 수 있습니다.
- --name으로 컨테이너의 이름을 지정합니다.
이제 2개의 ubuntu 컨테이너가 실행중입니다.
nc 수신을 위한 패키지를 두 개의 컨테이너에 받습니다.
apt update
apt install netcat-traditional
ubuntu2가 수신할 포트를 지정하겠습니다. ubuntu2가 실행중인 터미널에서 다음 명령을 입력합니다.
nc -lp 1234
ubuntu1 컨테이너에서 연결합니다.
nc ubuntu2 1234
이 후 두 컨테이너는 네트워크 ubuntu-net의 포트 1234를 통해 연결됩니다. ubuntu1에서 입력한 내용을 ubuntu2에서 볼 수 있습니다.
이는 두 컨테이너 간의 데이터 공유가 네트워크를 통해 시작되었음을 의미합니다.
'Docker' 카테고리의 다른 글
[Docker] 브리지 네트워킹을 사용하는 방법 (0) | 2024.06.20 |
---|---|
[Docker] 포트 관리하기 (0) | 2024.06.19 |
[Docker] network 사용방법 (0) | 2024.06.19 |
[Docker] Swarm 명령 사용법-2 (0) | 2024.06.18 |
[Docker] Swarm 명령 사용법-1 (0) | 2024.06.18 |