[ AWS ] Container & Docker + CI/CD

PinkTopaz·2023년 10월 29일
0

Container가 뭔데?

호스트 OS상에 논리적인 구획(컨테이너)을 만들고, 어플리케이션을 작동시키기 위해 필요한 라이브러리나 어플리케이션 등을 하나로 모아, 마치 별도의 서버인 것처럼 사용할 수 있게 만든 것으로, 오버헤드가 적기 때문에 가볍고 고속으로 작동하는 것이 특징

  • 간단히 말해서 프로그램을 실행하는 데 필요한 모든 것을 포함하는 상자로,
    코드 뿐만 아니라 그 프로그램이 동작하기 위한 라이브러리, 환경 설정 등이 모두 포함되어 있다.
  • 이렇게 되면 프로그램을 실행하려는 환경이 어디든, 그 상자(컨테이너)만 옮겨 놓고 실행하면 동일한 환경과 조건에서 프로그램이 동작.
    (분명 교수님 컴퓨터에서는 잘 돌아가는 프로그램이 내가 집에 와서 똑같이 해보면 안되는 경우,,,컨테이너라면 해결할 수 있겠다!)

가상머신과의 차이점은 뭘까?

컨테이너는 운영 체제를 가상화하여 애플리케이션이 모든 플랫폼에서 독립적으로 실행될 수 있도록 합니다. 가상 머신은 그 이상의 기능을 제공하여 물리적 시스템을 가상화할 수 있도록 합니다. 따라서 하드웨어 리소스를 효율적으로 사용할 수 있게 됩니다.
-AWS : 컨테이너와 가상 머신의 차이점은 무엇인가요?-

컨테이너는 일반적으로 크기가 MB 단위이다. 앱보다 크거나 실행하는데 필수적인 요소는 아니며, 특정 작업을 수행하는 단일 기능(마이크로서비스)이 컨테이너에 패키징되는 경우가 많다.
컨테이너는 경량화 속성과 공유 운영 체제로 인해 여러 환경 간에 매우 쉽게 이동한다.

가상머신은 일반적으로 크기가 GB 단위이다. 가상머신은 자체 OS를 포함하고 있어 리소스 집약적인 기능 여러 개를 동시에 수행할 수 있다. 가상머신에서 사용할 수 있는 리소스가 늘어남에 따라 전체 서버, OS, 데스크탑, 데이터베이스, 네트워크를 추상화, 분할, 복제, 에뮬레이션할 수 있다.
(Virtual Machine 깔았다가 노트북이 확 느려진 경험을 한 사람 있을 걸?)

Docker

도커는 컨테이너 기반의 오픈소스 가상화 플랫폼중 하나로, Docker를 사용하면 인프라에서 애플리케이션을 분리하여 컨테이너로 추상화시켜 소프트웨어를 빠르게 제공할 수 있다.

Docker Image

도커 이미지는 요리의 레시피처럼 애플리케이션을 실행하는 데 필요한 모든 "재료" (코드, 라이브러리, 설정 파일 등)가 포함되어 있다!
이를 바탕으로 만든 "요리", 즉 애플리케이션이 Docker Container!

쿠버네티스는?

도커와 쿠버네티스 모두 컨테이너화 기술을 활용하여 애플리케이션을 관리하고 배포하는 데 사용된다는 공통점이 있는데, 차이점은 관리하는 대상이 다르다는 점이다.

  • 도커 : 개별 컨테이너 단위의 관리와 배포에 중점
  • 쿠버네티스 : 여러 컨테이너화된 애플리케이션의 클러스터 관리와 오케스트레이션에 중점을 두는 차이가 있습니다.
    (오케스트레이션 : 여러 개의 컴퓨터 시스템, 애플리케이션 및/또는 서비스를 조율하고 관리하는 것으로, 여러 개의 작업을 함께 연결하여 크기가 큰 워크플로나 프로세스를 실행하는 방식)

쉽게 말하면 컨테이너 한 개를 사용하는 경우에는 도커를 사용하고 다수의 컨테이너 사용이 필요한 경우에는 쿠버네티스를 사용한다.
도커는 컨테이너화된 애플리케이션의 개발, 배포, 실행에 중점을 두고 있으며, 쿠버네티스는 컨테이너화된 애플리케이션의 자동화된 배포, 관리, 확장을 위해 사용되는 클러스터 오케스트레이션 플랫폼입니다.


Devops

Development + Operations

DevOps는 애플리케이션과 서비스를 빠른 속도로 제공할 수 있도록 조직의 역량을 향상시키는 문화 철학, 방식 및 도구의 조합입니다.
DevOps 모델에서는 개발팀과 운영팀이 단일팀으로 병합되어
엔지니어가 개발에서 테스트, 배포, 운영에 이르기까지 전체 애플리케이션 수명 주기에 걸쳐 작업하고 단일 기능에 한정되지 않은 광범위한 기술을 개발합니다.
-What is DevOps? by AWS-

개발자 입장에서는 서비스를 계속 디벨롭해야 하므로, 계속 빠르게 개발하고, 배포하는 것에 관심을 둔다.
하지만 운영자의 입장에서는 안정적으로 서비스를 운영하는 것에 더 관심을 둔다.
개발과 운영 사이의 간극을 줄이자! 라는 목적으로 나온 개념이 Devops!

CI/CD

소프트웨어 배포 속도, 안정성을 높이기 위한 방법으로,
배포 과정을 자동화해서 짧은 주기로 배포하는 DevOps의 핵심 프로세스

AWS CodeSeries, Gihub actions, Jenkins 같은 툴로 CI/CD를 구축할 수 있다.

CI (Continuos Integration) : 지속적 통합

개발자들이 자신의 코드 변경 사항을 중앙의 저장소(예: GitHub, GitLab)에 빈번하게 병합하는 것을 의미한다.

  • 개발 초기에 오류와 충돌을 미리 발견해 실행이 가능한 상태로 코드를 유지
  • 코드를 저장소에 푸시할 때마다 자동 테스트가 실행되어 버그나 오류를 빠르게 감지하고 신속히 해결하여 소프트웨어 배포의 시간을 단축

CD : (Continuous Delivery/Deployment) : 지속적 전달 / 배포

Continuous Delivery : 개발된 코드를 실제 프로덕션 환경에 배포하기 전까지의 과정을 자동화하는 것으로, 최종 배포는 수동으로 실행할 수 있다.
Continuous Deployment: 모든 과정을 자동화하며, 테스트가 통과되면 코드 변경사항이 자동으로 프로덕션 환경에 배포됩니다.

profile
🌱Connecting the dots🌱

0개의 댓글