인프라

[Docker] docker-compse로 배포 서버에서 redis 통신하기

HHRR 2024. 6. 26. 11:18
개요

 

배포 서버에서 redis와 백엔드 컨테이너가 통신하려면 같은 docker group으로 묶어줘야 서로 통신이 가능하다.

docker-compose란?

도커 컴포즈는 단일 서버에서 여러 컨테이너를 하나의 서비스로 정의해 컨테이너 묶음으로 관리할 수 있도록 환경을 제공하는 도구이다. 도커 컴포즈는 yml 파일로 여러 개의 컨테이너의 실행을 한 번에 관리한다.

따라서 여러 컨테이너를 사용할 때는 도커 컴포즈로 하나의 그룹으로 묶어 통신을 해줘야 한다.

 

진행 과정

 

도커 컴포즈를 설치해주고  백엔드 EC2 서버에 ssh 접속으로 연결을 해주고 루트에 docker-compose.yml 파일을 만들어준다.

ubuntu@ip-...:~$ ls -al
total 3476
drwxr-x--- 8 ubuntu ubuntu    4096 Jun 22 10:04 .
drwxr-xr-x 3 root   root      4096 Apr  9 17:03 ..
drwx------ 3 ubuntu ubuntu    4096 May 25 15:16 .docker
-rw-rw-r-- 1 ubuntu ubuntu    1322 Jun 22 10:04 .env
drwx------ 2 ubuntu ubuntu    4096 Apr 30 01:26 .ssh
-rw-rw-r-- 1 ubuntu ubuntu     379 May 27 03:13 docker-compose.yml

 

version: "3.0"
services:
  web:
    image: {도커 id}/{백엔드 도커 이미지}:latest
    container_name: {백엔드 도커 컨테이너}
    ports:
      - "8080:8080"
    depends_on:
      - redis
    env_file: .env 

  redis:
    image: redis:alpine
    container_name: {redis 도커 컨테이너}
    command: redis-server --port 6379
    hostname: {redis 도커 컨테이너와 동일}
    ports:
      - "6379:6379"

 

  • docker-compose.yml 파일 작성할 때 container_name과 hostname을 동일하게 해줘야 하고, 스프링 부트의 application.yml 파일에도 host를 container_name과 동일하게 맞춰줘야 그룹에서 통신이 가능하다.
  • 백엔드 서버에서 사용하는 환경변수는 백엔드 EC2 루트에 .env로 생성하고, `  env_file: .env ` 로 환경변수 주입을 해준다.