[파이썬] 도커 컨테이너와 호스트 간 네트워크 설정

도커(Docker)는 컨테이너 기반 가상화 플랫폼으로, 애플리케이션을 격리된 환경에서 실행하는 것을 가능하게 해줍니다. 이러한 컨테이너들은 호스트 시스템과 네트워크를 공유할 수 있으며, 잘 구성된 네트워크 설정은 애플리케이션 성능과 보안에 큰 영향을 줍니다.

이 포스트에서는 도커 컨테이너와 호스트 간의 네트워크 설정에 대해 알아보고, 파이썬을 사용해 어떻게 네트워크를 구성할 수 있는지 살펴보겠습니다.

네트워크 타입

도커는 기본적으로 3가지 타입의 네트워크를 제공합니다.

  1. 브리지 네트워크(Bridge Network): 도커가 자동으로 생성하는 가상 네트워크로, 호스트와 컨테이너 간 연결이 가능합니다. 이 네트워크에서는 각 컨테이너에 고유한 IP 주소가 할당됩니다.
  2. 호스트 네트워크(Host Network): 컨테이너가 호스트의 네트워크 인터페이스를 공유하는 방식입니다. 컨테이너가 호스트와 동일한 네트워크를 가지므로, 호스트의 모든 포트를 사용할 수 있습니다.
  3. 엔드포인트 네트워크(Endpoint Network): 기존의 네트워크에 연결된 컨테이너를 추가하는 방식입니다. 컨테이너 간 연결을 관리하는 네트워크로, 여러 컨테이너를 하나의 네트워크로 묶을 때 사용됩니다.

브리지 네트워크 설정

브리지 네트워크를 사용하는 경우, 도커는 컨테이너에게 자동으로 IP 주소를 할당합니다. 파이썬을 사용하여 컨테이너 내에서 IP 주소를 확인하는 방법을 알아봅시다.

import socket

def get_ip_address():
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    s.connect(("8.8.8.8", 80))
    ip_address = s.getsockname()[0]
    s.close()
    return ip_address

container_ip = get_ip_address()
print(f"Container IP address: {container_ip}")

위의 코드를 실행하면 컨테이너의 IP 주소를 얻을 수 있습니다. 이를 통해 컨테이너가 브리지 네트워크에 속해 있는지 확인할 수 있습니다.

호스트 네트워크 설정

호스트 네트워크를 사용하는 경우, 컨테이너는 호스트와 동일한 네트워크를 가집니다. 파이썬 프로그램 내에서 호스트의 IP 주소를 얻는 방법은 다음과 같습니다.

import socket

def get_host_ip_address():
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    s.connect(("8.8.8.8", 80))
    ip_address = s.getsockname()[0]
    s.close()
    return ip_address

host_ip = get_host_ip_address()
print(f"Host IP address: {host_ip}")

위의 코드를 실행하면 호스트의 IP 주소를 얻을 수 있습니다. 호스트 IP 주소는 컨테이너의 IP 주소와 동일하게 출력됩니다.

결론

이번 포스트에서는 도커 컨테이너와 호스트 간의 네트워크 설정에 대해 알아보았습니다. 브리지 네트워크와 호스트 네트워크의 설정 방법을 파이썬을 사용하여 살펴보았습니다. 좋은 네트워크 구성은 애플리케이션의 성능과 보안을 향상시키는 중요한 요소입니다.