TITEDIOS Dev Note

[Docker]#17 Volume - 데이터 유지 및 공유 가이드 본문

Docker

[Docker]#17 Volume - 데이터 유지 및 공유 가이드

TitediosKW 2024. 8. 29. 19:00
반응형


Docker는 컨테이너 기반의 가상화 기술로, 애플리케이션을 독립적으로 실행할 수 있게 해줍니다. 하지만 컨테이너는 기본적으로 비휘발성 저장소를 가지지 않기 때문에, 컨테이너가 종료되면 내부에서 생성된 데이터도 함께 사라집니다. 이러한 문제를 해결하기 위해 Docker에서는 지난 포스팅에서 알아본 볼륨(Volume)이라는 개념을 사용합니다. 이 포스팅에서는 Docker 볼륨을 사용한 데이터 유지 및 공유 방법에 대해 알아보겠습니다.


목차

1. Docker 볼륨이란?

2. 로그 저장 예제 파이썬 스크립트 작성

3. 도커 이미지 빌드

4. 컨테이너 실행 및 볼륨 마운트

5. 볼륨 관리를 위한 명령어

6. 호스트에 저장된 시스템 로그 확인

결론


1. Docker 볼륨이란?

Docker 볼륨은 컨테이너의 파일 시스템 외부에 있는 독립적인 저장소입니다. 이는 컨테이너가 삭제되더라도 데이터를 보존할 수 있게 해주며, 여러 컨테이너 간에 데이터를 공유하는 데에도 사용할 수 있습니다.

볼륨은 다음과 같은 특징을 가집니다:

  • 영속성: 컨테이너가 종료되거나 삭제되어도 볼륨은 남아 있습니다.
  • 독립성: 볼륨은 호스트 시스템에 위치하며, 컨테이너의 파일 시스템과 분리되어 있습니다.
  • 공유 가능성: 여러 컨테이너가 동일한 볼륨을 참조하여 데이터를 공유할 수 있습니다

2. 로그 저장 예제 파이썬 스크립트 작성

Docker 컨테이너에서 작성한 로그를 호스트 파일 시스템에 저장할 수 있도록 1초에 한번씩 로그를 쌓는 예제 컨테이너를 만들어 보겠습니다. 먼저 파이썬으로 1초에 한번씩 로그를 쌓는 파이썬 프로그램을 작성해 보겠습니다.

import time
import logging

def main():
    # 로그 설정
    logger = logging.getLogger("docker-test")                
    file_handler = logging.FileHandler('docker-test.log')
    logger.addHandler(file_handler) # 로그를 파일로 쌓을 수 있도록 설정
    logger.setLevel(logging.INFO)    

    logger.info("Docker test start!!!")

    for i in range(1000): # 1000초 동안 실행. 변경 가능
        time.sleep(1)
        logger.info(f"{i}s check") # 1초에 한번씩 로그를 기록
반응형

3. 도커 이미지 빌드

이제 이 파이썬 스크립트를 컨테이너에 적재할 이미지로 만들어 보겠습니다. 이미지를 만들기 위해 Dockerfile을 작성해야 합니다. Docker file을 생성하고 아래의 내용을 작성합니다.

FROM python:3.9-alpine # 테스트이므로 가벼운 이미지를 사용

WORKDIR /app # 작업 디렉토리 설정

COPY docker-test.py . # 우리가 작성한 파이썬 스크립트를 이미지로 복사

CMD ["python", "docker-test.py"] # 실행

도커 이미지로 만들기 위해서는 빌드를 해야합니다. docker-log-test:latest 라는 이름으로 빌드를 해보겠습니다.

docker build -t docker-log-test:latest .


빌드과정이 출력되고 빌드 후 이미지가 생성된 것을 확인하실 수 있습니다.


4. 컨테이너 실행 및 볼륨 마운트

볼륨을 생성하고 마운트를 해도 좋지만, 마운트를 하게 되면 Docker에서 볼륨을 자동으로 생성해 줍니다.

docker run -d \
--name docker-log-test-001 \
--mount source=my-volume,target=/app \
docker-log-test:latest


컨테이너가 잘 실행되었습니다. 다만, 마운트 정보는 보이지 않네요ㅠㅜ


5. 볼륨 관리를 위한 명령어

Docker는 볼륨을 관리하기 위한 여러 명령어를 제공합니다. 예를 들어, 다음 명령어로 모든 볼륨을 나열할 수 있습니다.

docker volume ls

특정 볼륨에 대한 자세한 정보를 확인하려면 다음 명령어를 사용할 수 있습니다.

docker volume inspect my-volume

더 이상 필요하지 않은 볼륨을 삭제하려면 다음 명령어를 사용합니다.

docker volume rm my-volume

6. 호스트에 저장된 시스템 로그 확인

위에서 확인한 볼륨 관리 명령어를 통해 시스템 로그를 확인할 수 있습니다.

# Docker 볼륨 확인
docker volume inspect my-volume
# Docker 볼륨의 마운트 위치에서 로그 확인(루트 권한 필요)
sudo cat /var/lib/docker/volumes/my-volume/_data/docker-test.log

  • 빨간색 박스: Docker 볼륨을 확인하고 마운트 위치를 확인
  • 파란색 박스: 마운트 위치에 로그가 잘 저장되어 있는지 확인
  • 노란색 박스: 실제 로그를 열어 로그가 잘 기록되었는지 확인

결론

Docker 볼륨은 데이터의 영속성과 공유를 위한 도구입니다. 볼륨을 통해 컨테이너가 종료되더라도 데이터를 유지할 수 있으며, 여러 컨테이너 간에 데이터를 손쉽게 공유할 수 있습니다. 이를 통해 Docker 환경에서의 데이터 관리를 효율적으로 수행할 수 있습니다. 볼륨을 활용하여 컨테이너화된 애플리케이션에서 데이터를 안전하게 저장하고, 필요에 따라 데이터를 공유해 보세요. Docker를 이용한 효율적인 데이터 관리에 큰 도움이 될 것입니다. 이번 포스팅에서는 로그를 이용하여 저장했지만 볼륨을 이용한 다양한 시나리오를 작성해 여러분만의 볼륨 활용 예제를 해보는 것도 도움이 될 것입니다.


도움이 되셨다면 공감 부탁드리겠습니다. 여러분의 공감이 정말 큰 힘이 됩니다.


감사합니다!

반응형