Docker, Kubernetes

Docker - 기본 내용 요약

728x90

# Docker ?

Docker 란 "컨테이너" 기술을 활용하여 어플리케이션을 배포하고 관리하기 위한 오픈소스 프로젝트 이다.

 

 

* Container ?

도커를 살펴보기 전에 알아야 하는 것이 컨테이너에 대한 개념이다.

 

출처 : https://kubernetes.io/docs/concepts/overview/what-is-kubernetes/

- Traditional Deployment

웹/앱 서비스가 시작되던 초창기엔, 개별 어플리케이션을 배포하기 위해서는

한 대의 물리적 서버에 어플리케이션을 올려서 관리를 해야 했고,

각 어플리케이션에 대한 서버의 리소스 사용량을 제한하기 위한 제한점이 따로 없었다.

그래서, 어느 한쪽의 어플리케이션이 큰 리소스를 차지하면, 다른 어플리케이션은 당연히 지연되거나 사용이 불가능했다.

이에 대한 대책으로 여러대의 물리적 서버를 둬서, 각각의 어플리케이션을 관리하였으나, 

서버 자체를 여러대 증설하는것은 비용이 매우 크게 드는 단점이 있었다.

 

- Virtualized Deployment

가상화 시스템이란 한 대의 물리적 서버 위에, 가상 머신(VM) 을 여러대 구동시킬 수 있게 해주는 기술이다.

이 기술을 사용하면, 앞서 언급한 여러대의 물리적 서버를 두는 문제를 해결해 줄 수 있다.

또한 각각의 VM 이 어플리케이션을 따로 관리하기 때문에, 어플리케이션이 다른 어플리케이션에 접근하는 것을 막아, 보안상의 이점도 가져올 수 있었다.

 

기존보다 확장성을 늘릴 수 있고, 독립적인 관리가 가능하여 효율성을 높였으나, 

Virtualized Deployment 의 그림을 보면 알 수 있지만, 

OS 위에 또다른 OS 를 올리는 형식이기 때문에, 사람들은 이런 불필요한 중첩을 제거할 방법을 찾기 시작했고,

그에 대한 대안으로 나온것이 바로 컨테이너 기술이다.

 

- Container Deployment

컨테이너 기술은 VM 기술과 유사하지만, 다른 것은 VM 처럼 OS 위에 또 다른 OS 를 올리는게 아니라

하나의 OS 만 두고 어플리케이션만 컨테이너 단위로 해서 따로 관리를 하는게 차이가 있다.

컨테이너 기술은 VM 처럼 컨테이너별로, 파일시스템, CPU, memory 등의 기능을 갖고 있으며,

또한 서버의 환경에 종속적이지 않다 (예를들면, 현재 서버 OS 가 CentOS 인데, Ubuntu 용 으로 컨테이너를 올려도 아무 상관없이 돌아간다는 것)

 

도커와 같은 컨테이너 기술의 장점을 보자면,

1. 높은 확장성, 쉽게 개발 서버를 구축할 수 있으며, 특정 환경에 종속되지 않고 실행 가능함

2. CI/CD 가 용이해짐

3. 이미지 생성이 VM 방식보다 편리해짐

4. 개발과 운영 부분에서 분리 가능 

등 이외에도 많은 장점이 있다.

 

그리고 컨테이너 기술의 도입이후,

수많은 컨테이너를 관리해야될 필요성이 생겼고, 

(구글의 경우 2014년 매주 20억개의 컨테이너를 관리했다고 한다)

그래서 차후에 등장한게 쿠버네티스 이다.

 

 

# Docker 내부 훑어보기

 

- Docker Engine

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

도커의 엔진은 위 그림처럼 client-sever application 의 구조로 되어 있다.

가장 핵심적인 부분은 docker daemon 이라 불리고, 여기에 접근하고자 하는 경우 dockerd 명령어를 사용해서 접근한다.

REST API 의 경우 일종의 인터페이스 같은 역할을 수행하는데, 사용하고자 하는 프로그램들이 daemon 과 연결되도록 해준다.

Client 부분은 docker CLI 를 통해 관리되고, docker 명령어를 사용해서 접근한다.

 

Daemon 이 관리하는 대상에는 image, network, volume, container 같은 Docker Object 들이 있다.

 

 

 

- Docker Architecture

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

Engine 부분에서 간단하게 설명했던 부분을 좀 더 구체화하여 도식화한 그림이다.

 

