1. CI/CD란?
자동 배포 파이프라인
코드의 통합, 테스트, 배포의 각 단계를 유지하면서 동시에 "자동화"하는 것이 필요하고 또한 지속적 모니터링도 필수이다.
1. 코드 변경
2. 지속적 통합(CI; Continuous Integration): 코드가 올바르게 빌드 및 통합되는지를 자동으로 확인.
3. 자동 인수 테스트
-인수 테스트 (UAT; User Acceptance Test): 구현한 기능이 고객 요구사항과 맞는지 확인.
제품이 릴리스할 준비가 되어있는가?
전통적으로 QA(Quality Assurance) 팀의 역할.
-CD 파이프라인에 통합: 품질 점검을 나중에 하는 것이 아니라 개발 중에 제품에 내재시키자는 것.
개발자가 구현을 마치는 즉시 고객이 원하는 제품인지를 검증
소프트웨어의 인도 결정을 자동화한다는 뜻
4. 구성 관리
-구성관리 (Configuration Management): 소프트웨어가 실행되는 환경 구성도 자동으로.
-CD 파이프라인에 통합: 프로덕션 환경의 응용을 자동으로 구성하고 배포.
구성 관리 도구를 이용하여 구성 관리 파일을 버전 관리 시스템에 저장하고 변경 이력 추적
2. 앞으로 사용할 파이프라인 자동화 도구들
1. 컨테이너 가상화 및 클러스터 운용: Doker + Kubernetes
2. 소프트웨어 개발 파이프라인 자동화 서버: Jenkins
3. 구성 관리 자동화: Ansible
4. 소프트웨어 버전 관리(SCM; Source Code Management): GitHub
5. 그 외: 빌드 도구(자동화 지원), 단위 테스트 프레임워크, 정적 코드 분석기, 인수 테스트 프레임워크, ...
3. 컨테이너화(Containerization)란?
응용 프로그램, 설정(configuration)파일, 라이브러리, 그리고 이들 사이의 의존성 관계를 한군데에 묶어 (컨테이너 안에 넣어) 관리하는 것.
- 소프트웨어 개발 및 배포의 효율과 안정성을 향상시킴
- 하이퍼바이저(hypervisor)에 의한 가상 기계(VM; virtual machine)의 대체 및 보완 방식으로 각광받고 있음
- 시스템 의존성이 최소화되어 소프트웨어 시스템의 이식이 용이해짐
- 예측 가능하고 유연한 소프트웨어 실행 환경을 제공하여 클라우드 컴퓨팅 인프라에서 활용도가 높음
4. 하이퍼바이저(Hypervisor)란?
단일 물리적 머신에서 여러 가상 머신을 실행하는 데 사용할 수 있는 소프트웨어이다. 모든 가상 머신에는 고유한 운영 체제와 애플리케이션이 있는데, 하이퍼바이저는 필요에 따라 CPU 및 메모리와 같은 기본 물리적 컴퓨팅 리소스를 개별 머신에 할당한다. 따라서 물리적 IT 인프라의 최적 사용을 지원한다.
하이퍼바이저란 무엇인가요?- 하이퍼바이저 설명 - AWS
하이퍼바이저란 무엇인가요? 하이퍼바이저는 단일 물리적 머신에서 여러 가상 머신을 실행하는 데 사용할 수 있는 소프트웨어입니다. 모든 가상 머신에는 고유한 운영 체제와 애플리케이션이
aws.amazon.com
5. 컨테이너 가상화
가상화(Virtualization)
컴퓨팅 자원(resource)의 추상화를 일컫는 광범위한 용어.
컴퓨터 안에 또 다른, 즉 가상의 컴퓨터가 존재하도록 하는 기술이라고 할 수 있다.
가상 기계(VM; Virtual Machine) 기반과 호스트 OS의 컨테이너 기술을 이용하는 컨테이너(container) 기반으로 나눌 수 있다.
하이퍼바이저(Hypervisor)와 도커(Docker)의 차이
컨테이너 사용의 이점
컨테이너 가상화는 소프트웨어 개발 및 배포의 효율과 안정성을 향상시켜 Virtual Machine의 대체 또는 보완 방식으로 각광받고 있다. 컨테이너는 가상 머신에 비해 디스크 용량이 절감되고, 오버헤드가 낮다.(경량화)
응용 프로그램 + 설정 파일 + 라이브러리 + 이들 사이 의존성 관계 -> 컨테이너
컨테이너 엔진의 도움으로 시스템 의존성이 최소화되어 소프트웨어 시스템의 이식이 용이해졌다.
6. 본격적으로 도커에 대해..
도커 이미지와 도커 컨테이너
도커 이미지를 이용해서 컨테이너를 만들어 실행할 수 있다.
도커 이미지(Docker images)
- 실행 가능한 컨테이너를 만들기 위한 거푸집. 소프트웨어를 설치하기 위한 설치 파일
- 응용을 실행하는 데 필요한 모든 파일들과 그것을 실행하는 방법을 한데 묶어 놓은 것
- 상태를 저장하지 않는(stateless) 방식.
- 이미지 레지스트리를 통하여 네트워크를 통해 전송 가능
- 이름 및 버전 지정 가능
- 계층구조를 가지고 있고, 어떤 이미지로부터 다른 이미지를 만드는 것이 가능
도커 컨테이너(Docker containers)
- 도커가 실행하는 격리된 환경과 그 내부. 실제 실행되는 소프트웨어
- 도커 엔진에 의해서 관리되며, 마치 컴퓨터 하나가 새로 생겨서 정해진 일을 수행하는 것과 같은 모습을 보여준다.
- 이미지의 실행 인스턴스(instance)
- 하나의 이미지로부터 여러 컨테이너(인스턴스)를 만들어 동일한 응용을 여러 개 실행할 수 있음. (각각은 독립)
- 현재의 상태가 저장되어있는 (stateful) 방식. 컨테이너를 사용하면서 상태를 변경할 수 있음. 그러나 컨테이너가 소멸하면 이 상태도 잊어버림.
7. docker 실습
docker run <이미지 이름>
이름이 주어진 이미지를 로컬 또는 레지스트리에서 가져다가 컨테이너를 만들어 실행
docker ps
-> 현재 실행 중인 컨테이너들의 정보 조회
-> -a 옵션을 붙이면 실행이 끝난 이미지들까지 조회됨
docker images
로컬 컴퓨터에 가지고 있는 이미지들의 정보를 조회
docker rmi <이미지 이름/ID>
-> 이미지 삭제
docker rm <컨테이너 이름/ID>
-> 컨테이너 삭제
docker stop <컨테이너 이름/ID>
현재 실행 중인 컨테이너의 실행을 중단(컨테이너가 없어지지는 않음)