Docker 시작하기 #06 - Docker compose를 사용해서 Nodejs, Mongodb 컨테이너 만들기

Seok·2020년 12월 6일
3

Docker

목록 보기
6/7
post-thumbnail

실습 환경

  • AWS EC2(Ubuntu 16.04)

목표

이전 포스팅에서 했던 docker network를 이용한 컨테이너 연결을 docker compose를 이용하여 컨테이너들을 한번에 생성한다.


Docker Compose란?

여러개의 컨테이너가 하나의 애플리케이션으로 동작할 때 이전까진 하나씩 생성해서 연결하고 사용했다.
테스트 단계에서는 이렇게 매번 여러개의 컨테이너를 생성하고 테스트하는게 번거롭다.

여러개의 컨테이너를 하나의 서비스로 정의해 컨테이너 묶음으로 관리할 수 있다면 좀 더 편리할 것이다. 이는 Docker Compose로 해결할 수 있다.

Docker Compose는 컨테이너를 이용한 서비스의 개발과 CI를 위해 여러 개의 컨테이너를 하나의 프로젝트로서 다룰 수 있는 작업 환경을 제공한다.


Docker Compose 설치하기

$ sudo curl -L "https://github.com/docker/compose/releases/download/1.26.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

$ sudo chmod +x /usr/local/bin/docker-compose
$ docker compose -v

AWS EC2 환경인 ubuntu 16.04 기준입니다. 다른운영체제는 공식문서를 참고해주세요.


docker-compose.yml 파일 작성하기

도커 컴포즈는 정의된 YAML 파일을 읽어 도커 엔진을 통해 컨테이너를 생성한다. 따라서 YAML 파일을 먼저 작성해야한다.

예시는 nodejs 샘플 프로젝트로 직접 생성한 디렉토리에서 진행합니다.

  • 목표의 그림처럼 nodejsmongo 컨테이너 2개를 생성할 것이고, nodejs 컨테이너는 샘플프로젝트 내부의 Dockerfile을 통해 빌드한 이미지로 실행하도록, mongo 컨테이너mongo:latest 이미지를 사용할 예정이다.

  • Dockerfile 작성은 Docker 시작하기 #04에서 했기에 넘어가고 바로 docker-compose.yml파일을 작성하도록 한다.

  • docker-compose.yml 파일은 Dockerfile과 마찬가지로 프로젝트의 루트 디렉토리에 위치에서 생성, 작성한다.

version: '3.5'
  services:
    nodejs:
      container_name: nodejs
      build: .
      ports:
        - "3000:3000"
    mongo:
      image: mongo
      container_name: mongo
networks:
  default:
    external: 
      name: network-prac

docker-compose.yml 기본 구조

version: '3.5' #docker compose 버전
  services:
    nodejs: 
	# nodejs 컨테이너 설정
  	mongo:
	# mongo 컨테이너 설정
networks:
# 네트워크 설정

services

  • services 하위 내용은 컨테이너단위로 구성된다. 예시에선 nodjs, mongo 서비스 2개가 적혀있다.
services:
    nodejs:
      container_name: nodejs
      build: .
      ports:
        - "3000:3000"
    mongo:
      image: mongo
      container_name: mongo

container_name

  • 생성할 컨테이너의 이름을 설정한다 지정하지 않을 경우 현재 디렉터리의 이름으로 시작하는 이름을 가지게 된다.

build

  • build 파일에 정의된 Dockerfile에서 이미지를 빌드해 서비스의 컨테이너를 생성하도록 한다.
  • 예시는 현재 디렉터리에 있는 Dockerfile을 불러오도록 설정되어있다.

ports

  • docker run명령의 -p옵션과 같은 역할을 한다.

image

  • 서비스 컨테이너를 생성할 때 쓰일 이미지의 이름을 설정한다.

networks

  • 컨테이너들의 network설정을 할 수 있다.
  • 이부분을 정의하지 않을 시 project_name_default이름의 브리지 네트워크를 생성하고 연결한다.
networks:
  default:
    external: 
      name: network-prac

external

  • 기존에 생성되어있는 네트워크에 연결시킨다.

name

  • 연결할 네트워크의 이름을 작성한다.

다른 많은 옵션들이 존재한다. 공식문서에서 확인할 수 있다.


Docker compose 실행하기

  • docker-compose.yml파일이 위치하는 곳에서 아래의 명령을 실행한다.
$ docker-compose up -d

  • 실행중

  • 완료 화면

결과 확인

컨테이너 실행상태

  • docker run명령 두번으로 실행했던것과 똑같이 실행중인것을 확인할 수 있다.

network 연결상태

  • docker-compose.yml파일에 설정했던것 처럼 두 컨테이너가 network-prac네트워크에 연결되어있는 것을 확인할 수 있다.

종료하기

  • docker-compose up -d로 실행하고 docker-compose down명령으로 종료시킬 수 있다.
profile
🦉🦉🦉🦉🦉

0개의 댓글