2. Container & Docker + CI/CD

2023. 10. 29. 01:24· ASC
목차
  1. Container
  2. Container의 특징
  3. Docker & Kubernetes
  4. DevOps 와 CI/CD
  5. DevOps
  6. CI/CD
  7. AWS CodeSeries
  8. Reference

Container

컨테이너는 소프트웨어 서비스를 실행하는 데 필요한 특정 버전의 프로그래밍 언어 런타임 및 라이브러리와 같은 종속 항목과 애플리케이션 코드를 함께 포함하는 경량 패키지입니다.

 

컨테이너는 운영체제 수준에서 CPU, 메모리, 스토리지, 네트워크 리소스를 쉽게 공유할 수 있게 해주며 컨테이너가 실제로 실행되는 환경에서 애플리케이션을 추상화할 수 있는 논리 패키징 메커니즘을 제공합니다.

Container의 특징

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

 

컨테이너와 VM의 차이

 

컨테이너는 가상 머신(VM)과 마찬가지로 애플리케이션을 관련 라이브러리 및 종속 항목과 함께 패키지로 묶어 소프트웨어 서비스 구동을 위한 격리 환경을 마련해준다.

  • 컨테이너는 VM보다 훨씬 가볍다.
  • 컨테이너는 OS 수준에서 가상화되고 VM은 하드웨어 수준에서 가상화된다.
  • 컨테이너는 OS 커널을 공유하며 VM에 필요한 것보다 훨씬 적은 메모리를 사용한다.

 

Docker & Kubernetes

Docker

이미지를 기반으로 컨테이너를 생성하고 실행하여 애플리케이션과 필요한 환경을 패키징 -> 컨테이너화 기술을 제공한다.

 

Docker Image

애플리케이션과 그것을 실행하는 데 필요한 모든 것을 포장한 것으로, 도커 이미지를 사용해서 실제로 실행되는 인스턴스(컨테이너)를 만들 수 있다.

  • 애플리케이션을 실행하는 데 필요한 모든 "재료" (코드, 라이브러리, 설정 파일 등)가 들어있는 "레시피" 역할.
  • Docker 이미지를 만들기 위해서는 Dockerfile이 필요하다.

 

Docker Container

Docker Image를 바탕으로 실행되는 애플리케이션.

  • 레시피를 따라 만들어진 "요리"

 

Kubernetes

  • 컨테이너화 된 애플리케이션의 자동화된 배포, 확장 및 관리를 위한 오픈소스 플랫폼
  • 애플리케이션의 상태와 구성을 유지하고 컨테이너의 스케일링과 로드 밸런싱을 관리
  • 서비스 디스커버리, 자동 복구, 롤링 업데이트 등의 기능을 제공하여 애플리케이션의 운영을 효율적으로 관리

=> 컨테이너 오케스트레이션(Orchestration) 시스템으로 컨테이너화 된 애플리케이션을 효율적으로 실행, 관리

 

개발자는 도커를 사용하여 컨테이너 이미지를 생성 및 조작하고, Kubernetes를 사용하여 여러 마이크로서비스를 대규모로 관리합니다. 각 마이크로서비스는 여러 개의 컨테이너 자체로 개별 구성됩니다.

 

 

Kubernetes에서는 더 이상 Docker를 지원하지 않는다.

Docker Engine은 CRI 표준 인터페이스를 구현하지 않으므로 이를 위해 Kubernetes는 Dockershim 코드를 만들어 일시적인 해결책으로 사용해왔다. 하지만 이를 유지하는 것은 Kubernetes 를 유지보수하는 데 큰 부담이 되었고, Dockershim과 호환되지 않는 추가 기능들이 새로운 CRI 런타임에 구현되고 있으므로, Dockershim을 제거함으로써 해당 영역의 추가적인 개발이 가능하다.

https://kubernetes.io/blog/2022/02/17/dockershim-faq/

DevOps 와 CI/CD

DevOps

DevOps: Development + Operations

