- 비전공자도 이해할 수 있는 Docker 입문/실전 (박재성)
- #1. Docker 기본 개념
- #2. Docker 기본 CLI
- #3. Docker Volume
- #4. Dockerfile
- #5. Docker Compose
- #6. Docker Compose - 예제 (해당 글)
MySQL, Redis 컨테이너 동시에 띄워보기
Docker Compose
- 여러 개의 Docker 컨테이너들을 하나의 서비스로 정의하고 구성해 하나의 묶음으로 관리할 수 있게 도와주는 툴.
- 컨테이너 여러 개를 동시에 띄우는 경우에 사용.
- 실행할 때 작성한 복잡한 명령어를 간소화시킬 수 있음.
services:
my-db:
image: mysql
environment:
MYSQL_ROOT_PASSWORD: 1234
volumes:
- ./mysql_data:/var/lib/mysql
ports:
- 3306:3306
my-cache-server:
image: redis
ports:
- 6379:6379
- 컨테이너 이름 규칙
- <현재 디렉토리명>_<서비스명>_1
- 예시 : myproject_my-db_1
- <현재 디렉토리명>_<서비스명>_1
- 컨테이너 이름을 직접 지정하고 싶다면?
- 아래처럼 container_name 옵션을 사용하면 원하는 이름으로 직접 지정할 수 있다.
services:
my-db:
container_name: my-mysql
...
Spring Boot, MySQL, Redis 컨테이너 동시에 띄워보기
- 각각의 컨테이너는 자신만의 네트워크망과 IP 주소를 가지고 있다. 호스트 컴퓨터 입장에서 localhost는 호스트 컴퓨터를 가리키지만, Spring Boot 컨테이너 입장에서 localhost는 Spring Boot 컨테이너를 가리킨다.
# application.yml
spring:
datasource:
url: jdbc:mysql://my-db:3306/mydb # docker-compose.yml 파일에 정의된 서비스 이름
username: root
password: pwd1234
driver-class-name: com.mysql.cj.jdbc.Driver
data:
redis:
host: my-cache-server # docker-compose.yml 파일에 정의된 서비스 이름
port: 6379
- 동일한 Docker Compose 네트워크 내에서 한 컨테이너가 다른 컨테이너와 통신하기 위해 '도커 컴포즈 파일에서 서비스명 지정한 걸로 각 컨테이너끼리 통신'
- Docker Compose는 내부 DNS를 통해 서비스 이름을 컨테이너 IP 주소로 매핑합니다. 따라서 컨테이너들은 localhost 대신 서비스 이름으로 서로를 쉽게 찾아 통신할 수 있다. 각 컨테이너는 각자의 네트워크를 가지고 있기 때문에, localhost가 아니라 Redis가 실행되고 있는 컨테이너로 통신을 해야 한다.
- 그리고 compose.yml 파일은 아래와 같이 설정해준다.
# compose.yml
services:
my-server: # 서비스명
build: .
ports:
- 8080:8080
depends_on: # 아래 두 컨테이너가 생성되고 healthy 하다고 판단 될 때, 해당 컨테이너를 생성한다.
my-db:
condition: service_healthy
my-cache-server:
condition: service_healthy
my-db:
image: mysql
environment:
MYSQL_ROOT_PASSWORD: 1234
MYSQL_DATABASE: mydb # MySQL 최초 실행 시 mydb라는 데이터베이스를 생성해준다.
volumes:
- ./mysql_data:/var/lib/mysql
ports:
- 3306:3306
healthcheck:
test: [ "CMD", "mysqladmin", "ping" ] # MySQL이 healthy 한 지 판단할 수 있는 명령어
interval: 5s # 5초 간격으로 체크
retries: 10 # 10번까지 재시도
my-cache-server:
image: redis
ports:
- 6379:6379
healthcheck:
test: [ "CMD", "redis-cli", "ping" ]
interval: 5s
retries: 10
'Docker' 카테고리의 다른 글
[Docker] Docker Compose -p 옵션 (0) | 2025.06.18 |
---|---|
[Docker] dockerd / docker.socket (0) | 2025.06.15 |
[Docker] Docker Compose (도커 강의 정리 #5) (0) | 2025.05.08 |
[Docker] Dockerfile (도커 강의 정리 #4) (0) | 2025.04.30 |
[Docker] Docker Volume (도커 강의 정리 #3) (0) | 2025.04.23 |