AWS CloudFormation은 인프라스트럭처를 코드로 정의하고 프로비저닝하기 위한 서비스입니다. CloudFormation을 사용하면 템플릿이라는 JSON 또는 YAML 형식의 파일을 작성하여 리소스를 생성, 구성 및 관리할 수 있습니다.

 

CloudFormation을 사용하여 인프라스트럭처를 정의하면 원하는 상태의 인프라를 코드로 표현하고, 필요한 리소스와 해당 속성을 정의할 수 있습니다. 이 템플릿 파일에는 AWS 서비스의 리소스와 해당 속성을 명시적으로 지정합니다.

 

CloudFormation은 스택이라는 개념을 사용하여 관리합니다. 스택은 템플릿에 정의된 리소스 그룹입니다. 스택을 생성하면 템플릿에 정의된 리소스가 자동으로 생성되며, 스택을 삭제하면 생성된 리소스도 함꼐 삭제됩니다.

 

CloudFormation은 다양한 도구와 방법을 통해 사용할 수 있습니다. AWS Management Console을 통해 시각적인 인터페이스로 스택을 생성, 수정 삭제할 수 있습니다. 또한 AWS CLI를 사용하여 명령줄에서 스택을 관리하거나 AWS SDK를 사용하여 프로그래밍 방식으로 CloudFormation을 조작할 수도 있습니다.

 

CloudFormation을 사용하면 인프라스트럭처를 코드로 관리하여 자동화, 일관성, 재현성을 실현할 수 있으며, 개발과 운영 프로세스를 효율적으로 관리할 수 있습니다.

 


프로비저닝

컴퓨팅 리소를 준비하고 구성하여 사용 가능한 상태로 만드는 과정을 말합니다. 이는 인프라스트럭처를 프로비저닝하여 필요한 리소스를 생성학 구성하는 것을 의미합니다.

일반적으로 수동 작업으로 수행되기도 하지만, 인프라스트럭처를 코드로 정의하고 자동화된 방식으로 프로비저닝하는 것이 더 효율적입니다. IaC도구를 사용하여 프로비저닝 작업을 자동화하면 일과성을 유지하고 반복적인 작업을 간소화할 수 있습니다.

 

JSON

데이터를 표현하기 위한 경량의 데이터 교환 형식입니다. JSON은 사람과 기계 모두가 이해하기 쉬우면서도 다양한 프로그래밍 언어에서 파싱 및 생성할 수 있는 텍스트 기반 형식입니다.

JSON은 웹 API에서 데이터 교환을 위한 표준 형식으로 널리 사용됩니다. 예를 들어, 웹 서버에서 클라이언트로 데이터를 전송하거나 클라이언트에서 서버로 데이터를 전송할 때 JSON 형식을 사용하여 데이터를 표현합니다.

 

YAML

데이터 직렬화를 위한 인간 친화적인 데이터 형식입니다. YAML은 사람이 읽고 쓰기에 용이하며, 다양한 프로그래밍 언어에서 파싱 및 생성할 수 있는 형식입니다.

YAML은 구조직이고 가독성이 높은 형식으로 데이터를 표현합니다. 주로 설정 파일, 데이터 전송 및 구성 관리에 사용되며, JSON과 비슷한 목적을 가지고 있지만 더 간결하고 사용하기 쉽습니다.

 

인프라스트럭처

컴퓨터 시스템이나 네트워크 등의 기본적인 기술적 요소를 말합니다. IT 컨텍스트에서 인프라스트럭처는 소프트웨어 애플리케이션을 실행하고 지원하기 위해 필요한 하드웨어, 네트워크, 운영체제, 데이터 저장소, 서버, 네트워크 장비, 보안 장치 등올 구성됩니다.

애플리케이션 및 서비스를 운영하기 위한 기반을 제공합니다. 이는 하드웨어와 소프트웨어의 조합으로 이루어진 시스템으로, 데이터 센터 내부에 있을 수도 있고 클라우드 환경에서 제공되는 서비스일 수도 있습니다.

도커 컨테이너를 실행하고 정보를 확인하는 방법에 대해 알아보겠습니다.

 

도커 컨테이너를 실행하기 전에 해당 컨테이너를 위한 도커 이미지를 다운로드하거나 빌드해야 합니다.