용어에 대해서 좀 짚고 가야 하는데,

 

1. Image

여기서 이미지란, 컨테이너 실행에 필요한 파일들과 여러가지 설정값을 가지고 있는 것을 의미한다.

컨테이너는 이미지를 실행한 대상으로 볼 수 있고, 이미지 자체로는 수정이 불가능하며, 상태값 또한 가지지 않는다.

같은 이미지에서 다수의 컨테이너를 생성할 수 있으며, 각 컨테이너가 서로 다른 값을 가질 수 있다.

 

2. Registry

Registry 란 한마디로 이미지를 관리하는 저장소 같은 개념이다.

직접 Registry 를 만들어서 관리할 수도 있고, Docker Hub 에 올려서 관리할 수도 있으며, 

Official Image 를 받아 올 수도 있다.

 

3. Volume

Volume 은 도커 컨테이너에 의해 생성되는 일종의 저장소 같은 곳으로, 컨테이너가 사용하는 공간이다.

volume 또한 docker 가 관리하기 때문에, 호스트 환경의 디렉토리 구조에 종속적이지 않다.

 

 

 

# Docker 명령어

Docker 에서 사용되는 몇가지 기본 명령어들을 서술했다.

 

- 이미지 관련 명령어

 

1. 이미지 리스트 보기.

docker images [OPTIONS] [REPOSITORY[:TAG]]
cs

 

2. 이미지 검색

docker search [OPTIONS] TERM
cs

 

3. 이미지 받아오기

docker pull [OPTIONS] NAME[:TAG|@DIGEST]
cs

 

4. 이미지 삭제

docker rmi [OPTIONS] IMAGE [IMAGE...]
cs

 

 

- 컨테이너 관련 명령어

 

1. 컨테이너 목록 보기

docker ps [OPTIONS]
cs

 

2. 컨테이너 실행

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
cs

 

3. 컨테이너 시작

docker start [OPTIONS] CONTAINER [CONTAINER...]
cs

 

4. 컨테이너 재시작

docker restart [OPTIONS] CONTAINER [CONTAINER...]
cs

 

5. 컨테이너 접속

docker attach [OPTIONS] CONTAINER
cs

 

6. 컨테이너 정지

docker stop [OPTIONS] CONTAINER [CONTAINER...]
cs

 

7. 컨테이너 삭제

docker rm [OPTIONS] CONTAINER [CONTAINER...]
cs

 

 

이보다 훨씬 더 많은 명령어들이 있고,

각각의 명령어의 옵션 값도 상당히 다양한데,

이에 대한 자세한 부분을 보고 싶으면 docs.docker.com/reference/ 를 보기 바란다.

 

 

# Docker 설치

윈도우 유저의 경우

- steemit.com/kr/@mystarlight/docker

 

[docker]도커 처음 사용자를 위한 윈도우 도커 설치 및 실행하기 — Steemit

윈도우에서 도커 설치는 두 가지 버전으로 나뉩니다. Windows 10 Home 버전 이하에서 설치하는 방법과 Windows 10 Pro 또는 Windows 10 Enterprise 버전, Windows… by mystarlight

steemit.com

 

 

 

리눅스(우분투) 의 경우

- docs.docker.com/engine/install/ubuntu/

 

Install Docker Engine on Ubuntu

 

docs.docker.com

 

Mac OS 의 경우

- kamang-it.tistory.com/entry/Docker-%EC%84%A4%EC%B9%98-Mac%ED%8E%B8

 

Docker 설치 - Mac편

Docker를 맥에서 설치해보자. Docker를 맥에서 설치하는 것은 그리 어렵지 않다. brew install Docker 해당 방법을 사용해서 도커를 먼저 다운로드 받자. 사실 엄밀히 말하면 도커의 클라이언트만 설치한

kamang-it.tistory.com

을 참조.

 

 

 

 

- References

1. subicura.com/2017/01/19/docker-guide-for-beginners-1.html

2. zzsza.github.io/development/2018/04/17/docker-kubernetes/

3. velog.io/@wlsdud2194/-Docker-%EB%8F%84%EC%BB%A4-%EA%B8%B0%EB%B3%B8-%EB%AA%85%EB%A0%B9%EC%96%B4-%EB%AA%A8%EC%9D%8C

4. docs.docker.com/reference/

 

 

 

 

 

 

 

728x90

'Docker, Kubernetes' 카테고리의 다른 글

Docker - Container 생성과 관리  (0) 2021.01.12