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

도커(Docker)는 컨테이너화된 애플리케이션을 실행하기 위한 오픈소스 플랫폼입니다. 도커 컨테이너는 가상화된 환경에서 독립적으로 실행되며, 애플리케이션의 개발, 배포, 관리를 간편하게 할 수 있습니다.

도커 컨테이너와 호스트 사이의 네트워크 설정은 애플리케이션의 원활한 작동에 중요한 역할을 합니다. 도커는 기본적으로 네트워크를 자동으로 설정하며, 호스트와의 통신을 제공합니다. 하지만 때로는 추가적인 네트워크 설정이 필요할 수 있습니다. 이번 포스트에서는 도커 컨테이너와 호스트 간의 네트워크 설정에 대해 알아보겠습니다.

호스트와 도커 컨테이너 간 상호 연결

도커 컨테이너와 호스트 간의 네트워크는 기본적으로 도커 가상 네트워크를 통해 연결됩니다. 이 가상 네트워크는 도커 시스템에 의해 자동으로 생성되며, 도커 데몬이 동작하는 호스트에서 관리됩니다.

도커 컨테이너에서 호스트로의 연결은 host라는 이름의 네트워크로 구성됩니다. 이 네트워크를 사용하면 컨테이너 내부에서 호스트의 IP 주소에 직접 연결할 수 있습니다.

import requests

response = requests.get('http://host:8000')

위의 예제에서 host는 호스트의 IP 주소이며, 8000은 호스트에서 동작하는 애플리케이션의 포트 번호입니다. 이를 통해 도커 컨테이너에서 호스트로 HTTP 요청을 보낼 수 있습니다.

컨테이너 간 네트워크 연결

때로는 도커 컨테이너 간에도 네트워크 연결이 필요할 수 있습니다. 이를 위해 도커는 다양한 네트워크 드라이버를 제공하며, 컨테이너 간의 통신을 쉽게 설정할 수 있습니다.

예를 들어, bridge 네트워크 드라이버를 사용하여 도커 컨테이너를 생성하고 연결할 수 있습니다.

import docker

client = docker.from_env()

network = client.networks.create('my_network', driver='bridge')

container1 = client.containers.run(
    'my_image',
    detach=True,
    networks=['my_network']
)

container2 = client.containers.run(
    'my_image',
    detach=True,
    networks=['my_network']
)

위의 예제에서 my_network라는 이름의 네트워크를 생성하고, my_image 이미지를 실행하는 두 개의 컨테이너를 생성합니다. 이 컨테이너는 동일한 네트워크에 연결됩니다. 이제 두 컨테이너는 동일한 네트워크 내에서 서로 통신할 수 있습니다.

컨테이너 포트와 호스트 포트 매핑

도커는 호스트와 컨테이너 간의 포트 매핑을 통해 외부와 통신할 수 있도록 제공합니다. 이를 통해 호스트의 특정 포트와 컨테이너의 포트를 연결할 수 있습니다.

import docker

client = docker.from_env()

container = client.containers.run(
    'my_image',
    detach=True,
    ports={'80/tcp': 8000}
)

위의 예제에서 my_image 이미지를 실행하는 컨테이너를 생성하고, 컨테이너의 80 포트를 호스트의 8000 포트에 매핑합니다. 이제 호스트에서 http://localhost:8000에 HTTP 요청을 보내면 컨테이너의 애플리케이션으로 연결됩니다.

결론

도커 컨테이너와 호스트 간 네트워크 설정은 애플리케이션의 통신을 원활하게 만들기 위해 중요한 부분입니다. 이번 포스트에서는 호스트와 도커 컨테이너 간의 연결, 컨테이너 간의 네트워크 연결, 포트 매핑에 대해 알아보았습니다. 도커의 다양한 네트워크 관련 기능을 적절히 활용하여 애플리케이션을 효율적으로 구성해보세요.