| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| 29 | 30 | 31 |
- 장고 기초 강의
- cpp
- C언어
- 에어플로우 기초강의
- mlops
- 도커
- 개발언어
- 예제프로젝트
- Django
- 인공지능
- airflow
- 도커 컴포즈
- 파이썬강의
- ADP
- 장고
- 프로그래밍
- 쇼핑몰예제
- c++
- Python
- 플라스크
- 개발자취업
- 장고 튜토리얼
- 웹개발
- docker
- 파이썬 장고
- 개발자
- c
- flask
- 파이썬
- 기초강의
- Today
- Total
TITEDIOS Dev Note
[Docker]#17 Volume - 데이터 유지 및 공유 가이드 본문
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를 이용한 효율적인 데이터 관리에 큰 도움이 될 것입니다. 이번 포스팅에서는 로그를 이용하여 저장했지만 볼륨을 이용한 다양한 시나리오를 작성해 여러분만의 볼륨 활용 예제를 해보는 것도 도움이 될 것입니다.
도움이 되셨다면 공감 부탁드리겠습니다. 여러분의 공감이 정말 큰 힘이 됩니다.
감사합니다!
'Docker' 카테고리의 다른 글
| [Docker]#19 도커 컴포즈(docker compose) - 개념 정리 (1) | 2024.09.02 |
|---|---|
| [Docker]#18 Docker 데이터 백업 - Volume 의 활용 방법 및 가이드 (0) | 2024.08.30 |
| [Docker]#16 Volume - 볼륨과 마운트, 데이터 보존 방법 (2) | 2024.08.28 |
| [Docker]#15 Docker network - 도커 네트워크 기초 강의 (1) | 2024.08.27 |
| [Docker]#14 Dockerfile - 이미지 빌드 및 최적화 방법 (1) | 2024.08.26 |