-
docker-compose.yml 의 이용Docker 2025. 4. 3. 15:26
docker-compose.yml 를 사용하는 멀티 컨테이너 애플리케이션을 간단히 설명하고, 왜 docker-compose.yml 을 쓰는 것이 용이한지, 그리고 어떻게 사용하는지에 대해서 작성한 문서입니다.
docker-compose.yml 를 사용하는 때
docker-compose.yml 은 멀티 컨테이너 애플리케이션을 정의하고 실행하기 위해 사용되는 도구입니다.
멀티 컨테이너 애플리케이션은 애플리케이션이 여러 개의 컨테이너로 구성된 경우를 말합니다.
예를 들어서 프론트엔드(nginx) + 백엔드(Spring Boot) + 데이터베이스(PostgreSQL) 과 같은 구성의 애플리케이션이 존재한다면, 각각 3개의 컨테이너로 실행하게 되어 멀티 컨테이너 애플리케이션으로 불리게 됩니다.
docker-compose.yml 를 사용하는 이유
그리고 각각의 컨테이너를 실행시키기 위해 개발자는 CLI 에서
- 서비스(컨테이너) 실행
- 컨테이너 실행을 위한 설정
- 네트워크 설정
- etc...
실행에 필요한 부분들을 한줄한줄 작성합니다.
echo "서비스(컨테이너) 실행" docker run -d --name db postgres:latest docker run -d --naem app my-app:latest docker run -d --name web -p 8080:80 nginx:latest echo "네트워크 지정" docker network create my-network docker network connect my-network db docker network connect my-network app docker network connect my-network web echo "볼륨" docker volume create db-volume
*echo 는 shell 기반으로 작성한다고 생각하여, 문자열 출력값을 내보내는 부분입니다.
* -d 옵션은 백그라운드 실행(*가장 하단에 간단 작성)입니다.
그러나 이 방법은 휴먼 에러(오타 내기, 옵션 빠뜨리기)를 일으킬 확률이 높고, 문서화 되어 있지 않아 어떤 옵션을 달았는지 추후에 기억하기 어렵습니다.
이런 단점을 보완하기 위해 docker-compose.yml 파일 하나로 서비스, 네트워크, 볼륨을 자동으로 관리하고자 하는 것입니다.
docker-compose.yml 의 실제 이용
폴더 구조
/my-spring-app ├── src/ ├── build/ │ ├── libs/ │ │ ├── app.jar ├── Dockerfile ├── docker-compose.yml
Spring Boot 를 이용한 프로젝트를 생성하여 docker-compose.yml 을 해당 위치에 배치했습니다.
docker-compose.yml
IntelliJ IDEA 화면 IntelliJ IDEA 의 경우 관련 파일을 생성하면 Docker 아이콘이 붙습니다.
version: '3' services: app: build: context: . dockerfile: Dockerfile # Image를 생성하기 위한 스크립트가 모인 파일 ports: - "8080:8080" environment: SPRING_DATASOURCE_URL: jdbc:postgresql://db:5432/mydb SPRING_DATASOURCE_USERNAME: postgres SPRING_DATASOURCE_PASSWORD: mysecret depends_on: - db db: image: postgres:14 environment: POSTGRES_DB: mydb POSTGRES_USER: postgres POSTGRES_PASSWORD: mysecret ports: - "5432:5432" volumes: - my-postgres-data:/var/lib/postgresql/data # 해당 경로는 RDBMS 의 종류에 따라 다릅니다. adminer: image: adminer:latest ports: - "8081:8080" depends_on: - db # Adminer 웹 UI가 :8081 포트로 노출 # DB 연결 정보는 웹 UI에서 수동으로 입력 volumes: my-postgres-data:
Docker Desktop
docker-compose up -d
docker-compose.yml 이 존재하는 폴더 경로로 이동해 docker-compose 를 백그라운드 환경에서 실행시키면 db, app, web의 Image가 생성되고 컨테이너가 실행됩니다.
백그라운드 실행 명령어 -d
docker run -d
백그라운드 실행이란 터미널을 점유하지 않고 뒤에서 실행하도록 하는 것이다.
백그라운드 실행하지 않으면 로그가 실시간으로 출력되면서 터미널이 실행 상태로 유지된다. 이 경우, 출력 작업을 정지시키고자 한다면 Ctrl+C 단축키를 통해 프로세스 자체를 정지해야 합니다.
'Docker' 카테고리의 다른 글
왜 Dockerfile에서 Java 프로세스를 exec form으로 실행해야 하는가? (1) 2025.05.21