05 Docker Compose
05 Docker Compose
1. Docker Compose
1. Docker Compose
- 여러 개의 컨테이너로 이루어진 복잡한 애플리케이션을 한 번에 관리할 수 있게 해줌
- 여러 컨테이너를 하나의 환경에서 실행하고 관리 하는 툴(☆)
2. 사용하는 이유
- 여러 개의 컨테이너로 이루어진 복잡한 애플리케이션을 하나의 환경에서 실행하고 관리 하게함.
- 복잡한 명령어로 실행시키던 걸 간소화 시킬 수 있음
2. 흐름
1. 생성
- 파일명 : compose.yml // 최상위에
- 내용
- compose방식
1 2 3 4 5 6
services: # compose 파일 내에서 서비스를 식별하기 위한 이름 my-web-server: # 컨테이너에 붙이고 싶은 이름, 서비스의 이름을 붙이는 기능 container_name: web-server # 컨테이너를 띄울 때 붙이는 별칭이다. CLI에서 --name web-server 역할과 동일 image: nginx # 어떤이미지? ports: - 80:80 # 포트 - 기존방식 :
docker run --name webserver -d -p 80:80 nginx
- compose방식
2. 실행 / 종료
- yml파일의 위치에서 실행
1
docker compose up -d
- 종료
1
docker compose down
3. 명령어 구분
1. docker compose up
- compose.yml 경로에서 하면 compose.yml에 설정한 컴포즈를 실행함.
-d는 백그라운드--build이미지를 다시 빌드해서 실행시켜야할때
2. docker compose down
3. docker compose ps
docker ps는 실행중인 전체 컨테이너docker compose ps는 compose.yml에서 실행한 컴포즈중, 실행중인 것만.-a전체 보는 것도 가능
4. docker compose logs
- 로그 보기
5. docker compose pull
- image의 업데이트가 필요한 경우 사용함.
- 기본적으로는 설치되어있는 이미지를 사용함.
4. 예시
1. redis
1
2
3
4
5
services:
my-cache-server:
image: redis
ports:
- 6379:6379
2. MySQL
1
2
3
4
5
6
7
8
9
services:
my-db:
image: mysql
environment:
MYSQL_ROOT_PASSWORD: pwd1234 # 환경은 여기에
volumes:
- ./mysql_data:/var/lib/mysql # 볼륨 설정
ports:
- 3306:3306
3. SpringBoot
1
2
3
4
5
services:
my-server:
build: . # 기존에 작성한 Dockerfile로 실행을 하고, 그리고 그 위치가 compose위치를 기준으로 상대경로를 작성
ports:
- 8080:8080
5. 다중 컨테이너 동시에 띄우기
1. mysql + redis
1
2
3
4
5
6
7
8
9
10
11
12
13
services:
my-db:
image: mysql
environment:
MYSQL_ROOT_PASSWORD: pwd1234
volumes:
- ./mysql_data:/var/lib/mysql
ports:
- 3306:3306
my-cache-server:
image: redis
ports:
- 6379:6379
2. SpringBoot + mysql
- 체크포인트
- 스프링부트가 먼저 실행이 되면, DBSource가 연결이 안되서 오류가 발생함. 따라서 db가 먼저 올라와야하는 상황
- 스프링부트에서 localhost 대신 컨테이너의 이름을 입력해야 연결이됨.(☆☆☆☆☆)
1 2 3 4 5 6 7
spring: datasource: # localhost를 하는경우 스프링컨테이너 내부에서의 3306을 찾는 상황이됨. url: jdbc:mysql://my-db:3306/mydb username: root password: pwd1234 driver-class-name: com.mysql.cj.jdbc.Drive
- Compose.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
services:
my-server:
build: .
ports:
- 8080:8080
# my-db의 컨테이너가 생성되고 healthy 하다고 판단 될 때, 해당 컨테이너를 생성한다.
depends_on:
my-db:
condition: service_healthy
my-db:
image: mysql
environment:
MYSQL_ROOT_PASSWORD : pwd1234
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번까지 재시도
This post is licensed under CC BY 4.0 by the author.