강의

멘토링

로드맵

Inflearn brand logo image

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

이_악물고_개발님의 프로필 이미지
이_악물고_개발

작성한 질문수

비전공자도 이해할 수 있는 CI/CD 입문·실전

[실습] 컨테이너 기반 + 확장성을 고려한 프로젝트에서 많이 쓰는 CI/CD 구축 방법

Dockerfile VS githubActions

작성

·

43

0

안녕하세요, 강의 잘 듣고 있습니다 !

 

Dockerfile과 githubActions의 yml 파일의 경계를 잘 모르겠습니다.

Dockerfile을 통해 jar를 만들어서 실행할 수도 있고,

강의처럼 yml 파일에서 jar파일을 만들 수도 있는데,

현업에서는 이 두 방식 중 어떤 걸 사용하는지 또, 어떤 이점 때문에 사용하는지 궁금합니다...!

 

추가로, mysql이나 redis 같은 경우는 따로 Dockerfile을 작성하지 않고

compose.yml 에서 바로 이미지 생성을 하고 있는데

이렇게 되는 경우, EC2에서 이미지가 만들어지니

각각의 Dockerfile을 만들어서 gitActions 단계에서 처리하는 게 좋을까요...?

답변 2

0

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

안녕하세요 상학님! 강의 들어주셔서 감사합니다:D

해주신 질문에 답변 드려볼게요 ~~

 

"Dockerfile을 통해 jar를 만들어서 실행할 수도 있고, 강의처럼 yml 파일에서 jar파일을 만들 수도 있는데, 현업에서는 이 두 방식 중 어떤 걸 사용하는지 또, 어떤 이점 때문에 사용하는지 궁금합니다...!"

-> spring boot 프로젝트 같은 경우 Dockerfile에서 빌드를 하지 않는 편입니다. 실제 spring boot 공식 문서(https://spring.io/guides/gs/spring-boot-docker)에서도 Dockerfile에서 빌드하지 않는 방식을 안내하고 있습니다. 가장 큰 이유는 빌드를 할 때 캐싱을 사용할 수 있는 지 여부에 따른 효율성 차이입니다. 그래서 효율성 측면에서는 Dockerfile을 통해 jar를 만들어서 실행하는 것보다 github actions를 통해 jar를 만들어서 실행하는 게 더 좋습니다!

 

mysql이나 redis 같은 경우는 따로 Dockerfile을 작성하지 않고 compose.yml 에서 바로 이미지 생성을 하고 있는데 이렇게 되는 경우, EC2에서 이미지가 만들어지니 각각의 Dockerfile을 만들어서 gitActions 단계에서 처리하는 게 좋을까요...?
-> 제가 이 질문은 제대로 이해를 하지 못했네요ㅠㅠ! 혹시 실제 코드를 예시로 들어서 다시 설명해주실 수 있을까요~??

0

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

Dockerfile과 Github Actions의 yml 파일 사이의 경계와 이들의 사용 용도에 대한 질문을 주셨군요. 두 가지 모두 CI/CD 파이프라인에서 중요한 역할을 하지만 서로 다른 목적과 사용 사례를 가지고 있습니다.

Dockerfile vs Github Actions

  1. Dockerfile:

    • 목적: Dockerfile은 애플리케이션을 컨테이너 이미지로 빌드하기 위한 설정 파일입니다. 애플리케이션과 그 종속성을 딱 맞춰 설정하고, 컨테이너 이미지를 일관되게 생성하는 것을 목표로 합니다.
    • 현업 사용 이유: Dockerfile을 사용하면 애플리케이션을 이미지로 만들어서, 어디서든 동일한 환경에서 정확히 동일한 동작을 할 수 있습니다. 특히, 배포 환경이 다양할 때 유용하게 쓰입니다.
  2. Github Actions:

    • 목적: Github Actions의 yml 파일은 CI/CD 파이프라인을 정의하는 데 사용되며, 자동화된 워크플로우를 통해 애플리케이션의 빌드, 테스트, 배포 과정을 관리합니다.
    • 현업 사용 이유: Github Actions를 통해 빌드 파이프라인을 자동화하여 코드의 변경 사항을 신속하고 안전하게 운영 환경으로 배포할 수 있습니다. 또한 다양한 이벤트에 반응하여 작업을 자동으로 수행할 수 있다는 이점이 있습니다.

실무에서의 구현

  • 애플리케이션의 경우, 일반적으로 Dockerfile을 사용하여 애플리케이션을 컨테이너화하고, 이는 Github Actions의 빌드 단계에서 Docker 이미지를 생성하는 과정으로 통합됩니다.
  • 반면, MySQL, Redis 등과 같은 데이터베이스나 캐시 서버는 일반적으로 이미지는 공식 이미지나 커뮤니티에서 제공하는 이미지를 가져와 사용하는 것이 일반적입니다. 이 경우, Dockerfile을 따로 작성하지 않고 docker-compose.yml을 통해 관리합니다.

EC2에서의 이미지 생성

  • Docker Hub나 AWS ECR와 같은 레지스트리에서 이미 잘 관리된 이미지를 가져오는 것이 보통입니다. EC2에서 이미지를 생성하지 않고, 모든 환경에서 동일한 이미지를 사용함으로써 일관성을 유지하게 됩니다.

아래 링크는 비슷한 주제에 대한 기존의 답변이며, 더 깊이 있는 이해를 도울 수 있습니다:

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

이_악물고_개발님의 프로필 이미지
이_악물고_개발

작성한 질문수

질문하기