[ Docker ] 따라하며 배우는 도커와 CI환경 - 5

·2023년 7월 14일
0

Day 5

Docker Compose

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

어플리케이션 소스 작성

  1. docker-compose-app 폴더 만들기
  2. package.json -> npm init 으로 생성
  3. server.js 파일 작성

Redis란?

REmote Dictionary Server (Redis) 메모리 기반 키-값 구조
데이터 관리 시스템, 모든 데이터를 메모리에 저장하고
빠르게 조회할 수 있는 비관계형 DB다 (NoSql)

Redis 쓰는 이유

메모리 저장 하기 때문에 Mysql 같은 DB에 데이터 저장하는 것과
데이터 불러올 때 훨씬 빠르게 처리할 수 가 있고
비록 메모리에 저장하지만 영속적으로도 보관 가능
서버 재부팅해도 데이터 유지할 수 있는 장점 있다.

Node.js 환경에서 Redis 사용방법

  1. redis-server 작동
  2. redis 모듈 다운
  3. 모듈 받은 후 redis 클라이언트 생성하기 위해
    Redis에서 제공하는 createClient() 함수 이용해
    redis.createClient로 레디스 클라이언트 생성해준다.
  • redis server 작동하는 곳과 Node.js 앱 작동하는 곳이
    다른 곳이면 host 인자와 port 인자 명시해야한다.

Docker 환경에서 redis 클라이언트 생성시 주의사항

보통 도커 사용하지 않는 환경에서 Redis 서버가 작동되고 있는 곳의 host 옵션을 URL로 주지만, docker Compose를 사용할 때 host 옵션을 docker-compose.yml 파일에 명시한 컨테이너 이름으로 주면 된다.

Dockerfile 작성

Nodejs 위한 이미지 만들기 위해 Dockerfile 작성

Docker Containers간 통신할 때 나타나는 에러

컨테이너 하나하나를 실행해보자
먼저 redis 클라이언트 작동하려면
redis 서버 켜져있어야 하기 때문에
먼저 redis 서버를 위한 컨테이너를 실행하고
nodejs를 위한 컨테이너를 실행

  1. docker run redis
  2. 다른 터미널에서
    docker build -t 아이디/앱이름 ./
  3. docker run 이미지이름

-> redis 서버 실패 오류

왜 이런 에러 일어날까?

컨테이너1 : 노드 JS앱 + redis 클라이언트
컨테이너2 : redis 서버

서로 다른 컨테이너에 있는데 컨테이너 사이에는 아무런 설정없이는
접근할 수 없기에
노드 JS 앱에서 redis 서버 접근할 수 없다.

어떻게 컨테이너 사이 통신할 수 있을까?

-> 멀티 컨테이너 상황에서 쉽게 네트워크를 연결시켜주기 위해
Docker Compose 사용하면 된다.

Docker Compose 파일 작성

  1. docker-compose.yml

yaml 파일

yml이란?
일반적으로 구성 파일 및 데이터 저장되거나 전송되는 응용 프로그램에서 사용되고 원래 XML이나 json 포맷으로 많이 쓰였지만
좀 더 사람이 읽기 쉬운 포맷으로 나타난게 yaml이다.

version                 # 도커 컴포즈 버전
services                # 실행하려는 컨테이너들을 정의
	redis-server		# 컨테이너 이름
    	image			# 컨테이너에서 사용하는 이미지
    node-app			# 컨테이너 이름
    	build			# 현 디렉토리에 있는 Dockerfile사용 
        ports			# 포트 맵핑 로컬 포트 : 컨테이너 포트

docker compose 작성 후
docker-compose up 실행

Docker compose 컨테이너 멈추기

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 표출 하지 않는다.

이렇게 앱 실행하면 하나의 터미널에서
앱 작동하고 중단시킬 수 있다.

  1. docker-compose up -d --build
  2. docker ps

컨테이너 켜져 있는거 확인 가능
스탑 시킬려고하면
3. docker-compose down
4. docker ps
확인하면 컨테이너 꺼져 있는것 확인 가능

출처
https://www.inflearn.com/course/%EB%94%B0%EB%9D%BC%ED%95%98%EB%A9%B0-%EB%B0%B0%EC%9A%B0%EB%8A%94-%EB%8F%84%EC%BB%A4-ci

0개의 댓글