사진과 음악을 좋아하는 개발자 지망생의 블로그

[클라우드] 7. AWS CLI, Docker 본문

개발/클라우드(with amazon)

[클라우드] 7. AWS CLI, Docker

devculture309 2023. 5. 19. 18:07
반응형

1. AWS CLI

1) AWS 명령줄 인터페이스

  - AWS CLI는 AWS 서비스를 관리하는 통합 도구

  - 도구 하나만 다운로드하여 구성하면 여러 AWS 서비스를 명령줄에서 제어하고 스크립트를 통해 자동화 할 수 있다

    ※ ASW CLI 설치 가이드 문서

 

최신 버전의 AWS CLI 설치 또는 업데이트 - AWS Command Line Interface

이전 버전에서 업데이트하는 경우 unzip 명령을 실행하면 기존 파일을 덮어쓸지 묻는 메시지가 표시됩니다. 스크립트 자동화와 같은 경우에 이러한 프롬프트를 건너뛰려면 unzip에 대한 -u 업데이

docs.aws.amazon.com

 

2) AWS CLI을 작업 수행 목록

  ① 인프라 구성 관리

    - 인스턴스 생성, 네트워크 구성, 스토리지 설정 등과 같은 인프라 리소스를 관리함

 

  ② 서비스 배포 및 관리

    - AWS Lambda 함수, Amazon S3 버킷 등과 같은 AWS 서비스를 배포하고 관리함

 

  ③ 보안 및 엑세스 제어

    - IAM(Identity and Access Management) 사용자, 그룹 및 권한 설정과 같은 보안 및 엑세스 관리 작업을 수행

 

  ④ 데이터 처리

    - Amazon DynamoDB 테이블, Amazon Redshift 클러스터 등과 같은 데이터 관련 작업을 수행

 

  ⑤ 로그 및 모니터링

    - AWS CloudWatch 로그 및 메트릭을 검색하고 모니터링함

 

 

 

2. Docker

1) Docker

   - 컨테이너 기반 애플리케이션의 배포, 관리 및 실해응ㄹ 지원하는 서비스

   - Docker는 애플리케이션과 해당 종속성을 포함한 가볍고 격리된 실행 환경을 제공하는 오픈 소스 컨테이너 플랫폼

 

 

2) 이미지(Image)와 컨테이너(Container)

  ① 이미지(Image)

    - 애플리케이션과 모든 종속성(라이브러리, 실행 파일, 설정 등)을 포함한 읽기 전용 템플릿

    - 컨테이너를 생성하는 데 사용

    - Docker 이미지는 Dockerfile이라는 텍스트 파일에 정의되며, 이 파일에는 애플리케이션 구성과 종속성을 설명하는

      명령어가 포함됨

    - Docker 이미지는 여러 개의 계층(layers)으로 구성되며, 각 계층은 이전 계층을 기반으로 변경 및 추가된 사항을 나타냄

    - 이미지는 Docker 레지스트리에 저장되거나 이미지를 공유하기 위해 사용될 수 있음

 

  ② 컨테이너(Container)

    - Docker 이미지를 기반으로 생성되어 실행 중인 인스턴스

    - 컨테이너는 격리된 환경에서 독립적으로 실행되며, 애플리케이션과 해당 종속성을 실행할 수 있는 환경을 제공

    - 각 컨테이너는 고유한 파일 시스템, 프로세스 공간, 네트워크 인터페이스 등을 가지며,

      호스트 시스템 또는 다른 컨테이너와 격리되어 작동

    - 컨테이너는 이미지를 기반으로 생성되므로 필요한 만큼의 컨테이너를 빠르게 생성하고 중지할 수 있

    - 또한, 각 컨테이너는 독립적으로 관리되므로 개별 컨테이너에 대한 설정, 모니터링 및 관리 작업이 가능

 

 

3) Docker LIFE CYCLE

  ① 생성(Create)

    - Docker 이미지를 기반으로 컨테이너를 생성

    - 이미지는 컨테이너가 실행될 때 사용할 애플리케이션 및 종속성을 포함

 

  ② 실행(Start)

    - 생성된 컨테이너를 실행

    - 컨테이너는 호스트 머신에서 격리된 환경에서 독립적으로 실행

    - 실행된 컨테이너는 컨테이너 내부의 애플리케이션을 실행하고 외부와의 통신을 수행할 수 있음

   일시 정지(Pause)

    - 실행 중인 컨테이너를 일시적으로 정지시킴

    - 컨테이너의 상태는 일시적으로 중단되지만 메모리 상태 등은 유지

    - 컨테이너를 다시 시작하면 일시 정지 상태에서 실행 상태로 돌아감

 

   재시작(Restart)

    - 실행 중인 컨테이너를 재시작함

    - 재시작 후에는 동일한 상태와 구성으로 다시 실행됨

 

  정지(Stop)

    - 실행 중인 컨테이너를 정지시킴

    - 컨테이너는 종료되며 실행 중인 애플리케이션도 중지

    - 정지된 컨테이너는 필요에 따라 다시 시작될 수 있음

 

   제거(Remove)

    - 컨테이너를 완전히 제거함

    - 컨테이너가 더 이상 필요하지 않을 때 사용됨

    - 제거된 컨테이너는 시스템에서 완전히 삭제됨

 

 

 

