docker-compose.yml, Dockerfile

Fox·2024년 1월 30일
0
post-thumbnail

docker-compose.yml이란?

  • docker-compose.yml은 여러 컨테이너로 구성된 애플리케이션을 정의하고 실행하기 위한 도구이다.
  • 이 파일은 Dockerfile로 빌드된 이미지들을 어떻게 실행할지, 컨테이너 간의 네트워크 연결은 어떻게 할지, 볼륨은 어떻게 관리할지 등을 정의한다.
  • 여러 컨테이너의 설정을 한 곳에서 관리할 수 있어, 복잡한 애플리케이션을 좀 더 쉽게 배포하고 관리할 수 있게 해준다.
  • 개발, 테스트, 스테이징, 프로덕션 등 환경에 따라 다른 설정을 쉽게 적용할 수 있다.

주요 명령어

  • build: Dockerfile이 위치한 경로를 명시하거나, build context와 Dockerfile의 이름을 명시하는 데 사용된다.
  • image: 컨테이너가 실행될 때 사용할 이미지를 명시한다.
  • context: Dockerfile이 위치한 디렉토리의 경로를 설정한다.
  • dockerfile: Dockerfile의 이름을 설정한다.
  • ports: 호스트와 컨테이너 간에 포트를 연결하는 데 사용된다.
  • volumes: 호스트와 컨테이너 간에 볼륨을 공유하는 데 사용된다.
  • environment: 컨테이너에서 사용할 환경 변수를 설정하는 데 사용된다.
  • depends_on: 서비스 간의 의존성을 정의하는 데 사용된다.
  • restart: 컨테이너가 종료될 때 재시작 정책을 설정하는 데 사용된다.
  • command: 컨테이너가 시작될 때 실행할 명령어를 설정하는 데 사용된다.
  • links: 다른 서비스를 이 서비스에 연결하는 데 사용된다.

Dockerfile이란?

  • Dockerfile은 이미지를 빌드하기 위한 명세서로, 특정 애플리케이션을 실행하기 위한 환경을 구성한다.
  • 기본 운영 체제를 선택하고, 필요한 소프트웨어를 설치하며, 애플리케이션 코드를 추가하는 등의 단계를 포함한다.
  • 빌드 과정에서 필요한 모든 명령어를 담고 있으며, 이를 통해 컨테이너의 '청사진'이 된다.
  • 한 번 빌드된 이미지는 변경되지 않고 재사용 가능하여, 일관된 환경을 보장한다.

주요 명령어

  • FROM: 기반 이미지를 지정합니다. Docker 이미지는 이 FROM에 기반하여 생성된다.
  • LABEL: 이미지에 메타데이터를 추가한다.
  • RUN: 이미지를 생성하는 동안 셸 또는 명령어를 실행한다.
  • CMD: 컨테이너가 시작될 때마다 실행될 명령어를 지정한다.
  • ENTRYPOINT: 컨테이너가 시작될 때 실행될 명령어를 설정한다. CMD와 비슷하지만, ENTRYPOINT는 docker run에 추가적인 인수를 받을 수 있다.
  • COPY: 파일 또는 디렉토리를 이미지로 복사한다.
  • ADD: 파일, 디렉토리, 또는 원격 파일 URL을 이미지로 추가한다. 압축된 파일의 경우 압축 해제까지 수행한다.
  • ENV: 환경변수를 설정한다.
  • ARG: Dockerfile 내에서 사용될 변수를 정의한다.
  • EXPOSE: 네트워크 포트를 연다.
  • WORKDIR: 작업 디렉토리를 설정한다.
  • USER: RUN, CMD, ENTRYPOINT 명령어를 실행할 사용자를 설정한다.
  • VOLUME: 영구 데이터를 저장하는 디렉토리를 설정한다.

분리하는 이유

Dockerfile과 docker-compose.yml을 분리하는 주된 이유는 두 도구의 역할과 사용 목적이 다르기 때문이다.
각각의 도구는 컨테이너화된 애플리케이션을 구축하고 관리하는 데 있어 서로 보완하는 기능을 제공한다.

분리의 장단점

장점

모듈성:

  • 각 파일이 하나의 명확한 역할을 가지며, 이는 유지보수와 관리를 쉽게 만들어 준다.

재사용성:

  • Dockerfile로 생성된 이미지는 다양한 환경에서 재사용될 수 있다.
  • docker-compose.yml은 해당 이미지를 바탕으로 다양한 설정과 함께 여러 환경에 배포될 수 있다.

가독성:

  • 파일이 목적에 따라 분리되어 있어, 설정이 더 이해하기 쉽고 가독성이 좋다.

확장성:

  • 복잡한 애플리케이션을 구성할 때, docker-compose.yml 파일을 통해 여러 서비스를 손쉽게 관리하고 확장할 수 있다.

단점

복잡성:

  • 두 파일을 관리해야 하므로, 프로젝트의 복잡성이 증가할 수 있다.

초보자에게 어려움:

  • Docker에 익숙하지 않은 사용자에게는 두 파일 간의 차이점과 상호작용을 이해하는 데 어려움이 있을 수 있다.

분리하지 않을 때 장단점

장점

간소화:

  • 단일 Dockerfile에서 이미지 빌드와 컨테이너 설정을 모두 관리할 수 있으므로, 파일 구조가 간소화된다.

초보자 친화적:

  • 한 곳에서 모든 설정을 관리할 수 있으므로, Docker 초보자에게 이해하기가 더 쉬울 수 있다.

단점

유연성 부족:

  • 이미지 빌드와 컨테이너 구성이 하나의 파일에 묶여 있어, 다양한 환경이나 다른 설정을 적용하고자 할 때 유연성이 떨어질 수 있다.

재사용 어려움:

  • 이미지를 다른 컨텍스트에서 재사용하기가 더 어려울 수 있다.
  • 이미지와 컨테이너 설정이 혼재되어 있어 다른 프로젝트로의 이전이 복잡해진다.
profile
주니어개발자 Fox 입니다 🦊

0개의 댓글

관련 채용 정보