[Docker] Docker-compose를 써보자

Bulgogi-Pizza·2025년 1월 6일

웹 서버 구축

목록 보기
12/16

갑자기 왜?

Docker 컨테이너를 생성하다보니, 프로젝트 팀원과 함께 사용할 공용 공간이 있으면 좋겠다고 생각했다.

즉, NAS나 Cloud처럼 구성해서 외부에서 파일 시스템 관리가 쉽게 하고, Docker 컨테이너에서 해당 디렉토리를 공용 디렉토리로 마운트해 사용하면 편하겠다 싶었다.

그래서 현재 존재하는 컨테이너에 공용 디렉토리를 마운트하는 방법, 관리하는 방법을 찾다보니 Docker의 규모가 복잡해지고 관리할 컨테이너가 많아질수록 Docker-compose를 사용하는 것이 편리한 방법임을 알게 되었다.

그래서 일단 Docker compose를 구축하고 공용 디렉토리를 구축한 뒤 이어서 컨테이너를 다시 구축해보겠다.

Docker compose?

Docker Compose는 여러 Docker 컨테이너를 정의하고 관리하는 도구이다. 주로 docker-compose.yml이라는 파일을 통해 컨테이너의 설정(이미지, 볼륨, 네트웤, 환경 변수 등)을 선언적으로 작성하고, 이를 기반으로 컨테이너를 일괄적으로 생성, 시작, 중지, 삭제할 수 있다.

Docker compose 사용 이유

1. 다중 컨테이너 관리

  • 여러 컨테이너를 단일 명령으로 관리 가능하다.
  • 복잡한 설정도 docker-compose.yml 파일로 쉽게 정의할 수 있다.

2. 설정의 중앙화

  • 모든 컨테이너의 설정을 하나의 YAML파일에 정의하므로, 일관성 있고 유지 관리가 용이하다.

3. 간편한 실행

  • 명령어 하나(docker-compose up)로 프로젝트를 실행한다.
  • 컨테이너 간 네트워크 설정, 볼륨 공유 등도 자동으로 처리한다.

4. 환경 설정 분리

  • 개발, 스테이징, 프로덕션 환경별로 다른 설정 파일을 관리할 수 있다.
  • .env 파일을 사용해 환경 변수를 관리할 수 있다.

5. 이식성

  • docker-compose.yml만 있으면 동일한 환경을 다른 시스템에서도 쉽게 재현할 수 있다.

Docker Compose 설치

다음 명령어로 Docker를 설치한다.

sudo curl -L "https://github.com/docker/compose/releases/download/$(curl -s https://api.github.com/repos/docker/compose/releases/latest | grep -Po '"tag_name": "\K.*?(?=")')/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

docker-compose 패키지를 가져와 패키지 매니저로 설치하는 과정이 아니라, 바로 실행할 수 있는 bin 파일을 다운로드한 뒤 bin 폴더에 배치시켜 사용하는 방식인 것 같다.

아래 명령어로 설치를 확인한다.

docker-compose --version

Docker Compose 사용

docker-compose.yml 파일은 프로젝트 루트 디렉토리에 생성한다. 예를 들어 3개의 컨테이너(백엔드, 프론트엔드, 데이터베이스)를 구성한다고 하면 다음과 같다.

version: '3.8'

services:
  backend:
    image: openjdk:17-alpine
    container_name: backend
    ports:
      - "8080:8080"
    volumes:
      - ./bacnend/target:/app
    command: ["java", "-jar", "/app/app.jar"]
    
  frontend:
    image: nginx:alpine
    container_name: frontend
    ports:
      - "80:80"
    volumes:
      - ./frontend/build:/usr/share/nginx/html
      
  database:
    image: mysql:8.0
    container_name: database
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: mydb
      MYSQL_USER: myuser
      MYSQL_PASSWORD: mypassword
    volumes:
      - ./db_data:/var/lib/mysql

자주 사용되는 명령어는 다음과 같다.

#컨테이너 실행
docker-compose up -d

#컨테이너 중지
docker-compose down

#실행 중인 서비스 확인
docker-compose ps

#로그 확인
docker-compose logs

#특정 서비스만 실행
docker-compose up -d backend
profile
궁금증은 못참는 편, 궁금한 개발자

0개의 댓글