[파이썬] 도커 컨테이너와 호스트 간 로깅 설정

도커(Docker)는 애플리케이션을 컨테이너화하여 개발, 배포 및 실행할 수 있는 오픈소스 플랫폼입니다. 컨테이너는 격리된 환경에서 동작하기 때문에, 로그 파일을 컨테이너 내부에 저장하는 것이 일반적입니다. 하지만 때로는 컨테이너 내부로 들어갈 수 없는 이유로 로그 파일을 컨테이너 외부에 저장해야 할 때가 있습니다.

이번 글에서는 파이썬을 사용하여 도커 컨테이너와 호스트 간 로깅 설정하는 방법에 대해 알아보겠습니다.

1. 도커 컨테이너 설정

첫 번째로 해야 할 일은 도커 컨테이너에서 로그 파일을 생성하고 설정하는 것입니다. 다음은 간단한 파이썬 애플리케이션으로, 로그 파일을 생성하고 logging 모듈을 사용하여 로그를 기록하는 예시입니다.

import logging

# 로깅 설정
logging.basicConfig(
    level=logging.DEBUG,
    format='[%(asctime)s] %(levelname)s - %(message)s'
)

# 로그 파일 생성
logger = logging.getLogger('example')
file_handler = logging.FileHandler('/var/log/app.log')
logger.addHandler(file_handler)

# 로그 작성
logger.debug('This is a debug message')
logger.info('This is an info message')
logger.warning('This is a warning message')
logger.error('This is an error message')

위 코드에서는 로그 파일을 /var/log/app.log 경로에 생성하고, logging 모듈을 사용하여 로그를 작성합니다. 이 예시에서는 간단한 로깅 포맷을 사용했지만, 필요에 따라 포맷을 변경할 수 있습니다.

2. 호스트와 컨테이너 간 디렉토리 공유

다음으로 해야 할 일은 호스트와 컨테이너 간에 디렉토리를 공유하는 것입니다. 이를 통해 컨테이너 내부의 로그 파일을 호스트에서 읽을 수 있게 됩니다.

호스트와 컨테이너 간 디렉토리 공유는 도커의 volumes 기능을 사용합니다. 다음은 docker-compose.yml 파일을 사용하여 호스트와 컨테이너 간 디렉토리를 공유하는 예시입니다.

version: '3'
services:
  app:
    build: .
    volumes:
      - ./logs:/var/log

위 예시에서는 현재 디렉토리의 logs 폴더를 컨테이너의 /var/log 경로와 연결합니다. 이제 컨테이너에서 생성된 로그 파일은 호스트의 logs 폴더에 저장됩니다.

3. 호스트에서 로그 파일 읽기

마지막으로 해야 할 일은 호스트에서 컨테이너 내부의 로그 파일을 읽는 것입니다. 파이썬에서는 open 함수를 사용하여 파일을 읽을 수 있습니다. 다음은 호스트에서 컨테이너 내부의 로그 파일을 읽고 출력하는 예시입니다.

# 로그 파일 읽기
with open('logs/app.log', 'r') as file:
    lines = file.read().splitlines()
    for line in lines:
        print(line)

위 예시에서는 호스트의 logs 폴더에 저장된 app.log 파일을 읽고, 내용을 출력합니다. 필요에 따라 로그 파일의 내용을 파싱하여 원하는 형식으로 가공할 수도 있습니다.

이렇게 하면 도커 컨테이너와 호스트 간 로깅 설정을 파이썬을 사용하여 구현할 수 있습니다. 컨테이너 외부에 로그 파일을 저장하고 호스트에서 읽어들여 원하는 작업을 수행할 수 있습니다.