Docker ‐ Docker Compose를 활용해 컨테이너 관리하기 - dnwls16071/Backend_Study_TIL GitHub Wiki
📚 Docker Compose를 관리하는 이유
- Docker Compose란, 여러 개의 Docker 컨테이너들을 하나의 서비스로 정의하고 구성해 하나의 묶음으로 관리할 수 있게 도와주는 툴이다.
- Docker Compose를 사용하는 이유
- 여러 개의 컨테이너를 관리하는 데 용이하다.
- 복잡한 명령어로 실행시키던 걸 간소화 시킬 수 있다.
- 아래 명령어 하나만 입력하면 간단히 실행이 된다.
$ docker compose up
📚 Docker Compose CLI
services:
websever:
container_name: webserver
image: nginx
ports:
- 80:80
$ docker compose up # 포그라운드에서 실행한다.
$ docker compose up -d # 백그라운드에서 실행한다.
$ docker compose ps # compose.yml에 정의된 컨테이너 중에서 실행 중인 컨테이너만 보여준다.
$ docker compose ps -a # compose.yml에 정의된 모든 컨테이너를 보여준다.
$ docker compose logs # compose.yml에 정의된 모든 컨테이너의 로그를 모아서 출력한다.
$ docker compose up -d # 컨테이너 실행하기 전에 이미지 재빌드하는 과정을 포그라운드에서 실행한다.
$ docker compose up -d --build # 컨테이너 실행하기 전에 이미지 재빌드하는 과정을 백그라운드에서 실행한다.
$ docker compose pull # compose.yml에서 정의된 이미지를 다운받거나 업데이트 한다.
$ docker compose down # 전체 컨테이너를 종료한다.
📚 컨테이너로 실행시킨 Spring Boot가 MySQL에 연결이 안되는 이유 분석하기

- 호스트 컴퓨터 내부 각각의 컨테이너는 자신만의 네트워크 망과 IP주소를 가지고 있다.
- 호스트 컴퓨터 입장에서 localhost는 호스트 컴퓨터 자신을 가리키나 Spring Boot 컨테이너 입장에서 localhost는 Spring Boot 컨테이너를 가리킨다.
spring:
datasource:
url: jdbc:mysql://localhost:3306/mydb # 이 부분이 문제!
username: root
password: pwd1234
driver-class-name: com.mysql.cj.jdbc.Driver
- 여기서 yml에 명시된 localhost는 호스트 컴퓨터 내부의 Spring Boot 컨테이너를 가리킨다.
- 하지만 MySQL 컨테이너는 별도로 구축이 되어 있기 때문에 MySQL 서비스의 이름을 명시해야 한다.
- 따라서 아래와 같이 수정을 해야 한다.
services:
my-server:
build: .
ports:
- 8080:8080
depends_on:
my-db:
condition: service_healthy
my-db: # 이 서비스명이 컨테이너의 주소를 뜻한다. 해당 컨테이너의 IP 주소와 같은 역할을 한다.
image: mysql
environment:
MYSQL_ROOT_PASSWORD: pwd1234
MYSQL_DATABASE: mydb
volumes:
- ./mysql_data:/var/lib/mysql
ports:
- 3306:3306
healthcheck:
test: [ "CMD", "mysqladmin", "ping" ]
interval: 5s
retries: 10
spring:
datasource:
url: jdbc:mysql://mydb:3306/mydb
username: root
password: pwd1234
driver-class-name: com.mysql.cj.jdbc.Driver