AWS/Docker+CICD

Docker CICD(Continuous Integration/Continuous Deployment(Delivery)) (설치)

sehunbang 2024. 3. 29. 09:38

  • Continuous Integration/Continuous Deployment(Delivery)의 약자로, 지속적인 통합과 지속적인 제공을 의미
  • 기본 개념
    • 지속적인 통합(Continuous Integration) : code 의 지속적인 통합. 자동화된 빌드와 자동화된 테스트를 제공합니다. 안정적이 코드를 제공 할수 있는 밑거름이 됩니다.
    • 지속적인 서비스 제공 (Continuous Delivery) :
    • 지속적인 배포(Continuous Deployment) :

소스 변경문을 빠르게 테스트 하고. 자동화된 테스트 들을 지냉하면서 자동으로 운영 환경 까지 배포합니다.

  • 지속적인 통합(Continuous Integration) : 코드의 지속적인 통합
    • 자동화된 빌드와 자동화된 테스트를 제공
    • 안정적인 코드를 빠르게 제공할 수 있는 밑거름
  • 지속적인 서비스 제공(Continuous Delivery)
  • 지속적인 배포(Continuous Deployment)
    • 배포를 자동화하여 배포 시간을 단축하고 코드 결과물을 빠르게 지속적으로 제공
  • 단계
    • 코드 작성: 개발자들은 소스 코드를 작성하고 저장소(repository)에 업로드
    • 빌드: 저장소에서 최신 소스 코드를 가져와 빌드를 수행. 빌드는 소스 코드를 컴파일하고, 라이브러리를 추가하고, 필요한 파일을 생성하는 과정.
    • 테스트: 빌드된 결과물을 대상으로 테스트를 수행. 테스트는 기능이 정상적으로 작동하는지 확인하고, 버그를 발견하고 수정하는 과정.
    • 배포: 테스트를 통과한 결과물을 배포. 배포는 서버에 업로드하거나, 사용자에게 제공하는 과정k

 

--- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- 

  • 과거의 배포
    • 소프트웨어 개발주기(SDLC, Software Development Life Cycle) 중 폭포수(waterfall) 개발 방식

  • 오랜 시간 동안 구현하고 테스트하여 가끔 배포
    • 이 과정에서 한 대의 서버에 배포하기 위해 다음과 같은 과정을 n개 서버에 반복
      • 클러스터에서 서버 1 분리
      • 서버 1에서 톰캣 종료
      • 기존 앱 버전(WAR 파일) 제거
      • 새 앱 버전(WAR 파일) 복사
        • ssh 접속 또는 scp 복사
      • 구성 파일의 속성 업데이트
      • 톰캣 시작
      • 클러스터에 서버 1 다시 연결
  • 출시 직후 진행된 프로덕션 테스트에서 아무도 발견하지 못한 버그가 있는 경우에는 어떻게 해야 할까요?
    • 되돌리거나(롤백) 빠르게 수정하고 테스트하여 다시 추가 배포하거나 하는 큰 비용

--- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- 

--- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- 

  • 현대적인 개발 과정
    • 스크럼으로 대표되는 애자일 개발

특정 주기마다 개발, 테스트 및 프로덕션에 통합된 기능을 출시

  • 이 상황에서 테스트 및 기능 출시에 오랜 기능이 걸리고 “손배포” 를 통해 실패 위험성을 안고 있다면?
    • 빠르게 배포하는 것이 사실상 불가능

Docker를 통해 서버를 표준화하고 같은 환경에서 테스트 및 배포 테스트를 진행하고 이 과정을 자동화.

  • 테스트로 검증된 자동화 배포를 사용하여 실패 확률 저하
  • 자동화된 과정으로 지속적으로 코드를 통합하여 지속적으로 자동 배포

컨테이너와 빌드/테스트 도구의 발전에 따라 Docker가 테스트 뿐만 아니라 실제 배포도 담당.

 

02. Docker 기초

  • 도커 사용 이유
    • 애플리케이션 개발과 배포가 편해져요.
      • Docker Container 내부에서 여러 소프트웨어를 설치해도 호스트 OS에는 영향이 없어요.
      • CI/CD에서 지속적인 통합(Continuous Integration) 과정의 테스트에서 Docker를 활용해요.
      • 어떤 서버에 올리더라도 같은 환경으로 구성된 컨테이너로 동작하기 때문에 표준화된 배포를 구성할 수 있어요.
    • 여러 애플리케이션의 독립성과 확장성이 높아져요.
    • Docker가 가상화에서 사실상 표준의 위치에요.

지금은 이해하기 어려운 내용이지만, 이 과정을 모두 듣고 나서 이 부분을 다시 살펴보시면 잘 이해하실 수 있을 거에요.

 

Window 설치

1.

 

 

2.

wsl --install

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

wsl --update

 

3. 우번투 설치

https://apps.microsoft.com/detail/9pn20msr04dw?gl=KR&hl=ko-kr

 

Ubuntu 22.04.3 LTS - Microsoft Store 공식 앱

Install a complete Ubuntu terminal environment in minutes with Windows Subsystem for Linux (WSL). Develop cross-platform applications, improve your data science or web development workflows and manage IT infrastructure without leaving Windows. Key features

apps.microsoft.com

 

# docker engine gpg 키 등록
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# apt source 에 docker 관련 추가
echo \
  "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

# docker engine 설치
sudo apt-get install -y docker-ce docker-ce-cli containerd.io \
docker-buildx-plugin docker-compose-plugin docker-compose

# docker 그룹에 현재 계정을 등록하여 sudo 없이 docker 명령을 사용하게 함
sudo usermod -aG docker user
sudo service docker restart

# 새로운 터미널을 열고 확인
docker version

 

 

Docker 및 Docker Compose 버전 확인

# docker version 확인

docker --version

# docker compose version 확인

docker-compose --version

 

 

 

 

4. Windows 에 Docker Desktop 설치

 

https://docs.docker.com/desktop/install/windows-install/

 

Install Docker Desktop on Windows

Get started with Docker for Windows. This guide covers system requirements, where to download, and instructions on how to install and update.

docs.docker.com

 

 

Container 실행테스트

# nginx 이미지 다운받기

docker image pull nginx:1.25.3-alpine

docker images docker image history nginx:1.25.3-alpine

docker run -d -p 8001:80 --name webserver01 nginx:1.25.3-alpine

docker ps | grep webserver01 docker port webserver01 curl localhost:8001