티스토리 뷰

기타

[Docker] 도커 시작하기

rimo (리모) 2023. 12. 8. 04:44

docker에 대해 학습한 내용을 기록합니다.

인프런 따라하며 배우는 도커와 CI 환경 강의를 수강하고 있습니다.

 

 

docker란 무엇이고 어떻게 등장한 기술인가?

 

 

Docker: Accelerated Container Application Development

Docker is a platform designed to help developers build, share, and run container applications. We handle the tedious setup, so you can focus on the code.

www.docker.com

 


 

 

도커(Docker)란?

도커는 컨테이너 기반의 오픈소스 가상화 플랫폼이며 생태계입니다.

도커를 이용하면 소프트웨어를 더 쉽게 만들고 배포 및 실행할 수 있습니다.

 

 

 

 

컨테이너(Container)란?

흔히 운송에 사용하는 컨테이너는 다양한 물건을 담아 쉽게 운반할 수 있도록 도와주죠. 도커에서 말하는 컨테이너도 같은 기능을 합니다.

 

서버에서의 컨테이너는 프로그램의 코드와 모든 종속성 실행 환경을 추상화해 패키지화하여, 다른 컴퓨팅 환경에서도 빠르고 안정적으로 실행할 수 있도록 도와주는 소프트웨어의 표준 단위입니다.

 

컨테이너는 소프트웨어를 환경으로부터 격리시켜 인프라에 관계없이 항상 균일하게 작동하도록 보장합니다.

때문에 컨테이너를 사용하면 프로그램의 배포 및 관리가 단순해져 편리합니다.

 

 

 

이미지란?

컨테이너 이미지는 코드, 런타임, 시스템 도구, 시스템 라이브러리 및 설정과 같은 프로그램을 실행하는 데에 필요한 모든 것을 포함한 소프트웨어 패키지입니다.

 

도커는 이미지를 이용해 컨테이너를 생성합니다. 즉, 컨테이너는 이미지의 인스턴스라고 할 수 있죠.

 

 

 

 

Windows에서 도커 설치하기

아래 링크에서 Docker Desktop을 다운로드하고 설치하면 됩니다.

 

 

Docker Desktop: The #1 Containerization Tool for Developers | Docker

Docker Desktop is collaborative containerization software for developers. Get started and download Docker Desktop today on Mac, Windows, or Linux.

www.docker.com

 

 

 

도커 사용 흐름

1. 사용자가 도커 클라이언트에 명령어를 입력하고 실행한다.

2. 도커 서버가 이미지 cache(캐시)에서 이미지가 있는지 확인한다.

2-1. 캐시 보관 장소에 해당 이미지가 없다면 도커 허브(docker hub)에서 가져와(pulling) 이미지를 캐싱한다.

3. 캐시 된 이미지를 사용해 컨테이너를 생성하고 프로그램을 실행한다.

 

 

 

도커와 기존의 가상화 기술의 차이

가상화 기술이 나오기 전에는 한 대의 서버를 하나 용도로만 사용했었습니다. 안정적이게 서버를 운영할 수 있다는 장점이 있지만, 하나의 서버에 하나의 운영체제 하나의 프로그램만을 운영해 서버의 자원을 효율적으로 사용할 수 없었습니다.

 

이후 하이퍼 바이저 기반의 가상화 기술이 등장했습니다. 가상화 프로그램을 이용해 하나의 호스트에서 각기 다른 OS를 가진 다수의 가상머신(VM)을 실행 및 모니터링 할 수 있게 되었습니다.

 

하이퍼 바이저에 의해 구동되는 VM은 논리적으로 분리되어 있고 독립적인 가상 하드웨어 자원을 할당받게 됩니다. 때문에 한 VM에 오류가 발생해도 다른 VM으로 전파되지 않죠.

 

  • 네이티브 하이퍼 바이저 : 하이퍼 바이저가 하드웨어를 직접 제어해 자원을 효율적으로 사용 가능하도록 하며 오버헤드가 적다는 장점이 있다. 하지만 설치가 어렵다.
  •  호스트형 하이퍼 바이저 : 일반적인 소프트웨어처럼 호스트 OS 위에서 실행되며, 하드웨어 자원을 VM 내부의 게스트 OS에 에뮬레이트 하는 방식이다. 오버헤드가 크지만 다소 구현이 쉬워 일반적으로 많이 이용한다.

 

도커 컨테이너는 이런 가상화 기술의 발전된 형태라고 할 수 있습니다.

 

 

 

공통점

도커 컨테이너와 VM 모두 기본 하드웨어에서 격리된 환경 내에 애플리케이션을 배치는 방법입니다.

 

차이점

가장 큰 차이점은 도커는 VM에 비해 느슨한 격리를 한다는 것입니다. 도커 컨테이너에서 돌아가는 애플리케이션은 호스트 시스템에서 조회가 가능합니다. 여전히 호스트와 동일한 커널을 공유한다는 거죠. 하지만 VM은 그렇지 않습니다. VM은 호스트 운영체제 또는 하이퍼바이저와 완전히 격리되어 있으며, VM만을 위한 커널을 새롭게 부팅합니다.

 

때문에 VM에 비해 컨테이너는 가볍습니다..!

컨테이너는 내부에서 리눅스 커널을 이용하여 자원을 격리시키기 때문에 하이퍼바이저와 게스트 OS가 필요하지 않습니다.

 

컨테이너의 실행속도가 더 빠릅니다..!

VM은 호스트 OS로부터 자원을 할당받고 게스트 OS를 부팅하여 애플리케이션을 실행하지만, 컨테이너 방식에서는 바로 호스트 OS위에 이미지만 배포하면 되기 때문이죠.

 

 

 

그럼 어떻게 도커 컨테이너들을 격리시키나요?

리눅스에서 쓰이는 Cgroup(control groups)와 네임스페이스(namespaces) 기술을 이용합니다.

이 둘은 프로세스 사이에 벽을 만드는 리눅스 커널 기능입니다. 

 

  • Cgroup : 시스템 자원을 관리합니다. 특정 프로그램이 자원을 많이 사용하고 있다면 Cgroup에 해당 프로그램을 넣어 CPU와 메모리 사용량을 제한합니다.
  • 네임스페이스 : 경량 프로세스 가상화 기술입니다. 하나의 시스템에서 프로세스가 독립된 환경을 가지도록 격리시킵니다.

 

도커는 내부적으로 리눅스 커널에서 작동하도록 설계되었기 때문에 우리는 windows나 macOS에서도 해당 기능을 사용할 수 있습니다...✌️

 

 

감사합니다.

 


 

공부한 내용을 복습/기록하기 위해 작성한 글이므로 내용에 오류가 있을 수 있습니다.

 

'기타' 카테고리의 다른 글

[Docker] Dockerfile로 이미지 생성하기  (0) 2023.12.19
[Docker] 도커 명령어 정리  (0) 2023.12.14
[Git] .gitignore이란?  (0) 2023.11.03
[Git] Github 시작하기  (0) 2023.10.31
논문 목차 구성 하기  (0) 2022.12.09
댓글
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Total
Today
Yesterday