개발과 운용 간의 간극을 좁히기 위함

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

 

CI/CD

CI (Continuous Integeration): 지속적 통합

  • 개발자들이 자신의 코드 변경 사항을 중앙의 저장소(ex. GitHub, GitLab)에 비번하게 병합하는 것
  • 개발 초기에 오류와 충돌을 미리 발견해 실행이 가능한 상태로 코드를 유지하기 위함
  • 코드를 저장소에 푸시할 때마다 자동 테스트가 실행되어 버그나 오류를 빠르게 감지하고 신속히 해결하여 소프트웨어 배포의 시간을 단축
  • ex. GitHub Actions

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

  • Continuous Delivery: 개발된 코드를 실제 프로덕션 환경에 배포하기 전까지의 과정을 자동화하는 것. 최종 배포는 수동으로 실행할 수 있다.
  • Continuous Development: 모든 과정을 자동화하며, 테스트가 통과되면 코드 변경사항이 자동으로 프로덕션 환경에 배포된다.
  • 코드 변경사항을 신속하게, 안정적으로, 그리고 지속적으로 고객에게 전달하기 위함
  • ex. Jenkins
CI/CD -> 소프트웨어의 배포 속도, 안정성을 높이기 위한 방법으로 배포 과정을 자동화해서 짧은 주기로 배포하는 DevOps의 핵심 프로세스

 

AWS CodeSeries

AWS CodeCommit

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

AWS CodeBuild

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

AWS CodeDeploy

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

AWS CodePipeline

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

Reference

https://cloud.google.com/learn/what-are-containers?hl=ko

https://kubernetes.io/blog/2022/02/17/dockershim-faq/

저작자표시 (새창열림)

'ASC' 카테고리의 다른 글

6. Storage - S3 & CloudFront  (0) 2023.11.23
5. RDS & DynamoDB  (1) 2023.11.16
Computing - Lightsail & EC2, Auto Scaling & ELB  (0) 2023.11.08
3. VPC & Route53  (0) 2023.11.01
1. 클라우드 컴퓨팅 개요 & IAM  (0) 2023.09.29
  1. Container
  2. Container의 특징
  3. Docker & Kubernetes
  4. DevOps 와 CI/CD
  5. DevOps
  6. CI/CD
  7. AWS CodeSeries
  8. Reference
'ASC' 카테고리의 다른 글
  • 5. RDS & DynamoDB
  • Computing - Lightsail & EC2, Auto Scaling & ELB
  • 3. VPC & Route53
  • 1. 클라우드 컴퓨팅 개요 & IAM
호프
호프
Untitled호프 님의 블로그입니다.
호프
Untitled
호프
전체
오늘
어제
  • 분류 전체보기 (341)
    • 오류😬 (4)
    • 스터디📖 (96)
      • 웹 개발 기초 (8)
      • Spring (20)
      • ML, DL (30)
      • Node.js (22)
      • React (0)
      • 블록체인 (12)
      • Go (3)
      • Javascript (1)
    • 알고리즘💻 (153)
      • 그리디 (23)
      • Bruteforce&Backtracking (16)
      • DP (17)
      • 이분탐색&정렬&분할정복 (17)
      • 누적합&투포인터 (6)
      • 스택&큐&덱 (19)
      • 그래프(DFS&BFS) (19)
      • 트리 (7)
      • 우선순위큐&다익스트라 (11)
      • 벨만포드&플로이드와샬 (8)
      • map&set&number theory (5)
      • 기타 (5)
    • 프로젝트 (3)
      • 캡스톤 디자인 프로젝트 (3)
    • 블록체인🔗 (3)
      • Solana (2)
      • 개발 (0)
      • Harmony (1)
    • ASC (6)
    • CS (73)
      • 데이터베이스 (12)
      • 클라우드컴퓨팅 (21)
      • 운영체제 (11)
      • 컴퓨터네트워크 (14)
      • 블록체인응용 (15)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 복습

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.1
호프
2. Container & Docker + CI/CD
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.