코딩/Docker

docker-compose, volumes

춘 몽 2024. 3. 15. 03:28

docker-compose

실제 Docker를 사용하게 되면 한번에 한 개만 돌리는 경우는 거의 없다

(ex 서버 하나 돌리고, DB 한개 돌리고)

 

때문에 일일이 설정하고 실행하고 하는게 아니라 한번에 작업해주는데 그게 docker-compose 다.

 

예를 들어 Dockerfile 이라는 서버랑, Dockerfile.mongo 라는 DB 파일이 있다면,

docker-compose.yaml 이라는 compose 파일을 만들고,

version: "3.7"

# 컴퓨터들

# 내백엔드컴퓨터:
#   build:
#     파일경로: .
#     파일명: Dockerfile

services:
  my-backend:
    build:
      context: .
      dockerfile: Dockerfile
    ports: 
      - 4000:4000

  my-database:
    build:
      context: .
      dockerfile: Dockerfile.mongo
    ports: 
      - 27017:27017

이런식으로 적은 후,

 

docker-compose build 로 빌드하고,

docerk-compose up 으로 실행한다.

++ 

docker-compose --env-file ./.env up

 

++ 실제로는 docker-compose -f docker-compose.yaml build 인데 중복되는게 생략된거다.

따라서 docker-compose.yaml 파일이 아닌 다른 yaml 파일을 빌드할 경우

ex) docker-compose.prod.yaml 파일을 빌드한다면

docker-compose -f docker-compose.prod.yaml build 라고 작성하게 된다.

 

종료는 crl + c 로 하거나, docker-compose stop 으로 한다.

 

++ 추가

- db 파일 내용이 없을경우

docker db 파일의 내용이 mongo:5 가 다인 경우 굳이 파일을 따로 만들지 않고,

아래 코드처럼 image로 처리할 수 있다.

version: "3.7"

services:

# 컴퓨터이름
  my-backend:
    build:
      context: .
      dockerfile: Dockerfile
    ports: 
      - 3000:3000
# 컴퓨터이름
  my-database:
    image: mongo:5
    ports: 
      - 27017:27017

 

- port

docker 가 두 개이기 때문에 각각의 컴퓨터로 볼 수 있지만,

compose로 그룹핑해줬기 때문에 db의 포트포워딩을 굳이 해줄 필요가 없어진다.

대신에 내 컴퓨터에서 몽고DB컴패스를 통해 접속할 수는 없다.

 

volumes

내 컴퓨터에서 수정한 내용이 docker에 반영되기 위해서는 다시 빌드하고, 다시 실행하고 하는 불편함이 있다.

이를 해결하는 방법이 volumes다.

volumes는 간단히 말해 내컴퓨터의 파일과 docker의 파일을 연동시키는 것이다.

그리고 서버를 끄고 켜는 행동을 생략하기 위해 nodemon도 설치가 되어있어야한다.

그렇게 되면 내 컴퓨터에서 수정하고 저장하면 docker에서 반영된 서버를 nodemon이 재실행해준다.

version: "3.7"

services:

# 컴퓨터이름
  my-backend:
    build:
      context: .
      dockerfile: Dockerfile
    volumes:
      - ./index.js:/myfolder/index.js
      - ./email.js:/myfolder/email.js
      # - ./src:/myfolder/src 일일이 하기 귀찮다면 이런식으로 폴더 하나 만들어 한번에 처리
    ports: 
      - 3000:3000
# 컴퓨터이름
  my-database:
    image: mongo:5
    ports: 
      - 27017:27017

코드는 위와 같이 volumes를 추가해주고, 내 컴퓨터의 파일과 docker의 컴퓨터를 연동시켜준다.

728x90

'코딩 > Docker' 카테고리의 다른 글

Docker vs Virtual Machine  (0) 2024.10.11
Docker  (1) 2024.03.08