인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

limjs730님의 프로필 이미지

작성한 질문수

비전공자도 이해할 수 있는 Docker 입문/실전

[실습] Spring Boot, MySQL, Redis 컨테이너 동시에 띄워보기

docker compose ci&cd 질문

작성

·

83

0

도커 컴포즈를 배우면서 여러개의 컨테이너를 띄우고 spring에서 특정 db를 가리켜서 사용할 수 있는걸 이해했는데 이걸 ci&cd 배포를 추가한다고 치면 문제가 발생합니다.

 

제가 이해하기로는 docker compose는 build 부분에 도커파일을 넣게 되어 있는데 근데 이러면 ci&cd 할 때 스크립트 순서가 java 설치 -> checkout -> 빌드 -> jar파일, 도커 파일, 도커 컴포즈 파일 scp를 활용해 전달 -> ssh로 접근해서 도커 컴포즈 실행

이렇게 사용하면 이미지를 넣어두고 다른데서도 사용할 수 있어야 하는 그런 장점이 없어진다고 생각하는데 이걸 어떻게 배포를 해야 하는건가요? 제가 생각한 도커, 컴포즈 파일, jar 파일을 전달하고 해당 ec2에서 docker compose를 해야하는건가요??

답변 2

0

JSCODE 박재성님의 프로필 이미지
JSCODE 박재성
지식공유자

안녕하세요 limjs730님! 좋은 고민 하고 계시네요:)

 

CI/CD에서는 이 과정을 조금 응용하셔야 합니다!

jar 파일과 도커 파일을 ci/cd로 EC2로 보내지 않고,

로컬에서 jar 파일과 도커 파일을 활용해서 도커 이미지를 생성해

이미지를 Dockerhub이나 AWS ECR에 저장해야 합니다.

그런 뒤에 EC2에서 Docker compose가

Dockerhub 또는 AWS ECR로부터 이미지를 받아오게 셋팅을 하셔야 합니다!

그렇게 되면 EC2로 jar 파일과 도커 파일을 전달할 필요가 없게 됩니다ㅎㅎ

 

위 내용 중 이해가 안 되시는 부분이 있다면 답글 한 번 남겨주세요~~~

0

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다. limjs730님.

Docker Compose를 사용하여 여러 컨테이너를 관리하고, 이를 CI/CD 파이프라인에 통합하려는 시도는 좋은 접근입니다. 하지만, 현재 제안된 방법에서 언급된 문제는 실제로 CI/CD의 모범 사례와는 약간 거리가 있을 수 있습니다. Docker의 이점을 제대로 활용하기 위해 몇 가지 개선점을 소개하겠습니다.

CI/CD 파이프라인에서의 Docker Compose 관리

  1. 이미지 빌드 및 푸시:

    • CI/CD 파이프라인 내에서 서비스별 Docker 이미지를 빌드하고 이를 Docker Hub 또는 ECR과 같은 컨테이너 레지스트리에 푸시합니다. 이는 ‘docker build’로 이미지를 생성한 후 ‘docker push’ 명령으로 레지스트리에 저장하는 단계입니다.
    • 이를 통해 이미지를 중앙에서 관리하고 여러 환경에서 재사용할 수 있게 됩니다.
  2. 배포 환경 준비:

    • 배포 서버(예: EC2 인스턴스)에서는 도커 컴포즈 파일을 사용하여 이미 푸시된 이미지를 가져오고 서비스를 시작합니다. 이 과정에서 docker-compose up을 사용하여 서버에서 이미지를 풀(pull)하고 환경에 따라 적절히 실행할 수 있습니다. 이미지 자체는 레지스트리에서 가져오기 때문에, 배포 서버에서는 기본적으로 Docker Compose 파일과 환경 설정 파일(.env)을 필요로 합니다.
  3. 환경 변수 관리:

    • 환경 변수나 설정 파일을 통해 같은 Docker 이미지가 여러 환경에 맞게 작동하도록 설정합니다. 이를 통해 개발, 테스트, 프로덕션 등 다양한 환경에서 용이하게 작업할 수 있습니다.

질문에 대한 답변

limjs730님께서 제안한 방법에서, ‘jar 파일을 전달하고 해당 EC2에서 docker compose를 해야하는건가요?‘라는 질문에 대해 다음과 같이 제안드립니다. 이미지를 빌드한 후, 이를 Docker 레지스트리에 푸시하고, 배포 서버에서는 이 이미지를 풀(pull)하여 Docker Compose로 실행하는 것이 더 좋은 방법입니다. 이렇게 하면 이미지의 재사용성을 극대화하고, 각 배포 환경에 적합하게 자동화된 배포를 쉽게 수행할 수 있습니다.

아래 링크들은 CI/CD에서 Docker와 Docker Compose 활용에 대해 더 확인하실 수 있는 참고 자료들입니다:
- 도커 이미지 빌드 및 활용
- Docker Compose 및 CI/CD 배포

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

limjs730님의 프로필 이미지

작성한 질문수

질문하기