다중 컨테이너 도커 애플리케이션 정의하고 실행하기 위한 도구
npm init
으로 생성REmote Dictionary Server (Redis) 메모리 기반 키-값 구조
데이터 관리 시스템, 모든 데이터를 메모리에 저장하고
빠르게 조회할 수 있는 비관계형 DB다 (NoSql)
메모리 저장 하기 때문에 Mysql 같은 DB에 데이터 저장하는 것과
데이터 불러올 때 훨씬 빠르게 처리할 수 가 있고
비록 메모리에 저장하지만 영속적으로도 보관 가능
서버 재부팅해도 데이터 유지할 수 있는 장점 있다.
보통 도커 사용하지 않는 환경에서 Redis 서버가 작동되고 있는 곳의 host 옵션을 URL로 주지만, docker Compose를 사용할 때 host 옵션을 docker-compose.yml 파일에 명시한 컨테이너 이름으로 주면 된다.
Nodejs 위한 이미지 만들기 위해 Dockerfile 작성
컨테이너 하나하나를 실행해보자
먼저 redis 클라이언트 작동하려면
redis 서버 켜져있어야 하기 때문에
먼저 redis 서버를 위한 컨테이너를 실행하고
nodejs를 위한 컨테이너를 실행
-> redis 서버 실패 오류
왜 이런 에러 일어날까?
컨테이너1 : 노드 JS앱 + redis 클라이언트
컨테이너2 : redis 서버
서로 다른 컨테이너에 있는데 컨테이너 사이에는 아무런 설정없이는
접근할 수 없기에
노드 JS 앱에서 redis 서버 접근할 수 없다.
어떻게 컨테이너 사이 통신할 수 있을까?
-> 멀티 컨테이너 상황에서 쉽게 네트워크를 연결시켜주기 위해
Docker Compose 사용하면 된다.
yml이란?
일반적으로 구성 파일 및 데이터 저장되거나 전송되는 응용 프로그램에서 사용되고 원래 XML이나 json 포맷으로 많이 쓰였지만
좀 더 사람이 읽기 쉬운 포맷으로 나타난게 yaml이다.
version # 도커 컴포즈 버전
services # 실행하려는 컨테이너들을 정의
redis-server # 컨테이너 이름
image # 컨테이너에서 사용하는 이미지
node-app # 컨테이너 이름
build # 현 디렉토리에 있는 Dockerfile사용
ports # 포트 맵핑 로컬 포트 : 컨테이너 포트
docker compose 작성 후
docker-compose up
실행
docker compose 통해 작동시킨 컨테이너들
한번에 중단 시키려면
docker compose down
docker compose 하기 위해서 yml 파일 있는 곳에서 실행해야 한다.
docker-compose up 과 docker compose up --build 차이점
docker-compose up:
이미지 없을 때 이미지 빌드하고 컨테이너 시작
docker compose up --build:
이미지 있든 없든 이미지 빌드하고 컨테이너 시작
굳이 다른 터미널 켜지 않고 하나의 터미널로 해결하고 싶으면
docker compose 컨테이너 실행할 때
docker compose -d up
detached 모드로 앱을 백그라운드에서 실행
그래서 앱에서 나오는 output 표출 하지 않는다.
이렇게 앱 실행하면 하나의 터미널에서
앱 작동하고 중단시킬 수 있다.
docker-compose up -d --build
docker ps
컨테이너 켜져 있는거 확인 가능
스탑 시킬려고하면
3. docker-compose down
4. docker ps
확인하면 컨테이너 꺼져 있는것 확인 가능