express가 있는 도커 컨테이너와
mongo가 있는 도커 컨테이너 이렇게 두개의 도커 컨테이너가 있다고 하자.
이렇게 두개 따로따로 하게되면 각각 서로 다른 컴퓨터가 되기에 이들도 서로간 포트포워딩
을 해주어야한다.
이렇게되면 복잡해지게 되는데 도커들 사이에서는 포트포워딩을 하지 않아도되게 그룹핑해주는 것이 있다.
이것이 바로 docker-compose이다.
docker-compose.yaml(또는 docker-compose.yml)이라는 야믈 파일이라는 것을 만든다.
야믈 파일은 설정파일이다. package.json도 설정파일 중 하나라고 할 수 있다.
다만 package.json은 키 value형태로 설정파일을 작성하지만,
야믈파일( = .yaml
= .yml
)은 들여쓰기 기준으로 하게된다.
# 도커 컴포즈 몇 버전에서 할 것인지 version: "3.7" # services에는 그룹핑할 컴퓨터들 이름을 적어주면됨. mongoDB컴퓨터와 node컴퓨터 두대를 그룹핑할 것이기에 # 두 컴퓨터의 이름을 원하는대로 적고 services: backend: # 도커파일을 각 컴퓨터에 넣어 build해야함. 이 build안에는 두가지 명령어를 적어줄 수 있음. build: # dockerfile에 적어준 도커파일의 위치 (' .'은 현 위치를 말함.) context: . # 여기 넣을 도커파일이름 dockerfile: Dockerfile # 포트포워딩을 할 경우 ports: - 3000:3000 database-mongo: build: context: . dockerfile: Dockerfile.mongo # 포트포워딩을 할 경우 ports: - 27017:27017
이렇게 docker-compose.yaml파일을 만들고,
이 파일이 있는 곳에서
docker-compose build
이렇게 되면 이 두가지(services에 적어준 두 컴퓨터)가 한꺼번에 이미지로 만들어지게된다.
docker-compose up
이후 다른 쉘(터미널)을 열어 docker ps하여 실행되고있는 컨테이너(컴퓨터)를 보면 두대가 실행되고 있는것을 볼 수 있고, 포트 포워딩 설정한것도 잘 나와았는 것을 볼 수 있다.
도커 컴퓨터를 실행시켜 express서버를 실행시켜주었고
도커의 몽고 DB도 실행실행시킨 상태이다.
Docker.mongo 파일에는 무엇을 설치할것인지 설치할 mongo의 버전만 적혀있다.
FROM mongo:5
이렇게만 해도 실행까지 진행이 되나보다.
그럼 MongoDB-Compass를 켜서 실제 접속이 되는지 보자.
지금 포트번호 27017(MongoDB defualt포트) 로 포트포워딩을 해주어 localhost:27017로 연결해야한다.
connect를 누르면 접속이된다. ==> 도커 안의 MongoDB에 접속됨.
따라서 내 컴퓨터의 mongoDB에서 만든 DB인 myproject는 없다.
이런 상태라고 할 수 있다.
이미지에서는 내컴퓨터 mongoDB의 데이터베이스 이름이 myproject03이지만 나는 myproject로 했기에 이부분은 다르지만 어쨌든 해당 DB는 내 컴퓨터에만 존재한다는 것이다.
현재 내 컴퓨터의 mongoDB는 종료한상태이고 도커컴포즈만 켜놓은 상태이다.
따라서 이전처럼 localhost:27017 로 접속을 해도 도커컴퓨터로 가게된다.
내 컴퓨터에 있는 것을 보고 싶다면 도커를 종료하고, 내컴퓨터의 mongoDB를 실행시켜주어야한다.
이 과정 이해를 위해 mongoDB를 설치하다니.. 정말.... 뭔가 김빠지는 기분!!
앞으로는 도커로 설치해준 mongoDB를 사용한다고 한다.
=> ctrl + c
로 서버를 종료할때와 같음.