Docker 1. 개념 및 용어(docker, container, docker file, image, registry, orchestration tool)

최강일·2022년 12월 11일
0

Docker

목록 보기
3/5

개요

도커와 도커에서 사용되는 다양한 용어들을 알아본다. (엔진,데몬,머신,스웜,컴포즈,데스크탑 등)
그리고 도커 컨테이너의 전체 라이프사이클을 알아본다.

목차

  • Docker 개념 및 용어(container, docker, docker file, image, registry, orchestration tool)
    • docker
    • 가상머신 vs 컨테이너
    • docker 장단점
    • docker 아키텍처
    • docker file
    • image
    • docker registry
    • life cycle
    • orchestration tool

docker란

컨테이너 기반 가상화 플랫폼
즉 독립된 환경을 만들어 하드웨어를 효율적으로 활용하는 기술
리눅스 컨테이너 기반의 기술로 mac/window에서 사용하려면 가상머신에서 사용 가능 -> 리눅스 os에서 돌아가는 앱

가상화란? 물리적 자원(hw)를 효율적으로 활용하기 위해서 hw위에 가상의 머신을 만드는 기술
컨테이너란? 호스트 운영체제 위에서 프로세스별로 독립된 환경을 만드는 기술

가상머신(VM) vs 컨테이너

기존의 가상화 방식은 OS를 가상화하는 VMware나 VirtualBox같은 가상머신
가상머신은 호스트 OS위에 다른 OS를 돌리기 때문에 무겁다. 그래서 가상머신과 비교하여 가볍게 가상화가 가능한 것이 컨테이너다.

VM은 하이퍼바이저로 생성되며, 하이퍼 바이저는 os및 커널이 통째로 가상되는 반면, 컨테이너는 filesystem의 가상화만을 이룬다.

하이퍼바이저란?

가상머신 생성하는 sw. os와 응용프로그램을 물리적 hw에서 분리되는 프로세스를 말한다.
Host hw에 설치되어 호스트와 게스트를 나누는 역할.
각각의 게스트는 하이퍼바이저에 의해 관리되며 시스템 자원을 할당받음.
하이퍼바이저는 물리적인 호스트 시스템이 여러 대의 가상 머신을 게스트로 운영할 수 있게 해, 메모리, 네트워크 대역폭, CPU등과 같은 컴퓨팅 자원을 더 효과적으로 사용할 수 있도록 도와준다.

하이퍼바이저가 느린이유

  1. 게스트들은 완전히 분리된 환경에서 구동.가상머신은 독립된 커널 공간을 가진 OS를 생성하는 식의 환경 구성을 해준다.
    • ->가상머신으로 무언가 하려면 하이퍼바이저를 거쳐야 하기 때문에 속도 저하
  2. VM은 시스템 자원을 많이 잡아먹는다. 각 VM은 os에 필요한 모든 복제본을 구동한다. 이로 인해 램과 cpu 사용량이 많이 증가한다.

컨테이너는 커널 공간을 공유하며 같은 가상화 기능을 제공해준다. 같은 커널 공간을 공유하기 때문에 가상머신보다 가볍다.
그러므로 컨테이너는 가상머신보다 더 많은 응용프로그램을 하나의 물리적 서버에 넣을 수 있다.

커널이란?

SW는 운영체제(os,linux,macOs,window 등)과 응용프로그램(chrome,Exel 등)으로 나뉜다.
운영체제는 커널과 시스템 프로그램으로 구분된다.

커널은 "알맹이","핵심"이라는 뜻이다.
커널의 역할은 운영체제의 핵심부로 컴퓨터 자원들(cpu,메모리,io 등)을 관리하는 역할이다.
즉, 커널은 항상 컴퓨터 자원만 바로보고 있다. 사용자는 시스템 프로그램(쉘) -> 커널 -> 컴퓨터 자원 접근

docker 장단점

장점

  • 뛰어난 확장성
    • vm을 늘릴 때마다 불필요하게 os를 만들어야하는 vm보다 확장성이 뛰어남
    • 완성된 서비스를 배포할 때
    • 배포할 때 이미지로 만들어서 종속성 이슈에서 벗어남. 서버 한 대에만 배포하면 문제없지만 여러대에 (파일 받고, lib받고, 아 이거먼저 설치해야되는데.. 등등) 이런 작업을 해야 한다면? -> 같은 이미지를 실행해서 컨테이너로 만들면 됨
  • 서버 리소스를 효율적으로 사용 가능

단점

  • 서비스가 커질수록 운영이 어려워짐(서비스가 커짐 > 컨테이너가 많아짐 > 관리 어려움)
  • 리눅스 운영체제를 사용
  • 호스트 서버에 문제가 생기면 모든 컨테이너에 영향

