본문 바로가기

클라우드

[docker compose] 리액트+스프링부트 dockercompose 하기

compose란 쉽게말해 백엔드 프론트엔드에서 생성되는 컨테이너 2개를 한개의 컨테이너에서 실행해주는 방식이다.

PS C:\docker_compose> docker-compose up --build

그래서 yml파일을 생성한후 각 프로젝트의 Dockerfile을 참조해야한다.

 

그런데  

compose build 시 아래와같은문제로 빌드가 안된다 ..

 

백엔드에서 .jar파일을 가져오지못하는 디렉토리문제인거같다 ㅜㅜ

 

[도커파일확인]

이게 문제인거같다.

 

bulid/libs*. app.jar


>>수정후 

./bulid/libs*. app.jar

 

첨엔 저렇게 간단한 문제인줄알았는데 ..

그래도안된다 

 

 적용이 안되서 아래와같이 수정했다 (chat gpt)참고해보니 아래와같이 안내주었고 빌드가 되었다.

# 빌드 단계: Gradle을 사용해 애플리케이션 빌드
FROM gradle:7.6-jdk17 AS build

WORKDIR /app

# Gradle Wrapper 및 빌드 파일 복사
COPY gradlew gradlew.bat build.gradle settings.gradle ./
COPY gradle gradle

# 소스 코드 복사
COPY src src

# 애플리케이션 빌드 (JAR 파일 생성)
RUN ./gradlew build --no-daemon

# 실행 단계: 경량화된 JDK 이미지에서 애플리케이션 실행
FROM openjdk:17-alpine

WORKDIR /app

# 빌드된 JAR 파일을 실행 단계로 복사
COPY --from=build /app/build/libs/*.jar app.jar

EXPOSE 8080

# JAR 파일 실행
ENTRYPOINT ["java", "-jar", "app.jar"]

 

 

드디어 하루만에 빌드가 완료

 

완료된 모습 ㅜㅜ 이제 이미지만들고 ec2에서 테스트해보면된다. 

 

 

기분좋은 완료 모습 ㅋ

 

 

 

이제 이미지를 확인해보면

PS C:\frontend>
PS C:\frontend> docker ps
CONTAINER ID   IMAGE                     COMMAND                   CREATED          STATUS          PORTS                    NAMES
346a98e7c07b   docker_compose-backend    "java -jar app.jar j…"   3 minutes ago    Up 23 seconds   0.0.0.0:8080->8080/tcp   docker_compose-backend-1
102e6ea01af7   docker_compose-frontend   "/docker-entrypoint.…"   35 minutes ago   Up 23 seconds   0.0.0.0:3000->80/tcp     docker_compose-frontend-1



PS C:\frontend> docker images
REPOSITORY                 TAG       IMAGE ID       CREATED          SIZE
docker_compose-backend     latest    a6e4f83a9015   13 minutes ago   346MB

 

정상적이다 localhost확인

 

완료

 

이미지 docker hub에 배포

 

 

 

docker tag docker_compose-backend:latest jarrydms/docker_compose:tagname


tag 앞에는 원래있는 이미지 이름임 뒤에는 도커 허브에 이름임

 

여기서 tagname은 원하는 태그 이름입니다 (예: v1.0, prod, latest 등).

이 명령어는 이미지를 docker_compose:latest에서 jarrydms/docker_compose:compose-1으로 태깅합니다.

 

docker push jarrydms/docker_compose:compose-1

 

 

PUSH 완료


EC2에서 이미지를 받아보자 

sudo yum update -y

sudo yum install docker -y

sudo usermod -aG docker ec2-user

sudo systemctl start docker



[ec2-user@ip-172-31-15-242 ~]$ docker login
Authenticating with existing credentials...
WARNING! Your password will be stored unencrypted in /home/ec2-user/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded


[ec2-user@ip-172-31-15-242 ~]$ docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES


[ec2-user@ip-172-31-15-242 ~]$ sudo docker pull jarrydms/jarrydms/docker_compose:compose-1
Error response from daemon: pull access denied for jarrydms/jarrydms/docker_compose, 
repository does not exist o   
r may require 'docker login': denied: requested access to the resource is denied





[ec2-user@ip-172-31-15-242 ~]$ docker pull jarrydms/docker_compose:compose-1
compose-1: Pulling from jarrydms/docker_compose
5843afab3874: Pull complete
53c9466125e4: Pull complete
d8d715783b80: Pull complete
eb9229640114: Pull complete
84445a0e724e: Pull complete
Digest: sha256:1df746f3f2fab4ef9f4bb0de0a6a82ca12ef86def5291fd059ef5f697aae4845
Status: Downloaded newer image for jarrydms/docker_compose:compose-1
docker.io/jarrydms/docker_compose:compose-1

 

docker run -d -p 8080:8080 jarrydms/docker_compose:compose-1

엥 근데 이상한점.. 왜 백엔드밖에 없지?

알고보니개념을 잘못이해고 있었다. compose 한개의 이미지를 컨테이너를 실행하는게 아니라 한번의명령어를 통해
여러개의 도커파일을 실행 및 관리해준다. 결론적으로는

백엔드 -> 이미지만들기

프론트엔드 -> 이미지만들기

compose -> yml 파일 안에 명령어를 통해 한번에 2개 어플리케이션을 run 시켜준다.

 

 

프론트엔드를 똑같이 이미지화 한뒤에 도커허브에서 받아왔다.

 

 

이제 docker-compose.yml 파일로 동시에 실행하는걸 해보겠다.

 

 

 

컨테이너이미지를 빌드시 아래 참고 

 

docker-compose.yml

version: '3.8'

services:
  frontend:
    build:
      context: ./frontend  # 리액트 앱 Dockerfile 경로
    ports:
      - "3000:80"

  backend:
    build:
      context: ./backend  # 스프링 부트 Dockerfile 경로
    ports:
      - "8080:8080"

 

해당파일을 ec2에 옮겨준다

[ec2-user@ip-172-31-15-242 ~]$ dir
docker-compose.yml

명령어가 안먹는다(당황) docker-compose CLI를 설치해야한다고..

 

sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
#권한주기, 설치중(안됨)
sudo chmod +x /usr/local/bin/docker-compose
sudo yum install -y libnsl

#삭제후 재설정(안됨)
sudo rm /usr/local/bin/docker-compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

#파이썬설치(성공)
sudo yum install -y python3-pip
sudo pip3 install docker-compose

#정안되면 파이썬패키지로 설치도 가능하다고한다
#그냥 몽땅 설치했다.

 

 

 

 

권한도 준다.

 

 

결국 설치완료

 

 

 

 

 

 

모두 완료되었다..이제 테스트를 해본다 
테스트 완료

docker-compose up -d

 

반응형