도커(Docker)에 대하여

2024. 6. 22. 23:56·Server
목차
  1. 가상화
  2. 가상 머신(Virtual machine)과 컨테이너(Container)
  3. 도커(Docker)
  4. 도커 엔진(Docker Engine)
  5. 동작 과정
  6. 도커 스웜(Docker Swarm)
  7. 도커 컴포즈(Docker Compose)

오늘은 도커(Docker)에 대해서 알아볼게요

도커를 이해하기 전 먼저 가상화에 대한 개념 이해가 필요합니다.


 

가상화

하나의 실물 컴퓨팅 자원을 마치 여러 개의 가상 자원으로 쪼개서 사용하거나, 여러 개의 실물 컴퓨팅 자원을 묶어 하나의 자원처럼 사용할 수 있도록 하는 기술로,서버의 자원을 효율적으로 분산하여 서버 관리의 유연성을 제공한다.

 

서버 가상화

 

하나의 물리적 서버 호스트에서 여러 개의 서버 운영 체제를 게스트로 실행할 수 있게 해주는 소프트웨어 아키텍처

 

 

가상 머신(Virtual machine)과 컨테이너(Container)

가상 머신과 컨테이너는 모두 애플리케이션을 격리된 환경에서 실행하기 위한 기술이지만, 동작 방식과 구조에는 차이가 있다.

출처 docker

  • 하이퍼바이저

서버 가상화 기술을 구현할 수 있게 하는 소프트웨어로 가상 머신의 자원 할당과 관리를 담당

대표적인 툴 vmare, Virtual Box

 

가상화 작업은 하이퍼바이저를 반드시 거쳐야 하므로 일반 호스트에 비해 성능 손실이 발생한다. 또한 여러 OS를 사용하기 위한 라이브러리나 커널 등이 전부 포함되어 있기 때문에 용량이 커진다는 단점이 있다.

  • 가상 머신

하이퍼바이저 위에서 실행되는 독립된 운영체제와 어플리케이션 환경으로 물리적 하드웨어 자원을 가상화하여 여러 운영체제를 동시에 실행할 수 있도록 한다. 또한 각 가상머신은 독립된 환경에서 실행되어 다른 가상 머신에 영향을 주지 않으므로 오류 발생 시 전체 가상머신에 영향을 주지 않는다.


 

 

도커(Docker)

컨테이너 기술에 여러 기능을 추가한 오픈소스 프로젝트

 

출처: docker

컨테이너

운영체제 수준에서 가상화를 제공하여 애플리케이션과 그 의존성을 격리하는 기술로 프로세스 단위의 격리 환경을( HOST OS와의 격리 ➡️ 독립된 개발 환경 보장 )제공한다.

 

- 컨테이너에는 애플리케이션 구동에 필요한 라이브러리와 실행 파일만 존재 ➡️ 이미지의 용량을 줄여 가상 머신보다 가볍고 빠르다

- 프로세스의 생명주기를 관리하며 실행하는 하나의 프로세스

 

➡️ 애플리케이션을 서로 독립된 환경에서 실행할 수 있게 하여 충돌을 방지하고 배포를 간소화함.

 

도커 엔진(Docker Engine)

유저가 컨테이너를 쉽게 사용할 수 있게 해주는 주체

출처 docker

 

역할

도커 엔진은 이미지 생성, 저장, 가져오기와 같은 관리 역할, 이미지를 기반으로 한 컨테이너 생성, 실행, 중지, 삭제의 역할을 수행한다. 또한 컨테이너들이 통신할 수 있도록 가상 네트워크를 생성하고, 컨터이너간 데이터를 공유하거나, 데이터 유지를 위한 볼륨 관리 등의 역할을 수행한다.

 

동작 과정

도커 클라이언트 (CLI)에 명렁어 입력을 통한 실행 요청 ➡️ 도커 데몬 API(dockered) 호출 ➡️  도커 데몬이 요청을 처리하고 필요한 작업(컨테이너 생성, 이미지 빌드 등) 수행 ➡️ 도커 데몬이 작업 결과를 CLI에 반환 ➡️ CLI가 결과를 사용자에게 출력

 

 

도커 스웜(Docker Swarm)

여러 도커 엔진을 클러스터로 묶어 단일 가상 시스템처럼 사용할 수 있도록 도와주는 도와주는 도구 (docker engine에 내장)

  • 마이크로서비스 아키텍쳐의 컨테이너를 다루기 위한 클러스터링 기능에 초점
  • 필요에 따라 유동적으로 컨테이너 수를 조절
  • 컨테이너로의 연결을 분산하는 로드밸런싱 기능을 자체적으로 지원

 

➡️ 서비스의 확장 및 관리를 편하게 한다.

 

클러스터란?

