Programming-[Infra] 31

[에러] 도커 교과서(엘튼 스톤맨, 심효섭) - 13. 지속적 통합(CI) 파이프라인 구축. Gogs, 젠킨스

1. 도커로 CI 작업하기 CI란 CI는 배포가 가능한 결과물(artifact)을 코드로부터 만들어내는 파이프라인이다. 이 파이프라인에는 빌드, 테스트, 패키징 등이 포함된다. 코드 변경이나 특정 시각마다 CI 절차가 실행되도록 자동화할 수 있다. 도커를 이용하여 CI 인프라 구축 배포하고자하는 프로그램을 도커로 이미지화하면 기술 스택에 상관없이 똑같은 과정을 거칠 수 있기 때문에 CI 절차의 일관성을 확보할 수 있다. 깃허브, 애저 데브옵스 등 여러 CI를 지원하는 매니지드 서비스가 있으나, 컨테이너 내부에서 CI 인프라를 구축할 수 있도록 도커를 이용하여 빌드를 할 수도 있다. 이렇게 하면 조직 내부 보안을 유지할 수도 있고 인터넷이 다운된 상황에서도 내부적으로 CI를 진행할 수 있다. 2. CI 구..

도커 교과서(엘튼 스톤맨, 심효섭) - 12. 업데이트와 롤백

이번 글에서는 애플리케이션을 업데이트하고 롤백하는 절차에 대해서 배운다. 애플리케이션이 어떤 상황에서도 잘 유지되고 업데이트 되기 위한 설정을 하는 과정이며, 교재에서 제시하는 여러 상황별로 애플리케이션의 버전을 업데이트하면서 서비스의 고가용성을 확보하는 연습을 해본다. 1. 업데이트 프로세스 기본적인 업데이트 프로세스 직접 만든 이미지를 주기적으로 업데이트해야하는 경우가 있으나, 내 이미지를 업데이트 하지않더라도 이미지가 참조하는 여러 부분들의 업데이트 때문에라도 주기적인 업데이트가 필요하다. 대표적으로 생각하고 있어야하는 업데이트 주기가 적어도 4가지가 있다. 애플리케이션의 의존 모듈 업데이트 코드를 컴파일하는 SDK 업데이트 애플리케이션이 동작하는 플랫폼 업데이트 운영체제 업데이트 각 라이브러리와 ..

도커 교과서(엘튼 스톤맨, 심효섭) - 11. 스택, 컨피그, 시크릿, 스웜에서의 볼륨

1. 스택과 배포 스택은 여러 애플리케이션(서비스)와 그 애플리케이션의 레플리카, 네트워크 등을 관리하는 단위다. 스택도 일급 객체라서 명령어로 직접 호출이 가능하다. 컴포즈 파일을 이용해서 stack deploy를 해본다. 기본 배포 cd ./ch13/exercises docker stack deploy -c ./todo-list/v1.yml todo docker stack ls docker service ls stack deploy 명령어를 이용하여 배포하면, '_default'라는 이름이 붙은 네트워크가 생성되고 yml 파일의 내용을 따라 서비스가 실행되는 것을 볼 수 있다. -c 부옵션은 서비스, 네트워크, 볼륨 등의 정보를 정의한 컴포즈 파일의 path를 입력한다는 의미이다. 저자의 애플리케이션..

도커 교과서(엘튼 스톤맨, 심효섭) - 10. 도커 스웜과 쿠버네티스 소개

1. 컨테이너 오케스트레이션 오케스트레이션의 개념 각 서비스를 실행하는데 1개의 컴퓨터( = 서버, 호스트, 노드)에서 1개의 컨테이너만 실행하지 않는다. 앞서 배운 것처럼 1개의 서버에서 여러 개의 컨테이너를 띄우고, 여러 대의 서버에서 여러 컨테이너를 띄운다. 오케스트레이션 도구는 컨테이너 관리, 로드 밸런싱(요청을 여러 컴퓨터에 분배), 트래픽 분산, 불량 컨테이너 정상화 등의 작업을 담당한다. 오케스트레이션 도구의 구성 오케스트레이션 도구를 통칭하여 클러스터라고 부른다. 클러스터는 여러 대의 서버, 데이터베이스, 비밀값, 설정값, 공유 스토리지, 네트워크 등으로 구성된다. 그리기 2. 도커 스웜 도커 스웜과 쿠버네티스는 컨테이너 오케스트레이션 도구이다. 클라우드 환경에서 기능이나 활성화 정도가 쿠..

도커 교과서(엘튼 스톤맨, 심효섭) - 9. 여러 환경의 도커 실행

