Docker 시작하기 #05 - Docker network를 이용해서 nodejs,mongodb 연결하기

Seok·2020년 12월 6일
1

Docker

목록 보기
5/7
post-thumbnail

실습 환경

  • AWS EC2(Ubuntu 16.04)

목표

이전 포스팅에서 했던 NGINX기반으로 DB를 읽고 수정하는 API를 가진 nodejs 컨테이너와 mongodb 컨테이너를 Docker network를 이용하여 컨테이너끼리 통신할 수 있도록 만들어보려한다.


Docker Network란?

자세한 설명은 추후 포스팅에 작성하고 이 포스팅에서는 실습을 위주로 작성하려한다.
실습을 위해 간략히 설명하면 각 컨테이너는 격리된 환경에서 돌아가기 때문에 다른컨테이너와의 통신이 불가능하다. Docker Network는 이 불가능한 다른 컨테이너와의 통신을 가능하게 해준다.

이전까지 --link 옵션으로 가능했지만 이 기능은 곧 제거된다고 안내되어있다.


Docker Network 생성 및 조회

$ docker network create network-prac
$ docker network ls

docker network create {이름} 으로 생성할 수 있다.

docker network ls는 현재 네트워크를 보여준다.

docker network rm {이름} 으로 네트워크를 삭제할 수 있다.

  • network-prac이라는 네트워크를 생성하고 ls 명령을 통해 확인했다.

  • 이 네트워크가 앞으로 생성할 nodejs 컨테이너와 mongodb 컨테이너의 내부 통신을 할 수 있도록 할 것이다.


Mongodb 컨테이너 생성하기

$ docker run -d --name mongo --network network-prac mongo
  • run 명령으로 mongo라는 이름을 가지고 network-prac 네트워크를 사용하며 mongo:latest이미지를 사용하는 컨테이너를 생성한다.

만약 nodejs프로젝트를 이 포스팅에서 사용되는 자료를 사용한다면 컨테이너이름을 꼭 mongo로 해야합니다


Nodejs 컨테이너 생성하기

$ docker run -d --name nodejs -p 3000:3000 --network network-prac hschoi1104/docekr-nodejs-mongodb:second
  • 이 실습을 위해 만들어놓은 이미지를 사용했다.
  • 이 이미지는 몇개의 API들이 작성되어있고, mongodb와 연결하기 위한 설정이 되어있다.
  • hschoi1104/docker-nodejs-mongodb:second이미지를 사용 했다.

이미지 정보

API

MethodUrlParameterDescription
Get/users-전체 사용자 리스트 반환
Post/users"name","email","password"사용자 생성
Delete/users/:id-'id'를가지는 사용자 삭제
Put/users/:id"name","email","password"사용자 정보 수정

DB_URI

  • nodejs 프로젝트 내부에 mongodb와 연결하는 uri를 mongodb://mongo:27017/docker_apiTest로 설정해 두었다.
  • 이 uri에서 mongo:27017 은 네트워크 내부에서 컨테이너 이름으로 통신을 할 수 있기 때문에 통신 대상이되는 db 컨테이너 명인 mongo로 지정했다.

전체소스 in GITHUB

Docker_Image in DOCKERHUB

두개의 컨테이너를 생성하고난 결과는 아래와 같다.


네트워크 확인

$ docker network inspect network-prac

docker network inspect {네트워크 명}특정 네트워크의 상태를 볼 수 있다.

  • 아래쪽 containers 부분에 두개의 컨테이너가 network-prac에 연결된 것을 볼 수 있다.

API Test

Post Man을 사용해서 EC2 인스턴스에서 방금 구성한 API서버의 API 테스트를 통해 제대로 구성되어있나 확인해 보자.

먼저 Post Man으로 AWS EC2로 REST API 요청을 보내려면 인증과정을 추가해 주어야한다.

Postman을 사용하여 REST API 호출

Auth->TYPE-> AWS Signature 선택 후
IAM 계정의 AcessKey, SecretKey를 입력해준다.

URL은 http://{Instance Public DNS}/users 형태이다.
먼저 사용자 정보를 생성요청을 보냈다.

잘 요청이 처리 된 듯하다.

다음으로 사용자 정보 읽기 요청을 보냈다.


혹시나 API테스트가 정상적으로 수행되지 않는다면..

포스팅을 하면서 겼었던 문제이다.

  1. nodejs 컨테이너 내부에서 서비스가 작동중인가?
    • 2번의 문제로 서비스가 중단되어있었다.
  2. nodejs 의 db uri가 잘 설정되어있는지?
    • db uri의 주소에 들어가는 컨테이너명이 달라서 nodejs 가 mongodb와 연결을 실패하고 죽어있었었다.

API TEST를 들어가기전에 log명령이나 ps 명령으로 컨테이너 생성 후 상태를 확인했어야했다..

profile
🦉🦉🦉🦉🦉

0개의 댓글