Docker compose 사용하여 프로젝트 배포

이성원·2024년 4월 1일
0

Docker compose 란

Docker Compose는 여러 컨테이너를 가지는 애플리케이션을 통합적으로 Docker 이미지를 만들고, 만들어진 각각의 컨테이너를 시작 및 중지하는 등의 작업을 더 쉽게 수행할 수 있도록 도와주는 도구이다.

사용 이유

여러 개의 컨테이너가 하나의 어플리케이션으로 동작할 때 도커 컴포즈를 사용하지 않는다면, 이를 테스트하려면 각 컨테이너를 하나씩 생성해야 한다.

즉, 아래와 같이 두개의 run 명령어를 입력해야된다.

$ docker run --name test -d  mysql...

$ docker run -d -p 8000:80  test...

이런 작업을 docker compose를 사용하면 각 컨테이너의 의존성, 네트워크, 볼륨 등을 함께 정의할 수 있다.

그래서 컨테이너의 수가 많아지면 정의해야 할 옵션이 많아지고, 정의해야 할 옵션이 많아진다면 도커 컴포즈를 사용하는 것이 좋다.

적용 방법

적용 방법은 간단하다. 필자는 미리 docker image를 docker hub에 올려두었다.

docker-compose.yml을 생성한 후, docker run 명령어를 작성하는 것처럼 version, services, networks, volumes 총 4개의 최상위 옵션을 적용해주면 된다.

docker-compose 내의 depends_on 옵션을 이용하여 각 서비스의 의존성을 주입할 수 있다.

하지만, 선행 컨테이너의 실행 여부는 보장하지만, 준비 여부는 보장하지 않는다. 때문에 entry point에서 shell 스크립트를 이용하여 실행 여부 확인이 필요하다.

현재 Docker-compose.yaml

현재 초기 Docker-compose의 구조는 아래와 같다.

version: '3.8'

services:
  neo4j:
    image: neo4j:latest
    container_name: neo4j-container
    ports:
      - "7474:7474"
      - "7687:7687"
    volumes:
      - $HOME/neo4j/data:/data
      - $HOME/neo4j/logs:/logs
      - $HOME/neo4j/import:/var/lib/neo4j/import
      - $HOME/neo4j/plugins:/plugins
    environment:
      NEO4J_dbms_security_procedures_unrestricted: "apoc.*"
      NEO4J_apoc_export_file_enabled: "true"
      NEO4J_apoc_import_file_enabled: "true"
      NEO4J_PLUGINS: '["apoc"]'
      NEO4J_AUTH: "[사용자 이름]/[비밀번호]"

  cwu-ai:
    image: 2swon/cwu-ai:latest
    container_name: cwu-ai-container
    ports:
      - "8000:8000"
    environment:
      NEO4J_URL: "bolt://neo4j:7687"
      NEO4J_USERNAME: "[사용자]"
      NEO4J_PASSWORD: "[비밀번호]"
      OPENAI_API_KEY: "[토큰]"
    depends_on:
      - neo4j

  cwu-front:
    image: 2swon/cwu-front:latest
    container_name: cwu-front-container
    ports:
      - "3000:3000"
    depends_on:
      - neo4j
      - cwu-ai

일단 초기 구조는 이렇게 진행을 했고 프리티어다보니 발생하는 메모리 문제는 차차 해결할 계획이다.

yaml파일을 작성하였으면 아래 명령어를 사용하여 백그라운드로 실행할 수 있다.

$ docker-compose up -d

필수 명령어

Foreground로 실행
$ docker-compose up

background로 실행
$ docker-compose up -d

프로젝트 이름 my-project로 변경하여 실행
$ docker-compose -p project up -d

프로젝트 내 컨테이너 및 네트워크 종료 및 제거
$ docker-compose down

프로젝트 내 컨테이너, 네트워크 및 볼륨 종료 및 제거
$ docker-compose down -v

프로젝트 내 서비스 로그 확인
$ docker-compose logs

프로젝트 내 컨테이너 목록
$ docker-compose ps
profile
개발자

0개의 댓글

관련 채용 정보