Docker 이미지 공유 및 다중 컨테이너 실행 가이드

KUKJIN LEE's profile picture

KUKJIN LEE2주 전 작성

🏗️ Docker에서 하나의 이미지로 여러 컨테이너 실행하기

Docker에서는 하나의 이미지(Image)를 기반으로 여러 개의 컨테이너(Container)를 실행할 수 있습니다.
예를 들어, MySQL 이미지 하나를 사용하여 여러 개의 MySQL 컨테이너를 실행할 수 있습니다.

 

이미지와 컨테이너의 개념 정리

 

개념

설명

이미지 (Image)

실행 가능한 프로그램과 설정을 포함한 '템플릿'

컨테이너 (Container)

이미지를 기반으로 실행되는 독립적인 환경

 
 

예제: MySQL 이미지로 여러 개의 컨테이너 실행

# 첫 번째 MySQL 컨테이너 실행
docker run --name mysql-container1 -e MYSQL_ROOT_PASSWORD=root -d mysql:latest

# 두 번째 MySQL 컨테이너 실행
docker run --name mysql-container2 -e MYSQL_ROOT_PASSWORD=root -d mysql:latest

이렇게 실행하면 같은 MySQL 이미지를 공유하면서, 각각 독립적인 MySQL 컨테이너가 실행됩니다.
하지만 기본적으로 컨테이너 간 데이터 및 네트워크는 격리되어 있습니다.

 

Docker 이미지와 컨테이너의 관계

📌 이미지가 컨테이너에서 어떻게 공유되는가?

  • Docker 이미지는 로컬 저장소(docker images)에 한 번 다운로드되면 계속 재사용됩니다.

  • 컨테이너를 실행할 때마다 이미지를 기반으로 독립적인 환경이 생성됩니다.

  • 컨테이너는 각각 개별적인 파일 시스템과 프로세스를 가짐 (기본적으로 격리됨).

🛠 이미지 공유 확인하기

docker images

위 명령어를 실행하면 다운로드한 MySQL 이미지가 목록에 표시됩니다.
이 이미지를 여러 개의 컨테이너에서 재사용할 수 있습니다.

 

컨테이너 간 네트워크 연결

컨테이너끼리 서로 통신하려면 네트워크 설정이 필요합니다.
예를 들어, mysql-container1mysql-container2가 같은 네트워크에서 통신

# 네트워크 생성
docker network create my-network

# 첫 번째 MySQL 컨테이너 실행 (네트워크 추가)
docker run --name mysql-container1 --network my-network -e MYSQL_ROOT_PASSWORD=root -d mysql:latest

# 두 번째 MySQL 컨테이너 실행 (같은 네트워크 사용)
docker run --name mysql-container2 --network my-network -e MYSQL_ROOT_PASSWORD=root -d mysql:latest

📌 컨테이너 간 MySQL 접속 테스트

이제 같은 네트워크에 있는 컨테이너끼리는 연결이 가능합니다.
예를 들어, mysql-container1에서 mysql-container2로 접속

mysql -h mysql-container2 -u root -p

데이터 유지 및 볼륨 마운트

Docker 컨테이너는 기본적으로 데이터를 유지하지 않습니다.
컨테이너가 삭제되면 내부 데이터도 사라지므로, 데이터를 유지하려면 볼륨(volume)을 사용해야 합니다.

📌 MySQL 컨테이너 실행 시 볼륨 마운트 추가

# 첫 번째 MySQL 컨테이너 실행 (볼륨 추가)
docker run --name mysql-container1 --network my-network \
  -e MYSQL_ROOT_PASSWORD=root \
  -v mysql-data1:/var/lib/mysql \
  -p 3307:3306 \
  -d mysql:latest

# 두 번째 MySQL 컨테이너 실행 (각각 독립적인 볼륨 사용)
docker run --name mysql-container2 --network my-network \
  -e MYSQL_ROOT_PASSWORD=root \
  -v mysql-data2:/var/lib/mysql \
  -p 3308:3306 \
  -d mysql:latest
하나의 Docker 이미지는 여러 개의 컨테이너에서 재사용 가능
각 컨테이너는 독립적으로 실행되며, 기본적으로 데이터와 네트워크는 격리됨
같은 네트워크에 속한 컨테이너끼리는 연결 가능 (docker network create)
데이터 유지를 위해 볼륨(volume) 마운트 필요 (-v mysql-data:/var/lib/mysql)
포트 매핑을 통해 외부에서도 MySQL에 접근 가능 (-p 3307:3306)

New Tech Posts