모놀리식 vs 마이크로서비스
모놀로식이라면 컴파일이나 빌드할 때도 오래 걸리고, 다른 서비스에도 영향이간다
쿠폰 쪽이 장애나면 전체 서비스를 내렸다 올린다거나 하는 단점이 있다.

그래서 페이코 플랫폼을 작은 서비스들로 잘게 나눈다. ex) 결제/식권/쿠폰/금융 등등
나뉜 서비스 단위로 도커를 사용하면 서비스 확장이 용이하다? 검색 구성을 늘리고싶으면 검색 컨테이너만 늘리고 배포하면 된다.

docker 아키텍처(엔진, 데몬, 머신, 데스크탑?)

docker engine

흔히들 "도커"라고 하는 것은 "도커 엔진"을 뜻한다.
도커엔진은 client-server 형태의 애플리케이션이다.

  • 엔진 구성
    • 도커 클라이언트 : 도커 데몬은 api 입력을 받아 도커 엔진의 기능을 수행하는데, 이 api를 사용할 수 있도록 CLI를 제공하는 것이 도커 클라이언트. 일반적으로 docker로 시작하는 명령어는 도커 클라이언트를 사용하는 것. 명령어를 도커 데몬에게 api로서 전달(/var/run/docker.sock에 위치한 유닉스 소켓으로 데몬 api 호출)
    • 도커 데몬(서버) : 도커 cli의 요청을 기다리고 (이미지,컨테이너,네트워크 및 볼륨 등등) 실질적인 업무 수행

도커 클라이언트와 도커 서버로 나뉘고 그 사이에서 rest api로 소통. 클라이언트는 요청을하고, build,run,push등 실질적인 작업은 다 데몬(server)이 수행

클라이언트와 데몬은 동일한 시스템에서 실행되거나, 원격 데몬에 연결할 수 있다.

도커 데스크탑(사용 금지 X)

mac/window os에서 도커 개발환경을 간편하게 구축할 수 있는 응용프로그램(내부적으로 가상머신을 가짐)
(Docker Desktop에는 Docker 데몬, Docker 클라이언트, Docker Compose, Docker Content Trust, Kubernetes 및 Credential Helper가 포함)


**(중요)** 도커 데스크탑 사용 X Docker Desktop 이 유료화를 선언했고, 2022년 2월 1일 부터는 회사 자산의 맥, 윈도우에서는 Docker Desktop 을 무료로 사용할 수 없게 되었습니다 -> 회사 노트북(자원)에서 사용을 제한한다.
  • mac 사용자의 경우, brew를 이용하여 실수로 --cask옵션을 붙여 버리면, 유료화의 대상이 되는 Docker Desktop 가 인스톨 되므로 주의!
  • 대안책 필요) minikube -> m1 칩 사용불가. Oracle 가상머신도 m1칩 미지원, Rauncher desktop 알아보기
  • Rauncher desktop을 활용하여 대체. (엔지니어 위키 참고)

도커 머신

도커 환경 구축을 간편하게 하는 툴 -> 직접 가상머신을 설치하고 환경구축을 위해서 사용하면 간편(많이들 사용)

(머신을 사용하여 mac,window에서 VirtualBox를 비롯하여 클라우드 환경등) 여러대의 호스트 머신에 Docker의 실행 환경을 명령으로 자동 생성하기 위한 툴
Docker Machine은 Amazon Web Service, MS Azure, Google COmpute Engine 등의 주요 클라우드 컴퓨팅 시스템을 비롯해서, VMware, Virtual Box등의 설치형 가상환경에 이르는 다양한 환경을 지원

docker file

docker 에서 이미지를 생성하기 위한 용도로 작성하는 파일
컨테이너에 설치해야하는 패키지, 소스코드, 명령어, 환경변수설정 등을 기록한 하나의 파일

[파일 작성 명령어]

FROM : 생성할 이미지의 베이스가 될 이미지. 반드시 한번 이상 입력해야 
LABEL : 이미지에 메타데이터를 추가
RUN : 이미지를 만들기 위해 컨테이너 내부에서 명령어를 실행
ADD : 파일을 이미지에 추가
WORKDIR : 명령어를 실행할 디렉토리(배시 셸에서의 cd 명령어와 동일한 기능)
EXPOSE: 이미지에서 노출할 포트를 설정
CMD : 컨테이너가 시작될 때마다 실행할 명령어. Dockerfile에서 한번만 사용할 수 있음

image

컨테이너를 실행하는데 필요한 파일과 lib, 설정등을 가지고 있는 파일로 실행하면 컨테이너가 됨
불변한 특징을 가짐으로 컨테이너가 삭제되더라도 이미지는 변하지 않음

이미지 레이어