(생각이 나지 않으면 이전 글을 보고 오세요)

 

 

 

이미지의 이름은 중복이 되면 안됩니다.

 

'run' 명령어는 해당 이미지를 사용하여 컨테이너를 실행합니다.

  • -i 옵션 : 컨테이너와 상호작용하기 위해 표준 입력을 열어줍니다. 이 옵션을 사용하면 컨테이너 내부의 명령어 실행이나 프로세스의 상호작용에 사용할 수 있는 표준 입력이 활성화됩니다. (컨테이너내부에서 키보드 입력이 가능함)
  • -t 옵션 : 가상 터미널을 할당합니다. 이 옵션을 사용하면 컨테이너와 상호작용할 때 터미널과 유사한 인터페이스를 제공합니다. 이를 통해 컨테이너 내부의 출력을 볼 수 있고, 터미널 명령어를 실행하거나 상호작용할 수 있습니다.
  • -d 옵션 : 컨테이너를 백그라운드에서 실행합니다. 일반적으로 도커 컨테이너는 기존적으로 프론트그라운드에서 실행되며, 컨테이너의 출력을 실시간으로 확인할 수 있습니다. 하지만 '-d' 옵션을 추가하면 컨테이너가 백그라운드에서 실행되며, 컨테이너의 출력은 로긍로 확인할 수 있습니다.

--name=webapp : 도커 컨테이너를 실행할 때 컨테이너에 이름을 지정하는 옵션입니다.

 

-p [호스트 포트]:[컨테이너 포트]

'-p' 옵션을 통해 호스트의 특정 포트와 컨테이너의 포트를 연결하여 외부와 내부의 통신을 가능하게 할 수 있습니다. 이를 통해 외부에서 호스트의 특징 포트로 접근하면 해당 요청이 컨테이너의 포트로 전달되어 컨테이너 내부의 애플리케이션에 도달할 수 있습니다.

 

  • CONTAINER ID : 컨테이너의 고유한 식별자인 컨테이너 ID입니다.
  • IMAGE : 컨테이너가 실행되기 위한 사용된 도커 이미지의 이름입니다.
  • COMMAND : 컨테이너가 실행 중인 명령어입니다.
  • CREATED : 컨테이너가 생성된 시간입니다.
  • STATUS : 컨테이너의 상태입니다.
  • PORTS : 컨테이너와 호스트 간의 포트 매핑 정보입니다.
  • NAMES : 컨테이너에 지정된 이름 입니다.

 

'nginx' 이미지를 기반으로 컨테이너가 실행되며, 호스트의 80번 포트와 컨테이너의 80포트가 매핑됩니다. 이제 호스트에서 블라우저를 열어 'localhost:80'에 접속하면 컨테이너 내부의 웹 서버에 접근할 수 있습니다.

(컨테이너에 설정된 내부IP를 가지고도 동작할 수 있습니다)

 

'docker inspect' 명령어는 도커 컨테이너나 이미지에 대한 상세한 정보를 확인하는 데 사용되는 명령어입니다.

JSON 혁싱으로 구성된 상세한 정보가 출력됩니다. 이 정보는 컨테이너 또는 이미지의 모든 속성을 포함하며, 여러가지 정보를 확인할 수 있습니다.

도커는 애플리케이션을 컨테이너로 묶어서 실행할 수 있는 오픈 소스 플랫폼으로, 개발과 배포를 효율적으로 관리할 수 있도록 도와줍니다.

 

도커 설치

첫번째로 해야할 일은 도커를 설치하는 것입니다. 리눅스에서는 아래에서 있는 명령어로 다운로드하면 도커 컨테이너를 사용할 수 있습니다.

 

 

도커를 다운로드하는데 오류가 있으면 업데이트를 하면 됩니다.

sudo apt update

도커 환경에 대한 정보를 확인하려면 'docker info' 명령어를 사용할 수 있습니다. 이 명령어는 도커 서버의 정보, 컨테이너 수, 이미지 수, 스토리지 드라이버 등 다양한 정보를 확인할 수 있습니다.

도커 컨테이너를 동작 시키면 로그가 남는 공간이 'Docker Root Dir' 입니다.

