docker-compose와 Docker!

김하은·2023년 6월 11일
0

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를 사용한다고 한다.

실행시킨 docker-compose 중지

=> ctrl + c 로 서버를 종료할때와 같음.

0개의 댓글