3) Docker 네트워크(Network)

  도커 네트워크 생성

    - Docker 네트워크를 생성하면 가상 네트워크가 호스트 시스템 위에 생성

    - 네트워크는 고유한 이름과 식별자를 가지며, 컨테이너가 해당 네트워크에 참여할 수 있

 

  ② 컨테이너 연결

    - Docker 네트워크에 속한 컨테이너는 네트워크를 통해 서로 통신할 수 있

    - 동일한 네트워크에 속한 컨테이너는 호스트 이름을 사용하여 서로 찾고 통신할 수 있음

 

  네트워크 드라이버

    - Docker는 다양한 네트워크 드라이버를 제공

    - 기본적으로 "bridge" 네트워크 드라이버가 사용되며, 컨테이너에 자동으로 IP 주소를 할당하여 호스트와 통신

    - 그 외에도 "host", "overlay", "macvlan" 등 다양한 네트워크 드라이버를 사용할 수 있

 

  컨테이너 간 분리

    - Docker 네트워크는 컨테이너 간에 네트워크 분리를 제공

    - 각 컨테이너는 격리된 네트워크 스택을 가지며, 다른 컨테이너와 격리된 환경에서 실행

 

  외부 연결

    - Docker 네트워크는 컨테이너와 호스트 시스템 또는 외부 네트워크 간의 통신을 가능하게 

    - 컨테이너는 네트워크 포트 매핑을 통해 호스트 시스템의 특정 포트와 연결할 수 있음

  

 

4) Docker Compose

  - 멀티 컨테이너 애플리케이션을 정의, 구성 및 실행하기 위한 도구

  - Docker Compose를 사용하면 YAML 파일을 작성하여 여러 컨테이너를 하나의 서비스로 정의하고,

    한 번에 실행 및 관리할 수 있음

  - Docker  Compose 특징

    ① 애플리케이션 정의

      - Docker Compose는 YAML 파일을 사용하여 멀티 컨테이너 애플리케이션의 구성을 정의

      - 파일에는 각 컨테이너의 이미지, 환경 변수, 포트 매핑, 볼륨 마운트 등의 설정이 포함됨

 

    ② 단일 명령 실행

      - Docker Compose를 사용하면 단일 명령으로 애플리케이션을 구성하고 실행할 수 있

      - Compose 파일을 기반으로 Docker Compose 명령을 실행하면 정의된 모든 컨테이너가 자동으로 시작

 

    서비스 간 통신

      - Docker Compose를 사용하면 정의된 서비스 간에 편리하게 통신할 수 있

      - 각 서비스는 고유한 이름을 가지며, 이를 사용하여 서비스 간의 네트워크 연결을 설정할 수 있음

 

    환경 변수 및 볼륨 관리

      - Docker Compose는 애플리케이션의 환경 변수 설정과 볼륨 마운트를 관리하기에 용이

      - Compose 파일에서 각 컨테이너에 대한 환경 변수와 볼륨 설정을 지정할 수 있음

 

    확장성

      - Docker Compose를 사용하면 애플리케이션을 쉽게 확장할 수 있

      - Compose 파일을 수정하여 새로운 서비스를 추가하거나 기존 서비스의 인스턴스 수를 조정할 수 있음

 

 

5) Docker 특징

  ① 유연성과 이식성

    - Docker 컨테이너는 애플리케이션과 그 종속성을 패키징하여 독립적이고 이식성이 뛰어난 단위로 만듬

    - AWS의 Docker 지원 서비스를 사용하면 이러한 컨테이너를 쉽게 배포하고 실행할 수 있

 

  ② 확장성

    - Docker는 애플리케이션을 여러 개의 독립적인 컨테이너로 분할할 수 있으므로, 애플리케이션의 부하에 따라

      필요한 만큼 컨테이너를 확장하거나 축소할 수 있음

    - 이는 애플리케이션의 성능과 가용성을 향상시킬 수 있

 

  ③ 빠른 배포 및 롤백

    - Docker 컨테이너는 빠른 배포와 롤백을 지원하므로, 애플리케이션의 변경사항을 신속하게 배포하고

      문제가 발생할 경우 이전 상태로 롤백할 수 있

 

  ④ 마이크로서비스 아키텍처 지원

    - Docker는 서비스를 작은 단위로 분해하는 마이크로서비스 아키텍처를 구축하기에 이상적

    - 이를 통해 각 서비스를 격리하여 독립적으로 개발, 배포 및 확장할 수 있음

 

 

 

3. AWS Serverless

1) AWS Serveless Computing

  - 서버리스 컴퓨팅을 위한 Amazon Web Services의 클라우드 서비스

  - 애플리케이션을 개발하고 배포할 때 서버 인프라를 직접 관리할 필요 없이 코드 실행에 초점을 맞출 수 있는 방식 제공

 

2) AWS Serverless 관련 개념 및 특징

  ① AWS Lambda

    - AWS Lambda는 서버리스 컴퓨팅 플랫폼

    - 코드를 실행하기 위한 서버를 프로비저닝하거나 관리할 필요 없이 개발자가 작성한 코드를 실행할 수 있음

    - 이벤트 기반 아키텍처로 동작하며, 트리거 이벤트 발생 시 자동으로 코드를 실행하여 응답

 

  ② 이벤트 트리거

      - AWS Serverless 애플리케이션은 다양한 이벤트 소스에서 트리거될 수 있음

 

  스케일링 및 탄력성

    - 서버리스 환경에서는 애플리케이션의 스케일링과 탄력성을 자동으로 관리할 수 있

    - Lambda 함수는 필요에 따라 자동으로 확장되고 축소되며, 트래픽에 따라 자원을 동적으로 할당하여

      애플리케이션의 성능을 유지함

 

  비용 효율성

    - 서버리스 아키텍처는 사용한 리소스에 대해서만 비용을 지불하므로, 효율적인 비용 관리가 가능

    - 함수 실행 시간과 메모리 사용량에 따라 비용이 결정되며, 사용하지 않는 상태에서는 비용이 발생하지 않

 

  다양한 서비스 통합

    - AWS Serverless는 다양한 AWS 서비스와의 통합을 지원함

 

 

반응형