반응형

사용자 지정 YAML파일을 작업하고 Docker Compose의 작동을 실습해 보도록 하겠습니다. 실습을 하면서 Docker Compose의 명령어(up, down, ps, start, stop)를 알아보도록 하겠습니다.  docker-compose down과 docker-compose stop의 차이점도 알아보도록 하겠습니다.


실습에 사용할 Node.js프로젝트를 열어주었고 노드 프로젝트는 몽고 디비와 통신하는 프로젝트입니다. 먼저 docker-compose.yml파일을 만들도록 하겠습니다.

docker-compose.yml 파일 작성

yml파일을 큰 틀부터 정의해보도록 하겠습니다.

  • 1번째 라인에 가장 제일 먼저 와야할 정보인 version을 표시하고 있습니다.
  • 3번째 라인에는 services를 넣을 자리를 만들어 주었습니다. 세부사항은 이어서 추가하도록 하겠습니다.
  • 5번째 라인에서 몽고디비와 node 두 개의 서비스가 브릿지 네트워크에서 동작하길 원하기 때문에 "nodeapp-network"라는 이름으로 network를 넣어주고 있습니다.

이제 서비스를 추가로 정의해서 완성시키겠습니다.

5번째 줄에서 node라는 이름의 서비스를 정의하고 있습니다. 그리고 이미 가지고 있는 node.dockerfile에서 이것을 빌드하고 싶으므로 build 속성을 추가한 후 하위 속성 context와 dockerfile을 추가해 주었습니다. context에는 yml파일이 있는 콘텍스트에서 실행하고 싶으므로 점(.)을 설정해 주었습니다. 만약  dockerfile이 다른 하위 폴더에 있다면 해당폴더로 콘텍스트를 설정해야 합니다. ports 속성에 3000:3000으로 설정하여 호스트와 컨테이너의 포트 설정을 해주었습니다. 마지막으로 이 서비스를 nodeapp-network에 연결하고 싶으므로 networks 속성을 추가한 후 만든 네트워크 이름을 넣어주고 있습니다.

6번째 줄에서는 mongodb서비스를 정의하고 있습니다. 서비스에서 사용할 이미지는 사용자 지정 이미지나 dockerfile에서 빌드하지 않고 docker hub에 있는것을 기반으로 할 것입니다. docker hub에 있는 이미지 mongo를 설정해 주었습니다. 그런 다음 네트워크 속성에서 node와 마찬가지로 nodeapp-network에 연결해 주고 있습니다.

 

docker-compose.yml파일이 완성되었습니다. node서비스를 만들었고 mongodb 서비스를 만들었습니다. 그리고 이 두 서비스는 nodeapp-network에 연결되게 됩니다. yml파일을 가지고 본격적으로 실습을 해보도록 하겠습니다.


Docker Compose 빌드

먼저 해야할일은 빌드하기입니다. 실행을 위해 yml파일이 존재하는 터미널을 열고 docker-compose build를 커맨드를 실행해 줍니다.

docker-compose build

 

Docker Compose 기동(docker-compose up)

빌드가 완료되었으니 다음 작업은 실제로 기동을 시키는 일입니다. 처음 기동은 docker-compose up으로 수행합니다.

docker-compose up

실행을 시키게 되면 문자열이 계속 해서 출력되는데, 일종의 로그 모드에 있다는 걸 눈치챌 수 있습니다. 이 상태에서 어떤 작업을 터미널에서 하고 싶다면 새 터미널을 열어야 합니다. 일단 ctrl+c로 빠져나오고 docker-compose를 정지시키겠습니다.

 

docker-compose down(정지와 삭제)

docker-compose down

ctrl+c를 누르면 서비스가 강제 정지됩니다. 연달아 docker-compose down까지 입력하면 삭제까지 되는 걸 확인해 볼 수 있습니다. 참고로 다른 컨테이너 창에서 docker-compose down을 실행하면 정지와 삭제가 동시에 이뤄집니다. down 명령어로 컨테이너가 삭제된다는 점 기억해 주세요.(컨테이너를 삭제하고 싶지 않다면 docker-compose stop으로 정지해 주세요.)

 

방금 방식으로 실행시키면 터미널을 사용하지 못하게 된다는 단점이 있습니다. 하지만 데몬 모드에서 실행시키면 터미널을 계속해서 사용할 수 있습니다.

데몬 모드 실행

docker-compose up -d

-d로 데몬 모드로 실행시키자 시작이 되고 명령 프롬프트로 돌아갈 수 있습니다.

docker-compose ps로 실행 중인 작업을 살펴볼 수 있습니다.

docker-compose ps

몽고 디비와 node가 실행 중인걸 볼 수 있습니다.

브라우저에서 실행 중인 서비스를 확인해 보겠습니다.

express에서 웹페이지가 잘 전달되고 있고, 몽고 디비 데이터도 잘 표시되고 있습니다.

 

컨테이너 로그 확인하기

docker-compose logs로 모든 컨테이너에 대한 로그를 확인해 볼 수 있습니다.

docker-compose logs

몽고디비 로그
node 로그

몽고 디비와 node, 두 컨테이너에 대한 로그가 동시에 출력됩니다.

 

이제 docker-compose down으로 정지시키고 docker-compose ps로 상태를 보겠습니다.

잘 정지되었고 docker-compose ps의 출력 리스트에 아무것도 존재하지 않습니다.

 

docker-compose down과 docker-compose stop 차이점

docker-compose down을 하면 정지를 함과 동시에 컨테이너 역시 삭제된다는 점을 꼭 기억해야 합니다.

컨테이너가 삭제되니 데이터도 다 지워질 것입니다. 입력한 소중한 데이터 날아가는 걸 생각해서 꼭 염두에 두세요. 컨테이너와 데이터를 삭제하고 싶지 않다면 docker-compose up으로 처음 기동 후, docker-compose stop으로 정지해 주어야 합니다. 그리고 다시 사용할 때는 docker-compose start로 시작해 주세요. docker-compose start는 기존 컨테이너를 사용해서 기동 할 때 사용됩니다.


 

여기까지 읽어주셔서 감사합니다.

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