지금 VM의 메모리 용량이 2GB로 설정이 되어 있으면 도커 컨테이너가 제대로 활동을 안 할 수 있어서 용량을 늘려주는 것을 추천합니다.

적어도 4GB 정도는 필요하다고 생각을 합니다.

도커 이미지는 컨테이너를 생성하는데 사용되는 템플릿입니다. 도커 허브에서 공개된 이미지를 다운로드하여 사용할 수 있습니다. 도커 허브에서 원하는 이미지를 검색하고, 다운로드 할 수 있습니다.

'search'라는 명령어는 'docker hub'라는 공간에서 이미지를 검색하는 것 하고 동일 결과를 볼 수 있습니다.

원하는 이미지를 찾았다면, 해당 이미지를 다운로드하세요.

다운로드 이미지를 확인하는 명령어 입니다.

보안

보안적인  이슈에 대한 고려가 필요합니다. 도커 레지스트리는 기본적으로 HTTPS를 사용하며, TLS를 통해 보안적인 통신을 제공합니다.

  • 접근 제어 : 레지스트리에 접근할 수 있는수용자를 제한 할 수 있습니다.
  • 이미지 서명 : 임지 서명을 통해 이미지가 변조되지 않았는지 확인할 수 있습니다.
  • 보안 스캐닝 : 이미지에 존재하는 취약점을 스캔하여 보안 취약점을 확인할 수 있습니다.

구축

회사나 조직 내에서 자체적으로 구축할 수 있습니다. 도커 레지스트리를 구축하기 위해서는 다음과 같은 방법이 있습니다.

  • 도커 레지스트리 서버 : 서버를 직접 구축하여 사용할 수 있습니다.
  • 호스팅 서비스 이용 : 호스팅 서비스를 이용하여 도커 레지스트리를 구출 할 수 있습니다.

구축할 때는, 보안적인 이슈나 대용량 이미지 저장 등의 문제를 고려하여 구축할 필요가 있습니다. 이를 통해, 보다 안정적인 도커 이미지 관리가 가능해집니다. 이미지 빌드 및 배포 등의 자동화되어, 개발 및 운영의 효율성을 높일 수 있습니다.

 

활용

개발 및 운영 과정에서 다양하게 활용될 수 있습니다.

  • 개발 및 테스터 : 도커 이미지를 레지스트리에 업로드하여, 다른 개발자들과 공유하거나, 테스트 환경에서 사용할 수 있습니다.
  • 운영 : 이미지를 다운로드하여, 운영 환경에서 컨테이너를 실행할 수 있습니다.
  • 배포 : 이미지를 다운로드하여, 배포 환경에서 사용할 수 있습니다.

확장

확장성이 높아, 다양한 환경에서 사용될 수 있습니다.

  • 복제 : 다중화하여 복제된 서버들이 동일한 이미지를 관리할 수 있도록 합니다.
  • 스트리지 드라이버 : 레지스트리는 스토리지 드라이버를 이용하여, 다양한 스토리지 백엔드에 이미지를 저장할 수 있습니다.

정리

도커 이미지를 관리하기 위한 중요한 요소 중 하나 입니다. 이미지를 쉽게 빌드하고, 업로드하고, 다운로드하여 사용할 수 있습니다. 또한, 도커 레지스트리를 구축함으로써 로컬 환경에서 이미지를 관리할 수 있을 뿐 아니라, 여러 사용자들이 공유하여 사용할 수 있도록 공개된 레지스트리를 구축하는 것도 가능합니다. 이렇게 구축된 도커 레지스트리는 사용자들이 이미지를 업로드하고 다운로드하며 공유할 수 있는 중앙 집중식 저장소가 됩니다.

 

최근에는 도커 레지스트리의 기능을 보완하고 화장하기 위해 다양한 오픈 소스 프로젝트가 등장하고 있습니다. 예를 들어 Habor는 레지스트리에 보안적인 이슈를 고려한 RBAC 등의 기능을 추가하여 보다 안정한 이미지 관리를 지원하고 있습니다. 이러한 프로젝트들을 이용하여 더욱 효율적이고 안전한 도커 이미지 관리가 가능해질 것으로 기대됩니다.

+ Recent posts