컨테이너: 프로그램을 실행하는 데 필요한 모든 것을 포함하는 상자
프로그램 코드뿐만 아니라 동작하기 위한 라이브러리, 환경설정 등 포함
프로그램 실행 환경이 어디든, 그 컨테이너만 옮겨놓고 실행하면 동일한 환경과 조건에서 동작 가능
-> 컨테이너: 호스트 OS상에 논리적인 구획(컨테이너)을 만들고, 어플리케이션을 작동시키기 위해 필요한 라이브러리나 어플리케이션 등을 하나로 모아, 별도의 서버인 것 처럼 사용할 수 있게 만든 것
-> 호스트 OS의 리소스를 논리적으로 분리시키고, 여러 개의 컨테이너가 공유하여 사용
-> 컨테이너는 오버헤드가 적기에 가볍고 고속으로 작동
이미지를 기반으로 컨테이너를 생성하고 실행하여 애플리케이션과 필요한 환경을 패키징
컨테이너화 기술을 제공
- Dockerfile: Docker 이미지를 만들기 위해 필요한 명령어를 담고 있는 파일
컨테이너화 된 애플리케이션의 자동화된 배포, 확장 및 관리를 위한 오픈소스 플랫폼
애플리케이션의 상태와 구성을 유지하고 컨테이너의 스케일링과 로드 밸런싱을 관리
서비스 디스커버리, 자동 복구, 롤링 업데이트 등의 기능을 제공하여 애플리케이션의 운영을 효율적으로 관리
컨테이너 오케스트레이션 시스템으로 컨테이너화 된 애플리케이션을 효율적으로 실행, 관리
- 오케스트레이션 시스템 :
여러 개의 컴퓨터 시스템, 애플리케이션 또는 서비스를 조율하고 관리하는 것으로, 여러 개의 작업을 함께 연결하여 크기가 큰 워크플로나 프로세스를 실행하는 방식
Docker Image: ‘레시피’
그 안에는 애플리케이션을 실행하는 데 필요한 모든 "재료" (코드, 라이브러리, 설정 파일 등)가 포함
애플리케이션과 그것을 실행하는 데 필요한 모든 것을 포장한 것이며, 이 이미지를 사용해서 실제로 실행되는 인스턴스(컨테이너)를 만들 수 있음
Docker Container: ‘요리’
Docker Image를 바탕으로 실행되는 애플리케이션이 Docker Container!
Dockerfile: docker image를 생성하는 데에 필요한 파일
Docker Hub에서 제공 image 확인: https://hub.docker.com/_/node
Development + Operations -> 개발과 운용 간의 간극 좁히기
DevOps: 애플리케이션과 서비스를 빠른 속도로 제공할 수 있도록 조직의 역량을 향상시키는 문화 철학, 방식 및 도구의 조합
DevOps 모델에서는 개발팀과 운영팀이 단일팀으로 병합되어 엔지니어가 개발에서 테스트, 배포, 운영에 이르기까지 전체 애플리케이션 수명 주기에 걸쳐 작업하고 단일 기능에 한정되지 않은 광범위한 기술을 개발
소프트웨어 배포 속도, 안정성을 높이기 위한 방법
배포 과정을 자동화해서 짧은 주기로 배포하는 DevOps의 핵심 프로세스
개발자들이 자신의 코드 변경 사항을 중앙의 저장소(예: GitHub, GitLab)에 빈번하게 병합하는 것을 의미
핵심 목표:
- 개발 초기에 오류와 충돌을 미리 발견해 실행이 가능한 상태로 코드를 유지
- 코드를 저장소에 푸시할 때마다 자동 테스트가 실행되어 버그나 오류를 빠르게 감지하고 신속히 해결하여 소프트웨어 배포의 시간을 단축
Continuous Delivery : 개발된 코드를 실제 프로덕션 환경에 배포하기 전까지의 과정을 자동화하는 것을 의미. 최종 배포는 수동으로 실행 가능
Continuous Deployment : 모든 과정을 자동화하며, 테스트가 통과되면 코드 변경사항이 자동으로 프로덕션 환경에 배포됨
핵심 목표:
- 코드 변경사항을 신속하게, 안정적으로, 그리고 지속적으로 고객에게 전달
Git 호환 버전 제어 시스템을 제공하는 서비스
-> 프라이빗 Git 저장소를 제공하며, 확장 성과 높은 가용성을 제공
-> AWS의 보안 기능을 사용하여 코드 및 자산을 보호
애플리케이션을 다양한 서비스 (예: EC2, Lambda, ECS 등)에 자동으로 배포
-> 다양한 배포 전략을 지원하며, 훅을 사용해 배포 라이프사이클 중에 사용자 정의 스크립트나 작업을 실행
소스 코드를 컴파일하고, 테스트를 실행하며, 배포 가능한 아티팩트를 생성하는 데 사용되는 완전관리형 빌드 서비스
-> 서버 또는 빌드 인프라 관리 없이 코드 빌드 및 테스트를 수행
-> 컨테이너 기반 빌드를 지원하므로 사용자 정의 빌드 환경 생성 가능
지속적인 통합(CI) 및 지속적인 전달(CD) 파이프라인을 자동화하는 완전관리형 서비스
-> 여러 AWS 도구와 통합되어 워크플로를 자동화 가능
-> CodePipeline은 코드 변경을 감지하고 이를 빌드, 테스트, 배포하는 전체 프로세스를 자동화