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
'클라우드' 카테고리의 다른 글
[DB] 1단계 MYSQL & DOCKER 마이그레이션 해보기 (0) | 2024.11.16 |
---|---|
[백엔드] 스프링 + docker 컨테이너로 이미지 만들기 (2) | 2024.11.14 |