"Docker는 LXC라는 컨테이너 기술을 기반으로 만들어진 상위레벨의 컨테이너 기술"

https://linuxcontainers.org/

 

Linux Containers

LXC LXC is a well-known Linux container runtime that consists of tools, templates, and library and language bindings. It's pretty low level, very flexible and covers just about every containment feature supported by the upstream kernel. LXC is production r

linuxcontainers.org

https://github.com/lxc/lxc

 

GitHub - lxc/lxc: LXC - Linux Containers

LXC - Linux Containers. Contribute to lxc/lxc development by creating an account on GitHub.

github.com

 LXC(Linux Container)

  • 단일 리눅스 시스템에 동작하고 있는 프로세스를 격리시켜 각 프로세스마다 독자적인 리눅스 시스템 환경을 구축하는 것 ⇒ "OS 수준에서의 가상화"
  • Cgroups와 namespace를 결합하여 고립된 환경을 제공
  • LXC에서 가상화된 프로세스들은 모두 리눅스 시스템을 호환해야한다.
  • 장점
    • 특정 애플리케이션 환경만 따로 간편하게 구축 가능
    • 상대적으로 가볍다. Hypervisor를 이용하지 않아 오버헤드 발생이 적음.

 

'Container' 카테고리의 다른 글

[oslab] LXD  (0) 2021.09.13
[Docker] Docker Swarm  (0) 2021.09.11
[Docker] Docker Machine  (0) 2021.09.11
[Docker] Docker Compose  (0) 2021.09.11
[Docker] Docker Engine  (0) 2021.09.11

https://docs.docker.com/engine/swarm/

 

Swarm mode overview

 

docs.docker.com

 

Docker Swarm

  • docker container를 위한 클러스터링, 스케줄링 툴
  • 여러 개의 서버와 컨테이너 관리를 쉽게
  • 기능
    • docker engine 통합 관리(docker manager node에서 worker node를 통합 관리)
    • load balancing(worker node 접속 시 round robin 방식으로 worker node의 task를 연결)
    • task 개수 조절 기능(scale)
    • multi-host-networking(overlay network를 통해 task 간 사용할 수 있는 네트워크 제공)
    • 내장 DNS 서버 제공
  • 종류
    • docker warm mode: manager-node와 worker-node가 한 host에 공존
    • docker swarm: manager-node와 worker-node를 따로 구성(대규모)

docker swarm mode 물리적 구조

 

docker swarm mode의 load balancing

- 외부에서 어떤 host에 접근 하더라도 IPVSingress network를 사용하여 worker-node들이 제공하는 모든 task에 접속 가능

 

Docker Swarm Node

  • 도커나 스웜 모드에서 돌아가는 도커 서버
  • manager node / worker node

Manager node

  • 클러스터의 상태를 유지(뗏목 합의 알고리즘: 여러 서버 중 일부에 장애가 생겨도 나머지 서버가 정상적인 서비스를 할 수 있도록)
  • 스케줄링 서비스: worker node에게 컨테이너 배포
  • 스웜 모드 제공: docker swarm init

Worker node

  • 하나 이상의 manager node를 가짐
  • docker service create로 도커 스웜 실행("service 제공")
# 노드 상태를 drain으로 변경한다.
docker node update --availability drain <노드ID>

# 노드의 가용성을 확인한다.
docker node inspect --pretty <노드ID>

 

스케줄러가 매니저 노드에게 작업자 노드가 하는 task를 실행시키지 않기 위해서 매니저 노드의 가용성을 drain

스케줄러는 drain 상태의 노드에는 task를 맡기지 않고 active상태의 노드에게만 task 할당

'Container' 카테고리의 다른 글

[oslab] LXD  (0) 2021.09.13
[oslab] LXC  (0) 2021.09.13
[Docker] Docker Machine  (0) 2021.09.11
[Docker] Docker Compose  (0) 2021.09.11
[Docker] Docker Engine  (0) 2021.09.11

