개발/Docker

[5] Docker Compose

민지기il 2025. 3. 10. 12:39

[1] docker compose란?

: 다중 컨테이너 도커 애플리케이션을 정의하고 실행하기 위한 도구

 

[1-1] redis

: 메모리 기반의 키-값 구조 데이터 관리 시스템

모든 데이터를 메모리에 저장하고 빠르게 조회할 수 있는 비관계형 DB

영속적으로 보관이 가능함 -> 서버를 재부팅해도 사용 가능함

[1-2] node.js 환경에서 redis 사용하기

1) redis-server 작동시키기

2) redis module 다운 받기

3) redis에서 제공하는 createClient() 함수로 redis.createClient로 client 생성

도커 환경에서 redis client 생성 시 주의 사항)

도커를 사용하지 않는 환경에서 redis 서버를 작동하면 host 옵션을 url로 주지만

도커 compose를 사용할 때는 host 옵션을 docker-compose.yml 파일에 명시한 컨테이너 이름으로 준다.

[1-3] dockerfile 작성하기 -- docker-compose-app_4

FROM node:10

WORKDIR /usr/src/app

COPY ./ ./

RUN npm install

CMD ["node", "server.js"]

 

[2] docker container 간 통신할 때 나타나는 에러

[2-1] 

1) docker run redis -- redis 키기

2) image 생성 -> 컨테이너 키기 -- docker build -t jangmj80/docker-compose-app ./

3) docker run jangmj80/docker-compose-app하면 redis로의 연결이 실패했다고 나옴

컨테이너 간의 연결이 필요함 --> docker compose 사용

[2-2] Docker Compose 파일 작성하기

<docker-compose.yml>

version: "3" // 버전

services:

redis-server: // 컨테이너 이름

image: "redis" // 컨테이너에서 사용하는 이미지

node-app:

build: . // 도커 파일을 읽어서 image를 빌드해야하는데 docker 파일이 있는 위치, .은 yml과 Dockerfile이 같은 파일에 있는 것

ports:

-"5002:8080" //로컬:컨테이너

 

[2-3] 실행 명령어

: docker-compose up

docker-compose up --build로 수정

[2-4] docker compose로 컨테이너 멈추기

: docker compose down

1) main terminal에서 번거롭게 down 처리

- cd ./Users/.... /docker-compose-app

- docker-compose down 명령어 사용

2) detach: 앱을 백그라운드에서 실행시킨다 -- (앱에서 나오는 output을 표출하지 않는다.)

- docker compose up --build: 이미지가 있든 없든 이미지를 빌드하고 컨테이너 시작

(반면 --build가 없으면 이미지가 없을 때 이미지를 빌드하고 컨테이너 시작)

실습) 

docker-compose up -d --build하고 docker ps 하면 

이후에 docker compose down해서 중단할 수 있음