완벽한 IT 인프라 구축을 위한 docker - 용어정리

docker

Posted by Warner on November 22, 2023

완벽한 IT 인프라 구축을 위한 docker

시스템과 인프라 기초지식

퍼블릭클라우드란?

인터넷을 경유하여 불특정 다수에게 제공되는 클라우드 서비스

제공할 서비스에 따라 IaaS/PaaS/SaaS 등 이 있다.

  • Infrastructure as a Service(IaaS, 아이아스, 이에스) 서비스로 제공되는 인프라스트럭처입니다. 개발사에 제공되는 물리적 자원을 가상화합니다.
  • Platform as a Service(PaaS, 파스) 서비스로 제공되는 플랫폼입니다. 개발사에 제공되는 플랫폼을 가상화합니다.
  • Software as a Service(SaaS, 사스) 서비스로 제공되는 소프트웨어입니다. 고객에게 제공되는 소프트웨어를 가상화합니다.

퍼블릭클라우드 장점

초기투자비용X

시스템 이용량이 증가했을 때 인프라 기반을 쉽게 증설

클라우드가 적합한 케이스

  1. 트래픽의 변동이 많은 시스템
  2. 재해 대책으로 해외에 백업을 구축하고 싶은 시스템
  3. 서비스를 빨리 제공하고 싶은 시스템

*클라우드의 오토스케일 기능이란?

시스템 부하에 맞춰 동적으로 서버 사양이나 스토리지 용량을 쉽게 증설시킬 수 있다.

인프라 구성 관리 기초지식

코드를 사용한 구성 관리

인프라를 코드로 구축하면 인적 실수를 배제할 수 있음

Docker에서는 Dockerfile이라는 파일에 인프라의 구성 정보를 기술한다.

여러 서버의 관리를 자동화하는 툴

대규모 시스템은 여러 대의 서버로 구축

분산 환경의 서버들을 관리하기 위한 툴이 kubernetes이다.

kubernetes는 그리스어로 배의 키잡이라는 뜻

Docker의 이미지 캐릭터인 컨테이너를 실은 고래의 키를 잡듯이 여러 컨테이너를 효율적으로 관리할 수 있다.

지속적 인티그레이션 & 지속적 딜리버리

코드를 추가 및 수정할 때마다 테스트를 실행하고 확실하게 작동하는 코드를 유지하는 방법을 지속적 인티그레이션(Continuous Integration)이라고 한다.

소프트웨어의 개발이 진행됨에 따라 단위테스트의 수가 늘어나므로 이러한 테스트를 자동화 하기 위해 Jenkins와 같은 인티그레이션 툴을 사용

폭포형 애플리케이션 개발에서는 요건정의 → 설계 → 코딩 → 테스트라는 프로세스를 거쳐 애플리케이션 개발을 끝낸 후에 제품 환경에 애플리케이션을 배포(deploy)하여 서비스를 릴리스한다.

오랜기간이 걸리나 고객의 니즈를 만족시키지 못하는 경우 발생

이러한 단점을 보안하기 위해 기능을 추가할 때마다 애플리케이션을 제품 환경에 배포하고, 시스템 이용자의 피드백에 기초하여 그 다음에 개발할 기능을 결정하는 애자일형 개발스타일이 탄생

그러나 개발 환경과 운영환경이 다른 문제로 애플리케이션이 정상적으로 작동한다는 보장이 없다.

컨테이너 기술과 Docker의 개요

Docker란?

컨테이너 기술을 사용하여 애플리케이션의 실행 환경을 구축 및 운용하기 위한 플랫폼

애플리케이션의 실행에 필요한 것을 하나로 모아, Docker 이미지를 관리함으로써 애플리케이션의 이식성을 높일 수 있다.

컨테이너란?

호스트 OS상에 논리적인 구획(컨테이너)을 만들고, 애플리케이션을 작동시키기 위해 필요한 라이브러리나 애플리케이션 등을 하나로 모아, 마치 별도의 서버인 것처럼 사용할 수 있게 만든것

Docker의 기능

  1. Docker 이미지를 만드는 기능(build)
    1. Docker 이미지는 실행 환경에서 움직이는 컨테이너의 바탕이 된다.
    2. Docker 에서는 하나의 이미지에는 하나의 애플리케이션만 넣어두고, 여러 개의 컨테이너를 조합하여 서비스를 구축한다는 방법을 권장
  2. Docker 이미지를 공유하는 기능(ship)
    1. Docker Hub에서 이미지를 공유할 수 있음
  3. Docker 컨테이너를 작동시키는 기능(Run)

Docker 컴포넌트

Docker Engine(Docker의 핵심 기능)

  • Doker 이미지를 생성하고 컨테이너를 기동시키기 위한 Docker의 핵심 기능입니다. Docker명령의 실행이나 Dockerfile에 의한 이미지도 생성합니다.