도커 이미지는 이미지 레이어라는 읽기전용의 레이어 계층 구조로 이루어져 있는데, 변경 사항이 생기면 새로운 레이어를 추가하여 기록
장점) 기존 이미지에 파일 하나 추가될 경우, 기존 이미지에서 추가된 레이어만 받을 수 있음

DockerFile > Image > Container

명령어

  • 조회 : docker image ls
  • 상세 조회 : docker image inspect [이미지]
  • 삭제 : docker image rm [이미지]

도커 레지스트리

Github처럼 도커 이미지를 사용자들끼리 공유할 수 있도록 하는 플랫폼이다.
도커 이미지를 원격 저장소에 저장하여 사용.
private(회사내부)/public(docker hub : 누구나 사용할 수 있는 공개 레지스트리)
구성된 레지스트리에서 필요한 이미지를 pull or push 하여 사용

도커 라이프사이클

1. pull : 이미지를 다운 / push를 통해 Registry에 이미지 저장
2. create : pull된 이미지를 통해 컨테이너 생성
3. start : 컨테이너를 메모리에서 실행
    1. run을 통해 1,2,3(pull,create,start)를 한 번에 수행
    2. 이미 pull 되어 있는 이미지의 경우 run 명령어를 사용하면 2,3(create,start) 실행
    3. create와 start를 따로 사용하는 습관을 가지는 것을 추천
4. stop : 컨테이너 중지
5. rm : 중지된 컨테이너를 삭제
6. rmi : 이미지를 삭제
7. commit : 쓰고 있던 컨테이너에 대한 파일들을 이미지로 만듬

[예시]

1. registry에서 nginx 이미지 가져오기
    docker pull nginx
2-1. 컨테이너 생성
    docker create -p 80:80 --name nx nginx

2-2. 실행중인 도커 목록 확인하기
    docker ps : 현재 실행중인 컨테이너
    docker ps -a : 실행중이 아닌 모든 컨테이너

3. 2-2에서 확인한 컨테이너 id로 도커 실행
    docker start [id]
4. 컨테이너 중지
    docker stop nx
5. 중지된 컨테이너 삭제
    docker rm nx
6. 이미지 제거
    docker rmi nginx

컨테이너 접속

  • 접속 : exec -it [컨테이너 id] bash
    • bash : 컨테이너 내부의 bash 쉘이 실행
    • i : 표준 입출력을 사용
    • t : root@134adfdasf:~/$와 같이 프롬프트 모양이 바뀜
  • 나오기 : exit

컨테이너 오케스트레이션

컨테이너의 배포, 관리, 확장, 네트워킹을 자동화하는 것

오케스트레이션 : 컨테이너 배포 관리. 컨테이너와 호스트의 증가로 배포 프로세스를 최적화 하는데 목적
그 외에도 로드 밸런싱, 컨테이너 장애 복구, 컨테이너 추가/삭제로 확장 및 축소 등등이 있다.

컨테이너 오케스트레이션 종류

  • Kubernetes : 가장 기능이 풍부하고 널리 사용되는 오케스트레이션 툴
  • Docker Swarm : 여러 개의 도커 호스트를 함께 클러스터링하여 단일 호스트 생성. 간단하게 작동하고 쉬운 설정
  • Apache Mesos : 수만 대의 물리적 시스템으로 확장 할 수 있도록 설계.

도커 스웜

여러 호스트 서버의 컨테이너들을 배포 및 관리를 위한 툴
쿠버네티스를 대신할 도커가 만든 컨테이너 관리 툴
서로다른 호스트에 있는 여러 대의 컨테이너를 하나의 호스트인 것처럼 사용할 수 있도록 도와주는 컨테이너 오케스트레이션 도구
Compose와 Docker 명령어를 그대로 사용 -> docker외에 별도 툴 설치가 필요없음

비교적 간단한 시스템(수십 대 이내)에 적합하고 도커 외에 별도 툴 설치가 필요없어 가볍다

도커 스웜 구조

분산 코디네이터 : 클러스터 구성하기 위해 각종 정보를 저장하고 동기화하는 역할
에이전트 : 각 서버를 제어하는 역할
워커 노드 : 실제 컨테이너가 생성되고 관리되는 도커 서버. 매니저 노드의 명령을 받아 수행하는 노드
매니저 노드 : 클러스터 상태를 관리, 워커 노드 관리를 위한 서버, 1개 이상 존재해야함

도커 스웜 종류(스웜 클래식, 스웜 모드)

스웜 클래식 목적 : 여러대의 도커 서버를 한 지점에서 사용할 수 있도록 단일 접근점 제공
(많이 사용)스웜 모드 목적 : 마이크로서비스 아키텍처의 컨테이너를 다루기 위한 클러스터링 기능에 초점

profile
Search & Backend Engineer

0개의 댓글