본문 바로가기
가상화 기술과 관리/Docker

Docker 노트정리4 (docker-compose)

by so5663 2024. 2. 24.

도커 네트워크 생성 및 컨테이너 생성

docker network ls

docker network create fleetman-network

docker container run -d --network fleetman-network --name database -e MYSQL_ROOT_PASSWORD=password -e MYSQL_DATABASE=fleetman mysql:5

docker container run -d --network fleetman-network --name fleetman-webapp -p 80:8080 virtualpairprogrammers/fleetman-webapp

 

위에 방법을 docker compose로 하면 간단하게 할 수 있습니다.


// 실행안되면 직접 설치해야 함
docker-compose -v

 

docker compose 메뉴얼

https://docs.docker.com/compose/install/linux/#install-the-plugin-manually

 

docker compose 작성

version: "3"

services:

   fleetman-webapp:
      image: virtualpairprogrammers/fleetman-webapp
      networks:
         - fleetman-network
      ports:
         - 80:8080
      depends_on: 
         - database

   database:
      image: mysql:5
      networks:
         - fleetman-network
      environment:
         - MYSQL_ROOT_PASSWORD=password
         - MYSQL_DATABASE=fleetman

networks:
   fleetman-network:

 

위에 컨테이너 실행 명령어를 도커 컴포즈로 바꾼 모습입니다.

 

여기서 문제가 spring boot는 시작할때 database를 찾는데 database가 실행되지 않고 있으면
웹 어플리케이션은 작동되지않습니다.

deponds-on을 사용하면 데이터베이스 서비스보다 먼저 시작되도록 할 수 있습니다.

 

 다른 방법은 healthcheck 사용하는 방법입니다.

version: '3'
services:
  web:
    build: .
    depends_on:
      db:
        condition: service_healthy
  db:
    image: postgres
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres"]
      interval: 5s
      timeout: 5s
      retries: 5

강의에서는 version2에서만 healthcheck가 된다고 했는데 시간이 지나면서

version3에서도 지원을 하는 것 같습니다.

 

데이터베이스가 정상적으로 실행 중인지 확인하고,

웹 어플리케이션 컨테이너가 시작되기 전에 기다릴 수 있습니다.

 

도커 파일이 있는 경로에서

docker-compose up -d

 

기본이  docker-compose.yml으로 되어 있는데 만약에 이름을 바꾸고 싶으면 이 커맨드를 실행하면 됨

docker-compose -f your-docker-compose-file.yml up -d

 

 

docker-compose stop [서비스 이름]

docker-compose down

stop은 일시 중지 버튼과 비슷하게 동작하며, down은 중지 및 초기화 버튼처럼 동작합니다.

환경을 나중에 계속 사용하려면 stop을 선택하고,

전체 환경을 정리하고 새로 시작하려면 down을 선택하시면 됩니다.

 

 

출처 강의

https://www.udemy.com/course/docker-java-developer