더보기
각기 다른 서버들을 하나로 묶어 하나의 시스템 같이 동작하게 하는 것

 

💡 클러스터를 실현하기 위해서는 새로운 서버나 컨테이너가 도입 될 때 (유지 보수), 스케줄러, 로드 밸런서, 고가용성 보장에 대한 고려가 필요함 ➡️ 도커 스웜에 필요성

출처 docs.docker.com

 

관련 용어

워커 노드(Worker Node)

- 실제 컨테이너가 생성되고 관리되는 도커 서버

 

매니저 노드(Mananger Node)

- 워커 노드를 관리하기 위한 도커 서버 + 워커 노드의 역할을 포함💡다른 매니저 노드 다운 시 다른 매니저 노드가 대신 클러스터를 관리함

 

서비스(Service)

- 도커 스웜에서의 제어 단위로 같은 이미지에서 생성된 컨테이너의 집합 

➡️ 서비를 제어하면 해당 서비스 내의 컨테이너에 같은 명령이 수행

 

테스크(Task)

- 서비스 내 컨테이너

➡️ 서비스의 정의에 따라 테스크를 할당할 적합한 노드 선택 ➡️ 선택된 노드에 태스크를 분산해서 할당

 

레플리카(Replica)

- 서비스를 실행할 컨테이너의 개수. 함께 생성된 테스크(Task), 서비스에 설정된 레플리카의 수만큼 테스크가 스웜 클러스터 내에 존재해야 함 

 


도커 컴포즈(Docker Compose)

여러 개의 컨테이너로 구성된 서비스를 정의하고 실행할 수 있는 툴 (Docker Engine 내에 존재하지 않아 따로 설치 필요)

➡️ 컨테이너의 생성을 편리하게 해줌

 

 

기능

- YAML 파일을 통해 애플리케이션의 서비스, 네트워크, 볼륨 등을 정의할 수 있어 복잡한 환경 설정을 간단하게 관리할 수 있음

 

예시 코드 (Nginx, MySQL 정의)

version: '3'

services:
  web:
    image: nginx
    ports:
      - "80:80"
    volumes:
      - ./html:/usr/share/nginx/html

  db:
    image: mysql
    environment:
      MYSQL_ROOT_PASSWORD: example
    volumes:
      - db_data:/var/lib/mysql

volumes:
  db_data:

 

도커 컴포즈를 사용하면 하나의 YAML 파일로 모든 설정을 관리할 수 있으며 간단한 명령어로 컨테이너들의 동작을 제어할 수 있다.

 

 

출처

더보기

https://www.docker.com/resources/what-container/

https://www.youtube.com/watch?v=IiNI6XAYtrs

https://docs.docker.com/engine/swarm/how-swarm-mode-works/nodes/

'Server' 카테고리의 다른 글

CI와 CD에 대하여 (Continuous Integration / Deployment )  (0) 2024.06.14
RESTful API에 대하여  (0) 2024.06.10
JPA와 MyBatis (ORM, SQL Mapper)에 대하여  (0) 2024.06.09
Stateful과 Stateless  (0) 2024.05.19
java.lang.IndexOutOfBoundsException (MyBatis)  (0) 2024.05.18
  1. 가상화
  2. 가상 머신(Virtual machine)과 컨테이너(Container)
  3. 도커(Docker)
  4. 도커 엔진(Docker Engine)
  5. 동작 과정
  6. 도커 스웜(Docker Swarm)
  7. 도커 컴포즈(Docker Compose)
'Server' 카테고리의 다른 글
  • CI와 CD에 대하여 (Continuous Integration / Deployment )
  • RESTful API에 대하여
  • JPA와 MyBatis (ORM, SQL Mapper)에 대하여
  • Stateful과 Stateless
지화자_
지화자_
나만의 글로 기록하기
지화자_
냉정과열정사이
지화자_
전체
오늘
어제
  • 분류 전체보기 (47)
    • 알고리즘 (18)
      • 개념정복 (6)
      • 문제풀이 (12)
    • ComputerScience (5)
      • 데이터베이스 (3)
      • 네트워크 (0)
      • OS (2)
    • SSAFY (2)
    • Java (6)
    • Server (10)
    • Spring (3)
    • 일상 (1)
    • OpenSource (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 알고리즘
  • 나무섭지
  • 빌드
  • 분할정복
  • cd
  • 아니안무서워
  • 배포
  • 추상클래스
  • 인터페이스
  • BFS
  • 병합정렬
  • 소프티어
  • OOP
  • 비트마스크
  • 구현
  • CI
  • 백준바이러스
  • AOP
  • 백트래킹
  • dfs
  • 조합
  • 백준
  • 부분집합
  • n-queen
  • 재귀함수

최근 댓글

최근 글

hELLO· Designed By정상우.v4.5.2
지화자_
도커(Docker)에 대하여
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.