Docker Registry(이미지 공개 및 공유)

  • 컨테이너의 바탕이 되는 Docker 이미지를 공개 및 공유하기 위한 레지스트리 기능입니다.
  • Docker의 공식 레지스트리 서비스인 Docker Hub도 이 Docker Registry를 사용하고 있습니다.

Docker Compose(컨테이너 일원 관리)

  • 여러 개의 컨테이너 구성 정보를 코드로 정의하고, 명령을 실행함으로써 애플리케이션의 실행 환경을 구성하는 컨테이너들을 일원 관리하기 위한 툴입니다.

Docker Machine(Docker 실행 환경 구축)

  • 로컬 호스트용인 VirtualBox를 비롯하여 Amazon Web Services EC2나 Microsoft Azure와 같은 클라우드 환경에 Docker의 실행 환경을 명령으로 자동 생성하기 위한 툴입니다.

Docker Swarm(클러스터 관리)

  • Docker Swarm은 여러 Docker 호스트를 클러스터화하기 위한 툴입니다. Docker Swarm에서는 클러스터를 관리하거나 API를 제공하는 역할은 Manager가, Docker 컨테이너를 실행하는 역할은 Node가 담당합니다. 또한 오픈소스인 Kubernetes도 이용할 수 있습니다.

Docker의 작동 구조

Docker는 컨테이너라는 독립된 환경을 만들고, 그 컨테이너를 구획화하여 애플리케이션의 실행 환경을 만듭니다. 이 컨테이너를 구획하는 기술은 Linux 커널의 namespace라는 기능을 사용하고 있습니다.

PID namespace

PID란 Linux에서 각 프로세스에 할당된 고유한 ID를 말합니다. PID namespace는 PID와 프로세스를 격리시킵니다. namespace가 다른 프로세스끼리는 서로 액세스할 수 없습니다.

Network namespace

Network namespace는 네트워크 디바이스, IP 주소, 포트 번호, 라우팅 테이블, 필터링 테이블 등과 같은 네트워크 리소스를 격리된 namespace마다 독립적으로 가질 수 있습니다.

이 기능을 사용하면 호스트 OS 상에서 사용 중인 포트가 있더라도 컨테이너 안에서 동일한 번호의 포트를 사용할 수 있습니다.

UID namespace

UID namespace는 UID(사용자ID), GID(그룹ID)를 namespace별로 독립적으로 가질 수 있습니다.

namespace 안과 호스트 OS상의 UID/GID가 서로 연결되어 이름공간 안과 밖에서 서로 다른 UID/GID를 가질 수 있습니다.

MOUNT namespace

Linux에서 파일 시스템을 사용하기 위해서는 마운트가 필요합니다. 마운트란 컴퓨터에 연결된 기기나 기억장치를 OS에 인식시켜 이용 가능한 상태로 만드는 것을 말합니다.

MOUNT namespace는 마운트 조작을 하면 namespace안에 격리된 파일 시스템 트리를 만듭니다.

UTS namespace

UTS namespace는 namespace별로 호스트명이나 도메인명을 독자적으로 가질 수 있습니다.

IPC namespace

IPC namespace는 프로세스 간의 통신(IPC)오브젝트를 namespace별로 독립적으로 가질 수 있습니다. IPC는 System V 프로세스 간의 통신 오브젝트라고 하는 공유 메모리나 세마포어/메시지 큐를 말합니다. 세마포어란 프로세스가 요구하는 자원관리에 이용되는 베타제어 장치이며, 메시지 큐란 여러 프로세스 간에서 비동기 통신을 할 때 사용되는 큐잉 장치입니다.

Dockerfile을 사용한 코드에 의한 서버 구축

Dockerfile이란?

Docker상에서 작동시킬 컨테이너의 구성 정보를 기술하기 위한 파일

docker build 명령은 Dockerfile에 기술된 구성 정보를 바탕으로 Docker 이미지를 작성

Dockerfile의 기본 구문

명령 설명  
FROM 베이스 이미지 지정  
RUN 명령 실행  
CMD 컨테이너 실행 명령  
LABEL 라벨 설정  
EXPOSE 포트 익스포트  
ENV 환경변수  
ADD 파일/디렉토리 추가  
COPY 파일복사  
ENTRYPOINT 컨테이너 실행 명령  
VOLUME 볼륨 마운트  
USER 사용자 지정  
WORKDIR 작업 디렉토리  
ARG Dockerfile안의 변수  
ONBUILD 빌드 완료 후 실행되는 명령  
STOPSIGNAL 시스템 콜 시그널 설정  
HEALTHCHECK 컨테이너의 헬스 체크  
SHELL 기본 쉘 설정 ts