2장 Docker와 Docker Compose, Dockerfile과 Docker-compose.yaml은 무엇인가?


Docker 소개

Docker는 컨테이너를 생성하고 실행하는 도구입니다. 컨테이너는 응용 프로그램과 그 의존성을 하나의 단위로 묶어 배포하는 방법을 제공합니다. Docker는 응용 프로그램이 어디서 배포되든 동일한 의존성을 가질 수 있도록 격리된 환경을 생성합니다. 1장에서는 Docker로만 설정을 진행하였는데 Docker Compose를 활용해 명령어를 하나하나 치지 않고 파일로 한번에 설정하는 방법을 배워보고 각 용어의 차이점을 배워봅시다.

Dockerfile

Docker Compose 소개

Docker Compose는 다중 컨테이너 응용 프로그램을 정의하고 실행하는 도구입니다. YAML 파일을 사용하여 응용 프로그램의 서비스를 구성한 다음, 단일 명령으로 모든 서비스를 생성하고 시작할 수 있습니다. 이는 개발 워크플로우에서 특히 유용합니다.

Dockerfile이란?

Dockerfile은 Docker 이미지를 구축하기 위한 일련의 명령어를 담은 텍스트 파일입니다. 이 파일은 Docker 데몬이 실행하여 이미지를 생성합니다. Dockerfile은 기본 이미지를 포함하고, 호스트 시스템에서 컨테이너로 파일을 복사하고, 이미지와 관련된 명령어를 실행하는 등의 작업을 수행합니다. 예를 들어, 자바 애플리케이션을 실행하기 위한 Dockerfile을 생성할 수 있습니다​​​​​​.

docker-compose.yaml이란?

docker-compose.yaml 파일은 여러 Docker 컨테이너를 정의하고 실행하는 데 사용되는 YAML 형식의 구성 파일입니다. 이 파일을 통해 여러 컨테이너를 한 번의 명령으로 시작하고 중지할 수 있으며, 공통 파일 시스템이나 네트워크 설정과 같은 공통 객체를 정의할 수 있습니다. 예를 들어, MySQL 데이터베이스 서버와 웹 애플리케이션을 포함하는 docker-compose.yaml 파일을 작성할 수 있습니다​​​​​​.

주요 차이점

Dockerfile과 docker-compose.yaml 파일은 각각 다른 목적으로 사용됩니다. Dockerfile은 단일 Docker 이미지를 만드는 데 사용되며, docker-compose.yaml은 여러 컨테이너를 함께 정의하고 실행하는 데 사용됩니다.

Dockerfile은 주로 이미지를 빌드하는 데 사용되는 반면, docker-compose.yaml은 이미지를 기반으로 컨테이너를 실행하는 방법을 정의합니다. 예를 들어, Dockerfile을 사용하여 Nginx 기반의 커스텀 이미지를 만들 수 있고, docker-compose.yaml 파일을 사용하여 이 이미지를 실행하는 컨테이너의 여러 매개변수를 설정할 수 있습니다​​​.

  • Docker vs Docker Compose: Docker는 프로덕션 배포에 적합한 반면, Docker Compose는 개발 워크플로우에 이상적입니다. Docker Compose는 응용 프로그램의 의존성을 관리하는 데 도움이 되며, YAML 파일을 통해 간단히 시작할 수 있습니다.
  • 명령줄 대비 YAML 파일: Docker run은 전적으로 명령줄 기반인 반면, Docker Compose는 YAML 파일에서 구성 데이터를 읽습니다. Docker run은 한 번에 하나의 컨테이너만 시작할 수 있지만, Docker Compose는 여러 컨테이너를 구성하고 실행할 수 있습니다.

예시 코드

  • Dockerfile
  • Docker run: docker run -d --rm --name=my-website --cpus=1.5 --memory=2048m -p 80:80 -v ./website:/usr/share/nginx/html/ nginx:latest
  • docker-compose.yaml

docker-compose up -d --rm 명령으로 해당 설정에 따라 컨테이너를 시작할 수 있습니다.

결론

Docker와 Docker Compose는 각기 다른 사용 사례와 문제 영역을 대상으로 하는 다양한 도구를 제공합니다. Docker는 더 큰 유연성과 확장성이 필요할 때 좋은 선택이며, Docker Compose는 컨테이너를 처음 사용하는 경우 더 나은 옵션이 될 수 있습니다.