로컬, 테스트, 운영 환경에서 같은 이미지를 기반으로 하지만 다른 환경 설정값으로 배포해야 하는 경우들에 대해서 배운다. 1. 여러 개의 애플리케이션 배포 우선 같은 이미지와 설정으로 여러 개의 애플리케이션을 배포하는 방법에 대해서 배운다. 다시 말해 같은 이미지 파일로 어떻게 똑같은 애플리케이션을 여러 개 생성할 수 있는지 배운다. cd ./ch10/exercises docker-compose -f ./todo-list/docker-compose.yml up -d docker-compose -f ./todo-list/docker-compose.yml up -d 컨테이너 명명 규칙 컴포즈 파일 실행 시 컨테이너 이름은 다음 규칙으로 지어진다. (교재에는 중간 부분이 언더바(_) 였으나 실제로는 하이픈(-..

[TIL] AWS S3 donwload_file() method directory에 random string 붙는 현상. FileNotFoundError

1. 현상 S3의 boto3를 이용하여 donwload_file() 메서드를 실행한다. 첫 번째 인자인 obj.key는 S3에 저장된 파일의 key값, 두번째 인자는 저장된 버킷의 이름, 세 번째 인자는 다운로드한 파일을 저장할 디렉토리 이름이다. os.mkdir(folder, exist_ok=True) 를 써서 folder에 대한 경로는 로컬에 만들어놓고, obj.key값을 붙여서 저장할려고 했는데 저장이 안되고 디버깅 상에서 _packed라는 obj.key 상 파일 이름 뒤에 .bd88bF6E라는 이상한 문자열이 추가로 붙었다. 그리고 실행할 때마다 뒤 문자열이 임의로 계속 변경되었다. 2. 원인 random string이 붙는 현상 boto3는 파일 다운로드 중 파일의 이름 뒤에 random str..

도커 교과서(엘튼 스톤맨, 심효섭) - 8. 모니터링- prometheus, grafana

1. 컨테이너를 사용하는 환경의 모니터링 일반적인 환경은 서버의 목록과 각 서버의 현재 동작 상태를 표시해주는 형태이다. 컨테이너를 사용하는 환경은 수십~ 수백 개에 이르는 컨테이너가 생성 및 삭제를 반복하며 계속해서 동적으로 변화하는 환경이다. 이런 컨테이너 기반의 모니터링 및 측정에 연동되도록 그 자체가 컨테이너로 동작하는 오픈 소스 도구가 프로메테우스이다. 프로메테우스의 장점 모든 애플리케이션에서(Node.js 이든 닷넷이든 상관없이) 똑같이 구성된 측정값을 출력한다. 도커 엔진과 연결하여 도커 엔진 자체의 측정값도 추출할 수 있다. 도커 엔진의 daemon.json 파일 도커 엔진과 프로메테우스를 연결하기 위해서는 도커 엔진의 설정 파일인 daemon.json 파일에서 설정 내용을 추가해야한다. ..

도커 교과서(엘튼 스톤맨, 심효섭) - 7. 헬스, 디펜던시 체크

1. 헬스 체크 도커는 기본적으로 컨테이너의 애플리케이션 실행 파일, 자바, 닷넷 런타임, 셸 스크립트 같은 특정한 프로세스의 실행 상태를 확인한다. 프로세스가 종료되면 컨테이너도 종료된다. 그러나 프로세스는 실행 중이더라도 애플리케이션 내부적으로 에러가 발생해서 계속해서 에러를 응답하고 있는 상태이면 이런 기본 체크만으로는 부족하다. 이 때 활용할 수 있는 것이 헬스 체크이다. HEALTHCHECK 인스트럭션 이미지를 빌드할 때, Dockfiler상에 HEALCHECK 인스트럭션을 추가해서 특정 기능을 수행하는 헬스체크를 만들 수 있다. 교재의 예제 파일의 Dockerfile 내용은 아래와 같다. FROM diamol/dotnet-sdk AS builder WORKDIR /src COPY src/Num..

도커 교과서(엘튼 스톤맨, 심효섭) - 6. 도커 컴포즈, 스케일 관리 및 환경설정

1. 도커 컴포즈 도커 컴포즈는 YAML 파일로 작성한다. 이 파일은 애플리케이션을 구성하는 각 컴포넌트(컨테이너)가 어떤 상태여야 하는지를 기술하는 파일이다. 간단한 교재의 도커 컴포즈 파일 스크립트를 살펴보자. version: '3.7' services: todo-web: image: diamol/ch06-todo-list ports: - "8020:80" networks: - app-net networks: app-net: external: name: nat version: 도커 컴포즈 파일의 형식 버전. 각 형식 버전별로 문법이 약간씩 달라질 수 있다. services: 애플리케이션을 구성하는 모든 컴포넌트를 열거하는 부분이다. networks: 서비스 컨테이너가 연결될 모든 도커 네트워크를 열거..

도커 교과서(엘튼 스톤맨, 심효섭) - 5. volume, bind mount

1. 기록 가능 레이어와 이미지 레이어 하나의 이미지로 여러 개의 컨테이너를 생성하면, 각 컨테이너는 이미지의 레이어들을 기반으로 구성된다. 이 이미지 레이어들은 읽기 전용이다. 그리고 기록 가능 레이어(Writeable Layer)가 생성되어 각 컨테이너마다 다른 내용을 기록하고 저장할 수 있는 레이어가 생성된다. 컨테이너는 각자의 기록 가능 레이어를 갖는다 1. 같은 이미지로 이름만 변경해서 두 개의 컨테이너를 생성해본다. docker container run --name rn1 diamol/ch06-random-number docker container run --name rn2 diamol/ch06-random-number 2. docker cp 명령어를 사용하여 컨테이너에 있는 컨테이너 생성 시..