여러개의 Docker Container들을 하나의 서비스로 정의하고 구성해 하나의 묶음으로 관리할 수 있게 도와주는 툴이다.
이를 활용하면 여러개의 컨테이너를 동시에 관리할 수 있읍니다..
Docker CLI로 컨테이너를 실행시킬 때
$ docker run -d -p 8080:8080 --name web_server nginxxDocker Compose로 컨테이너를 실행시킬 때
1. compose.yml 작성services: #Docker compose에서 하나의 컨테이너를 service라고 한다 my_nginx_service: # 이 옵션은 서비스에 이름 붙이는 것임 container_name: web_server #container 이름 image: nginx #container를 실행시킬 때 어떤 이미지를 사용할지 ports: #포트매핑 설정 - 8080:8080
- compose 파일 실행
$ docker compose up -d
- compose 실행 현황 보기
$ docker compose ps $ docker ps
- compose로 실행된 컨테이너 종료 및 삭제
$ docker compose down
1. 간단한 springboot project 생성
localhost:8080 접속 시 hello, world 출력하는 프로젝트 생성!
2. application.yml에 DB, ridis 연결을 위한 정보 작성
spring: datasource: url: jdbc:mysql://my-db:3306/mydb username: root password: pwd1234 driver-class-name: com.mysql.cj.jdbc.Driver data: redis: host: my-cache-server port: 6379TroubleShooting
$ ./gradlew clean build
- test 코드 있는 거 삭제하거나 제대로 작성해야 에러가 안납니다.(삭제하는 거 추천)
(jar 파일 위치, ./gradlew clean build 하면 생김)
- docker compose를 활용하여 MySql, SpringBoot, Redis를 컨테이너로 올리면 위 사진처럼 구성도를 그릴 수 있습니다. 위에서 작성한 application.yml 파일은 spring boot가 올라간 컨테이너 안에 있는 파일입니다. 즉, 저 컨테이너의 3306, 6379번 포트는 springboot가 올라간 서버의 localhost가 아니게 되는 거다!
이를 위해 docker compose가 기능을 만들어뒀다
compose.yml에서 정의한 service의 이름으로 통신할 수 있는 기능이다.
즉, url: jdbc:mysql://my-db:3306/mydb 이 부분에서 my-db가 들어가고3. Dockerfile 작성
FROM openjdk:17-jdk COPY ./build/libs/spring_docker-0.0.1-SNAPSHOT.jar /app.jar ENTRYPOINT ["java", "-jar", "/app.jar"]4. compose.yml 작성
services: my-server: build: . ports: - 8080:8080 depends_on: my-db: condition: service_healthy my-cache-server: condition: service_healthy my-db: 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 my-cache-server: image: redis ports: - 6379:6379 healthcheck: test: [ "CMD", "redis-cli", "ping" ] interval: 5s retries: 105. 프로젝트 build && Docker compose 실행
$ ./gradlew clean build $ docker compose up -d --build
- --build : compose.yml에 정의된 모든 서비스의 이미지를 강제로 다시 빌드시키는 옵션이다.