도커는 컨테이너화된 애플리케이션을 실행하기 위한 플랫폼으로, 가상화 기술을 사용하여 애플리케이션과 그 의존성을 격리시킵니다. 이러한 격리는 컨테이너와 호스트 간의 네트워크 통신도 포함됩니다. 도커 컨테이너와 호스트 간의 네트워크 설정을 통해 컨테이너 내부의 애플리케이션을 외부와 통신할 수 있도록 구성할 수 있습니다.
기본 네트워크 설정
도커는 기본적으로 호스트와 독립적인 네트워크를 생성하고, 여기에 컨테이너를 연결합니다. 컨테이너 간 및 컨테이너와 호스트 간의 통신은 이 기본 네트워크를 통해 이루어집니다.
도커가 설치된 호스트에서 실행 중인 도커 컨테이너의 IP 주소를 확인하려면 다음 명령을 사용할 수 있습니다:
docker inspect <container-name-or-id> | grep "IPAddress"
컨테이너 포트 매핑
도커 컨테이너는 호스트와 독립적인 IP 주소를 가지고 있으므로, 컨테이너 내부의 애플리케이션을 외부로 노출하기 위해서는 컨테이너의 포트와 호스트의 포트를 매핑해야 합니다.
docker run -p <host-port>:<container-port> <image-name>
위 명령은 호스트의 <host-port>
포트를 컨테이너의 <container-port>
포트로 매핑하여 컨테이너 내부의 애플리케이션을 호스트로 접근할 수 있도록 합니다. 예를 들어, 80번 포트로 들어오는 요청을 컨테이너의 8080번 포트로 전달하는 경우 다음과 같이 명령을 실행할 수 있습니다:
docker run -p 80:8080 <image-name>
컨테이너 간 네트워크 연결
여러 개의 도커 컨테이너가 있을 때, 이들 간에 네트워크 연결이 필요한 경우가 있습니다. 예를 들어, 웹 서비스 컨테이너와 데이터베이스 컨테이너가 있다고 가정해 봅시다. 웹 서비스 컨테이너에서 데이터베이스 컨테이너로의 통신은 컨테이너 이름을 기반으로 할 수 있습니다.
docker run --name web -p 80:8080 <web-image-name>
docker run --name db <db-image-name>
docker network connect bridge web
docker network connect bridge db
위 명령은 웹 서비스 컨테이너와 데이터베이스 컨테이너를 생성한 다음, 컨테이너 간의 네트워크 연결을 설정합니다. 이후 웹 서비스 컨테이너에서 db
라는 호스트 이름으로 데이터베이스에 접근할 수 있습니다.
컨테이너 외부 네트워크
기본적으로 도커 컨테이너는 호스트와 독립적인 네트워크를 사용하며, 호스트에서 시작한 다른 프로세스와 통신하는데 문제가 없습니다. 하지만 컨테이너에서 호스트의 네트워크 인터페이스를 사용하거나 다른 호스트와 통신해야 하는 경우에는 추가적인 설정이 필요합니다.
도커 컨테이너에서 호스트의 네트워크 인터페이스에 접근하려면 다음과 같이 명령을 실행할 수 있습니다:
docker run --net=host <image-name>
위 명령은 컨테이너를 호스트 네트워크에 연결하며, 컨테이너는 호스트와 동일한 네트워크 인터페이스를 사용할 수 있습니다.
결론
도커 컨테이너와 호스트 간의 네트워크 설정은 컨테이너 내부의 애플리케이션을 외부와 통신할 수 있도록 구성하는 중요한 단계입니다. 컨테이너 포트 매핑, 컨테이너 간 네트워크 연결, 그리고 컨테이너 외부 네트워크 설정 등을 통해 도커 환경에서 간편하고 안전한 네트워크 통신을 구축할 수 있습니다.