[ASC] Container & Docker + CI/CD

채린·2023년 10월 30일
0

EWHA AWS Cloud Clubs

목록 보기
4/10

Container

컨테이너: 프로그램을 실행하는 데 필요한 모든 것을 포함하는 상자
                프로그램 코드뿐만 아니라 동작하기 위한 라이브러리, 환경설정 등 포함
                프로그램 실행 환경이 어디든, 그 컨테이너만 옮겨놓고 실행하면 동일한 환경과 조건에서 동작 가능

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

Docker and Kubernetes

Docker

이미지를 기반으로 컨테이너를 생성하고 실행하여 애플리케이션과 필요한 환경을 패키징
컨테이너화 기술을 제공
- Dockerfile: Docker 이미지를 만들기 위해 필요한 명령어를 담고 있는 파일

Kubernetes

컨테이너화 된 애플리케이션의 자동화된 배포, 확장 및 관리를 위한 오픈소스 플랫폼
애플리케이션의 상태와 구성을 유지하고 컨테이너의 스케일링과 로드 밸런싱을 관리
서비스 디스커버리, 자동 복구, 롤링 업데이트 등의 기능을 제공하여 애플리케이션의 운영을 효율적으로 관리
컨테이너 오케스트레이션 시스템으로 컨테이너화 된 애플리케이션을 효율적으로 실행, 관리
- 오케스트레이션 시스템 :
여러 개의 컴퓨터 시스템, 애플리케이션 또는 서비스를 조율하고 관리하는 것으로, 여러 개의 작업을 함께 연결하여 크기가 큰 워크플로나 프로세스를 실행하는 방식

Docker Image ? Docker Container ?

Docker Image: ‘레시피’
그 안에는 애플리케이션을 실행하는 데 필요한 모든 "재료" (코드, 라이브러리, 설정 파일 등)가 포함
애플리케이션과 그것을 실행하는 데 필요한 모든 것을 포장한 것이며, 이 이미지를 사용해서 실제로 실행되는 인스턴스(컨테이너)를 만들 수 있음

Docker Container: ‘요리’
Docker Image를 바탕으로 실행되는 애플리케이션이 Docker Container!

Dockerfile

Dockerfile: docker image를 생성하는 데에 필요한 파일
Docker Hub에서 제공 image 확인: https://hub.docker.com/_/node


Devops와 CI/CD

Devops ?

Development + Operations -> 개발과 운용 간의 간극 좁히기

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

CI/CD

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

CI (Continuos Integration) 지속적 통합

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

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

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

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

핵심 목표:
   - 코드 변경사항을 신속하게, 안정적으로, 그리고 지속적으로 고객에게 전달

AWS CodeSeries

Git 호환 버전 제어 시스템을 제공하는 서비스
-> 프라이빗 Git 저장소를 제공하며, 확장 성과 높은 가용성을 제공
-> AWS의 보안 기능을 사용하여 코드 및 자산을 보호

애플리케이션을 다양한 서비스 (예: EC2, Lambda, ECS 등)에 자동으로 배포
-> 다양한 배포 전략을 지원하며, 훅을 사용해 배포 라이프사이클 중에 사용자 정의 스크립트나 작업을 실행

소스 코드를 컴파일하고, 테스트를 실행하며, 배포 가능한 아티팩트를 생성하는 데 사용되는 완전관리형 빌드 서비스
-> 서버 또는 빌드 인프라 관리 없이 코드 빌드 및 테스트를 수행
-> 컨테이너 기반 빌드를 지원하므로 사용자 정의 빌드 환경 생성 가능

지속적인 통합(CI) 및 지속적인 전달(CD) 파이프라인을 자동화하는 완전관리형 서비스
-> 여러 AWS 도구와 통합되어 워크플로를 자동화 가능
-> CodePipeline은 코드 변경을 감지하고 이를 빌드, 테스트, 배포하는 전체 프로세스를 자동화

0개의 댓글