https://docs.docker.com/machine/

 

Docker Machine overview

 

docs.docker.com

 

Docker Machine

  • Dokcer Engine을 클라우드 컴퓨터, VM을 비롯한 원격지의 서버에 설치할 수 있도록 돕는 도구
  • 일반적으로 로컬 시스템에 Docker Machine을 설치하고 원격지 서버에는 Docker Engine을 설치하고 로컬과 통신

" Virtual Machine에 Docker 설치하고 이와 쉽게 통신하게 하는 프로그램"

 

사용법

https://kin3303.tistory.com/26

 

20. Docker Machine

Docker Machine Docker Machine 은 Docker Engine을 사용자 로컬 머신이 아닌 클라우드 컴퓨터, VM 을 비롯한 원격지의 서버에 설치할 수 있도록 돕는 도구이다. 1. Docker Engine이있는 호스트를 프로비저닝하고.

kin3303.tistory.com

❗ 실습은 차차 해보는 걸로 ❗

'Container' 카테고리의 다른 글

[oslab] LXC  (0) 2021.09.13
[Docker] Docker Swarm  (0) 2021.09.11
[Docker] Docker Compose  (0) 2021.09.11
[Docker] Docker Engine  (0) 2021.09.11
[Docker] Docker 구조  (0) 2021.09.11

https://docs.docker.com/compose/

 

Overview of Docker Compose

 

docs.docker.com

 

Docker Compose

  • 여러 개의 docker를 정의하고 실행하는 툴
  • YAML 파일로 여러 개의 docker 내부 속성을 설정하고 한 번에 실행시킴.
  • docker를 배치로 한 번에 실행시키는 것
  • 장점
    • Multiple isolated environments on a single host
    • Preserve volume data when containers are created
    • Only recreate containers that have changed
    • Variables and moving a composition between environments

사용법

docker-compose.yml 파일 생성

version: "3.8"
services:
	echo:
    	image: example/echo:latest
        ports:
        	- 9000:8000

