docker 데이터 공유Docker 폴더 마운트Docker 공유폴더도커 볼륨 공유Docker Desktop 파일 공유

Docker를 활용한 데이터 통합(공유)

KUKJIN LEE
KUKJIN LEE
2024년 8월 8일
184

분산된 마이크로서비스 아키텍처에서 다양한 서비스들이 동일한 데이터를 접근하거나 공유하는 상황이 빈번히 발생합니다. Docker를 활용하여 컨테이너 간 데이터를 효율적으로 공유하는 방법과 데이터베이스 공유와의 차이점에 대해 설명하겠습니다.

 

언제 사용하면 좋을까?

컨테이너 간 데이터 공유가 필요한 경우!!

 

1. 컨테이너 간 데이터 공유 개요

컨테이너 간 데이터 공유는 여러 컨테이너가 동일한 데이터에 접근할 수 있도록 하는 방법입니다. 이를 통해 서로 다른 컨테이너에서 동일한 데이터를 읽고 쓸 수 있습니다. Docker 볼륨을 활용하면 데이터의 지속성을 보장하고 컨테이너 간에 쉽게 데이터를 공유할 수 있습니다.

 

2. 데이터 공유 시나리오

예시: kakao.gg에서의 컨테이너 간 데이터 공유
  1. 서버1(컨테이너1): 음식점 정보를 다루는 서비스

  2. 서버2(컨테이너2): 카페 정보를 다루는 서비스

  3. 데이터 공유 필요성: 서버2가 서버1의 데이터를 가져와 사용자에게 추천 음식점을 보여줍니다.

 

3. Docker를 활용한 데이터 공유 방법

Docker 볼륨을 사용하여 컨테이너 간 데이터를 공유할 수 있습니다. 여러 컨테이너가 동일한 볼륨을 마운트하면, 이 볼륨을 통해 데이터를 읽고 쓸 수 있습니다.

 

데이터 공유 설정 방법
  1. Docker 볼륨 생성

docker volume create shared_data
  1. 컨테이너 실행 시 볼륨 마운트

docker run -d --name server1 -v shared_data:/app/data my_server1_image
docker run -d --name server2 -v shared_data:/app/data my_server2_image

여기서 shared_data 볼륨은 두 컨테이너 모두에 마운트되어 있습니다. 이로 인해, 서버1이 데이터를 작성하면 서버2가 해당 데이터를 읽을 수 있습니다.

 

4. 데이터베이스 공유와의 차이점

데이터베이스가 공유되는 경우, 모든 컨테이너가 동일한 데이터베이스에 접근할 수 있기 때문에 별도의 데이터 공유 메커니즘이 필요하지 않을 수 있습니다. 예를 들어, MySQL이나 MongoDB와 같은 데이터베이스를 사용하는 경우, 각 컨테이너가 동일한 데이터베이스 인스턴스에 접근하여 데이터를 읽고 쓸 수 있습니다.

 

예시

Docker를 사용하는 시나리오

  1. 서버1 컨테이너: docker run -d --name server1 myapp:latest

    • 이 컨테이너는 애플리케이션 서버1을 실행하며, 데이터베이스1에 접근합니다.

  2. 서버2 컨테이너: docker run -d --name server2 myapp:latest

    • 이 컨테이너는 애플리케이션 서버2를 실행하며, 데이터베이스1에 접근합니다.

  3. 데이터베이스 컨테이너: docker run -d --name database1 -e MYSQL_ROOT_PASSWORD=root mysql:latest

    • 이 컨테이너는 MySQL 데이터베이스를 실행하며, 서버1과 서버2 컨테이너가 접근합니다.

데이터베이스 접근 방식

  • 서버1: db.connect('database1:3306')

    • 서버1 컨테이너는 데이터베이스1 컨테이너의 주소를 통해 데이터베이스에 연결합니다.

  • 서버2: db.connect('database1:3306')

    • 서버2 컨테이너도 동일하게 데이터베이스1에 연결합니다.

 

데이터베이스1만 사용한다고 가정해서 이해가 어렵다면, 아래를 확인해주세요.

애플리케이션 서버 컨테이너 실행

서버1과 서버2를 각각 컨테이너로 실행하고, 환경 변수를 통해 각 데이터베이스에 연결할 수 있도록 설정합니다. 각 서버가 데이터베이스와 유연하게 연결할 수 있습니다.

# 서버1 컨테이너 실행 (데이터베이스1과 데이터베이스2 둘 다 연결)
docker run -d --name server1 --network mynetwork -e DB1_HOST=database1 -e DB2_HOST=database2 myapp:latest

# 서버2 컨테이너 실행 (데이터베이스1과 데이터베이스2 둘 다 연결)
docker run -d --name server2 --network mynetwork -e DB1_HOST=database1 -e DB2_HOST=database2 myapp:latest

# 서버3 컨테이너 실행 (데이터베이스2만 연결)
docker run -d --name server3 --network mynetwork -e DB2_HOST=database2 myapp:latest

 

여러 서비스가 동일한 데이터를 필요로 하는 경우, Docker 볼륨을 통해 데이터를 통합 관리할 수 있습니다. 예를 들어, 주문 관리 서비스와 재고 관리 서비스가 동일한 재고 데이터를 공유할 수 있습니다.

#docker 데이터 공유#Docker 폴더 마운트#Docker 공유폴더#도커 볼륨 공유#Docker Desktop 파일 공유#backend