반응형

지난 포스트에서 DockerCompose에 대해 알아보았는데요, Docker Compose를 사용하기 위해서 docker-compose.yml 파일이 어떻게 활용되는지, YAML파일에서 발견할 수 있는 주요 지침에 대해 알아보도록 하겠습니다.


Docker Compose File

docker-compose.yml 파일에 모든 서비스를 정의하게 됩니다. 서비스는 즉 실행될 웹 인스턴스나 프레임워크, 노드가 될 수도 있고 PHP가 될 수도 있습니다. 물론 데이터베이스나  캐싱 서비스 일부 응용 프로그램 서버 서비스 등이 될 수 있습니다.

docker-compose.yml파일은 그 자체로는 일반 텍스트 파일 이지만 docker-compose의 빌드 프로세스를 통해 실행할 수 있습니다. 그리고 이 빌드 프로세스는 실제로 이미지를 생성할 수 있으며 이 미지를 실행하면 컨테이너를 만들 수 있습니다. docker-compose의 빌드 프로세스는 docker 커맨드 중에서도 매우 간단한 편에 속합니다. 명령어는 차후에 알아보도록 하겠습니다.

이 docker-compose.yml은 어떻게 구성되어 있을까요?

docker compose파일의 맨 위에 항상 표시되는 것은 버전 정보입니다.

만약 Github 또는 웹 어딘가에서 맨 위에 버전이 없다면 아마도 이전 docker compose 버전일 것입니다. docker-compose의 초기 버전에는 버전이 없었지만 이제는 맨 위에 있어야 합니다.

그리고 대부분 서비스를 정의하게 됩니다.

이제 이 sevices에 docker-compose.yml를 빌드하게 되면 실행하려는 서비스들을 기술하는데 예를들어 Node.js나 ASP.NET, Java 혹은 PHP 등이 이곳에 들어가게 됩니다. 또한 이러한 서비스를 정의하기 위한 다양한 옵션이 존재하게 됩니다.

 

Docker Compose 서비스를 정의하기 위한 옵션들

build : 일부 구성 옵션에는 빌드 컨텍스트와 같은 항목이 포함되기도 합니다. "build" 옵션을 사용하면 어떤 폴더를 빌드하고 서비스를 빌드하는데 특정 Docker파일을 사용하겠다고 구체적으로 정의하게 됩니다.

environment : 환경변수를 정의할 수 있으며 이러한 환경변수는 런타임에 실행 중인 서비스 컨테이너에 자동으로 넣을 수 있습니다. 예를 들면 개발환경과 프로덕션 환경 간에 전환하고 앱의 처리를 확인할 때 환경변수를 활용할 수 있습니다.

image : 이미지를 빌드하지 않고 이미 Docker Hub에 상위 이미지가 있고 이를 서비스로 사용하고 싶을 수도 있습니다.

networks : 주어진 서비스를 정의된 네트워크와 연결하게 해줍니다. 예를 들어 노드와 몽고 디비를 연결하는 것 같이 런타임에 도커 컨테이너에서 연결처리가 가능합니다.

ports : 각 서비스의 포트 정의합니다. volumes: 로컬 개발 머신의 소스코드를 볼륨으로 정의하여 볼륨을 컨테이너에 연결할 수 있습니다.

 

 

이제 예시를 살펴보도록 하겠습니다.

docker-compose.yml 예시

맨위는 버전을 표시하고 있습니다. services로 서비스를 정의한다고 적어주고 있습니다.

첫 번째 서비스로 node라는 서비스를 정의하고 있고 build아래에 사용자 지정 빌드를 가질 거라고 알려주고 있습니다. context . 로 컨텍스트는 현재 폴더라고 지정하고 있습니다. 그리고 빌드할 때 참고로 할 도커 파일을 정해주고 있습니다. networks에서는 이 서비스에서 사용할 네트워크를 지정하고 있습니다.

두 번째 mongodb 서비스의 경우 Docker파일에서 빌드하지 않고 DockerHub에 있는 Mongo 이미지를 사용하게 됩니다. 그리고 노드와 동일한 네트워크인 nodeapp-network를 추가하고 있습니다.

세 번째는 네트워크를 정의하고 있습니다. 예제의 경우는 nodeapp-network라는 단일 네트워크를 정의한 다음 브리지 유형의 드라이버를 지정하고 있습니다.

 

YAML형식을 처음 접하면 XML이나 JSON과는 매우 다르다는걸 알 수 있습니다. docker-compose.yml역시 YAML형식으로 들여 쓰기를 하여 파일을 작성하고 있음을 알 수 있습니다. 사실 들여 쓰기가 매우 중요합니다. yaml의 좋은 점은 태그를 닫는 걱정을 할 필요가 없다는 것입니다. 또한 JSON에서와 같이 괄호를 닫을 걱정을 안 해도 됩니다.

 

이제 위 파일을 가지고 docker compose 명령어를 내리면, node서비스 mongodb서비스를 작동시킬 수 있고 두 서비스가 모두 묶여있는 네트워크를 만들어 낼 수 있습니다.


여기까지 docker-compose.yml파일에 대해서 간단히 알아보았습니다. 다음 포스트에서 docker-compse.yml 빌드해보고 서비스를 구동해 보겠습니다.

 

 

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기