version: 내용 해석을 위한 문법 버전(최신 버전이 좋다, https://docs.docker.com/compose/compose-file/)

echo: services 아래의 echo는 하나의 컨테이너

image: 도커 이미지

ports: 포트 포워딩

 

docker compose 실행

docker-compose up

 

컨테이너 종료

docker-compose up -d
docker-compose ls
docker-compose down

down 명령어로 한 번에 종료

 

(관련 명령어 정리)

https://www.daleseo.com/docker-compose/

 

Docker Compose 커맨드 사용법

Engineering Blog by Dale Seo

www.daleseo.com

 

'Container' 카테고리의 다른 글

[Docker] Docker Swarm  (0) 2021.09.11
[Docker] Docker Machine  (0) 2021.09.11
[Docker] Docker Engine  (0) 2021.09.11
[Docker] Docker 구조  (0) 2021.09.11
[Docker] 개념  (0) 2021.09.11

개요

docker rundocker build 등의 명령과 그 명령에 의해 실행되는 이미지 빌드, 컨테이너 실행하는 등의 다양한 작업

요소 : Docker CLI, Docker Engine API, Docker Demon

 

Docker CLI

  • Docker 명령을 실행하는 커멘드 라인 도구
  • CLI에 입력된 명령에 따라 Docker Engine API를 호출

Docker Demon

  • Linux  demon process에서 Docker Engine API가 호출되는 것을 기다리고 있다가, 호출된 Docker Engine API에 따라 이미지의 빌드 및 컨테이너의 시작 등을 실행

 

Unix socket 통신 & TLS 통신

  • Docker CLI가 Docker 호스트 안에 있는 경우 Unix socket을 이용해 Docker Demon과 통신
    • Unix socket은 동일한 시스템에 있는 프로세스끼리 통신을 할 수 있는 구조
    • docker-machine ssh 명령을 사용해 Docker 호스트에 로그인한 후 Dokcer 호스트에 있는 Docker CLI 명령 실행
  • Docker CLI가 Docker 호스트 밖에 있는 경우 TCP socket을 사용해 Docker Demon과 통신
    • HTTP를 그대로 이용하는 것이 아니라, 어떠한 보안 대책을 실시하는 것을 추천
    • 그중 하나가 TLS, HTTP를 암호화된 HTTPS 통신을 실시하는 것과 동시에 클라이언트와 서버를 신뢰할 수 있는 것
    • Docker Machine을 사용하여 Docker 호스트를 작성한 경우 인증서 만들기 등의 작업이 자동으로 이루어짐

 

❗ 통신 과정을 실습해볼려면 참고하자! ❗

http://www.devkuma.com/books/pages/1546

 

프로그램 개발 지식 공유, devkuma

데브쿠마는 프로그래밍 개발에 대한 지식을 공유합니다.

www.devkuma.com

 

'Container' 카테고리의 다른 글

[Docker] Docker Swarm  (0) 2021.09.11
[Docker] Docker Machine  (0) 2021.09.11
[Docker] Docker Compose  (0) 2021.09.11
[Docker] Docker 구조  (0) 2021.09.11
[Docker] 개념  (0) 2021.09.11

Docker Component

  • Docker Engine : 핵심 기능

 

  • Docker Registry : 이미지 공개 및 공유
  • Docker Compose : 여러 개의 컨테이너 구성 정보를 코드로 정의, 명령을 실행함으로써 애플리케이션의 실행환경을 구성하는 컨테이너들을 관리하기 위한 툴
  • Docker Machine : 클라우드 환경에 Docker의 실행환경을 명령으로 자동 생성하기 위한 툴
  • Docker Swarm : Docker 호스트를 클러스터링 하기 위한 툴

Docker 기술

  • Namespace
    • 접속한 게스트 별로 독립적인 공간을 제공하고 서로가 충돌하지 않도록 리소스를 격리시킴
    • Mnt(파일 시스템 마운트): 호스트 파일 시스템에 구애받지 않고 독립적으로 파일 시스템을 마운트 하거나 원마운트 가능
    • Pid(프로세스): 독립적인 프로세스 공간 할당
    • Net(네트워크): namespace 간에 network 충돌 방지
    • Ipc(System IPC): 프로세서 간의 독립적인 통신 통로 할당
    • Uts(hostname): 독립적인 hostname 할당
    • User(UID): 독립적인 사용자 할당
  • Cgroup(Control Groups)
    • 제어 가능 리소스: 메모리, CPU, I/O, 네트워크, Device 노드(/dev/)
    • 자원에 대한 제어를 가능하게 해주는 리눅스 커널의 기능
    • 시스템의 자원 할당, 우선순위 지정, 거부, 관리, 모니터링 등의 제어 기능을 수행 → 자원의 효율성 향상
    • 단순 제공, 실제 자원 분배를 위해선 각 자원마다 해당하는 서브시스템이 필요
  • Union File System(UFS)
    • 도커가 관리하는 각 Layer에서 각 컨테이너가 이용할 수 있는 독립된 파일 시스템 블록
    • 리눅스 커널이 제공하는 것이 아니어서 Linux 종류별로 다른 형태를 제공
  • Container Format
    • Docker Engine을 구성하는 핵심 기술 스택인 namespace, cgroup, UFS는 컨테이너를 이용하기 위한 Container Wrapper를 갖고 있으며 이를 맞추기 위한 Container Format을 관리하게 됨(default: libcontainer)

 

네트워크 구성(virtual bridge/ virtual NIC)

 

 

 

https://docs.docker.com/get-started/overview/

 

Docker overview

 

docs.docker.com

 

'Container' 카테고리의 다른 글

[Docker] Docker Swarm  (0) 2021.09.11
[Docker] Docker Machine  (0) 2021.09.11
[Docker] Docker Compose  (0) 2021.09.11
[Docker] Docker Engine  (0) 2021.09.11
[Docker] 개념  (0) 2021.09.11

+ Recent posts