웹 개발 파이프라인
파이프라인 자동화 도구들
- 컨테이너 가상화 및 클러스터 운용
Docker + Kubernetes
- 소프트웨어 개발 파이프라인 자동화 서버
Jenkins
- 구성 관리 자동화
Ansible
- 소프트웨어 버전 관리
GitHub
- 그 외
빌드 도구, 단위 테스트 프레임워크, 정적 코드 분석기, 인수 테스트 프레임워크 등
컨테이너화
응용 프로그램, 설정 파일, 라이브러리, 그리고 이들 사이의 의존성 관계를 한 군데 묶어 관리
- 소프트웨어 개발 및 배포의 효율과 안정성을 향상시킴
- 하이퍼바이저에 의한 가상 기계의 대체 및 보완 방식으로 각광받고 있음
- 시스템 의존성이 최소화되어 소프트웨어 시스템의 이식이 용이해짐
- 예측 가능하고 유연한 소프트웨어 실행 환경을 제공하여 클라우드 컴퓨팅 인프라에서 활용도가 높음
지속적 통합 파이프라인 (CI Pipleine)
- 리포지토리에 코드 커밋이 발생할 때마다, 빌드, 단위 테스트, 정적 분석등을 행함

자동 인수 테스트
- Docker와 Jenkins을 결합하여 인수 테스트 환경을 만들고 테스트 수행
가상화
- 컴퓨팅 자원의 추상화를 일컫는 광범위한 용어
- 물리적인 컴퓨팅 자원의 특징을 다른 시스템, 응용 프로그램, 최종 사용자들이 자원과 상호 작용하는 방식으로부터 감추는 기술
- 컴퓨터 안에 또 다른, 가상의 컴퓨터가 존재하도록 하는 기능
가상화의 이점
시스템 측면
- 시스템 이용률 향상
- 설정의 구성과 복원이 용이
비즈니스 측면
- 자본 및 운영 비용 절감
- 다운 타임 최소화(또는 제거)
- 비즈니스 연속성 및 재해 복구 향상
- 데이터 센터 관리 간소화
우리의 관심
- 개발한 소프트웨어의 배포, 테스트, 구성 관리등에 통일된 환경 제공
- 소프트웨어 통합/인도 프로레스의 자동화에 용이
서버 가상화 기술의 진화
가상 기계 기반
- 하이퍼바이저 이용
- Type1 : 네이티브 또는 베어메탈형 : 전가상화, 반가상화
- Type2 : 호스트형
컨테이너 기반
컨테이너 사용의 이점
- 가상 기계 기반의 대체 또는 보완 방식으로 각광받음
- 소프트웨어 개발 및 배포의 효율, 안정성 향상
Docker

- 이미지 : 실행 가능한 컨테이너를 만들기 위한 거푸집
- 컨테이너 : 도커가 실행하는 격리된 환경과 그 내부
도커 이미지
- 응용을 실행하는 데 필요한 모든 파일들과 그것을 실행하는 방법을 한데 묶어놓은 것
- 상태를 저장하지 않는 방식(stateless) 네트워크로 전송, 레지스트리에 저장, 이름 및 버전 저장 가능
- 계층화되어 있다는 특징을 갖고 있으며, 어떤 이미지로부터 다른 이미지를 만드는 것이 가능
도커 컨테이너
- 이미지의 실행 인스턴스
- 하나의 이미지로부터 여러개의 컨테이너(인스턴스)를 만들어 동일한 응용을 여러 개 실행할 수 있음(각각은 독립되어 있음)
- 상태를 저장하는 방식(stateful) 컨테이너를 사용하면서 상태를 변경할 수 없음,
- 컨테이너가 소멸하면 상태 또한 소멸함
도커 명령어
- docker run <이미지 이름> : 이름이 주어진 이미지를 로컬 또는 레지스트리에서 가져다가 컨테이서 생성 후 실행
- docker ps, docker ps -a : 현재 실행 중인(-a : 중단된 것도 포함하여) 컨테이너들의 정보 조회
- docker images : 로컬 컴퓨터에 가지고 있는 이미지들의 정보를 조회
- docker stop <컨테이너 이름/ID> : 실행중인 컨테이너의 실행 중단(컨테이너가 사리지진 않음)
- docker rm<컨테이너 이름/ID> : 컨테이너 삭제
- docker rmi <이미지 이름/ID> : 이미지 삭제
이미지 생성 자동화
Dockerfile
- 계층 구조를 이용하여 도커 이미지를 만드는 절차를 기술하는 파일(text)
FROM [--platform=<platform><image>[AS<name>]
RUN<command>
ENRTYPOINT["executable","param1,"param2"]
이미지 빌드 명령어
docker build [OPTIONS] PATH | URL | -
바인드 마운트
docker run -v<호스트 경로>:<컨테이너 경로> <이미지>
도커 볼륨 이용
- 볼륨 생성 명령어
docker volume create <볼륨의 이름>