티스토리 뷰

Docker

Docker 개념정리 기초편

chief 2023. 4. 6. 10:00
반응형

🚀  들어가며...

  • 오랜만에 글로 인사드립니다. 제가 최근에 이직을 하게 되어서 새로운 환경에 적응하느라 글을 못썼었는데 앞으로는 스터디도 열심히 할 예정이라 자주 찾아뵐것 같습니다 ㅎㅎ 
    그 시작으로 앞으로 몇 주간은 Docker를 공부하면서 Docker 시리즈로 글을 써볼 생각입니다. 기존에 Github Action을 사용하여 완전 무중단은 아니지만 무중단처럼 배포를 진행했었는데 타이밍 안좋게 서버 잠깐 내려간사이에 api를 호출하게 되면 가끔가다가 오류가 발생하는 현상을 발견하여 Docker의 필요성을 많이 느껴 공부 후 실무에도 적용해볼 생각입니다!!

 

📑 내용

도커란?

컨테이너를 사용하여 응용프로그램을 더 쉽게 만들고 배포하고 실행할 수 있도록

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

 

서버에서의 컨테이너 개념

컨테이너 안에 다양한 프로그램, 실행환경을 컨테이너로 추상화하고 동일한 인터페이스를 제공하여
프로그램의 배포 및 관리를 단순하게 해 줍니다.

일반 컨테이너의 개념에서 물건을 손쉽게 운송해주는 것처럼 프로그램을 손쉽게 이동, 배포, 관리를 할 수 있게 해 줍니다.

또한 AWS, Azure, Google cloud 등 어디에서든 실행 가능하게 해 줍니다.

 

컨테이너란?

컨테이너는 코드와 모든 종속성을 패키지화하여 응용 프로그램이 한 컴퓨팅 환경에서 다른 컴퓨팅 환경으로 빠르고 안정적으로 실행되도록하는 소프트웨어의 표준 단위입니다.
현재까지 여러 가지 방향으로 컨테이너를 정의할 때 간단하고 편리하게 프로그램을 실행시켜주는 것으로 정의를 내리고 있습니다.


컨테이너 이미지란?

컨테이너 이미지는 코드, 런타임, 시스템 도구, 시스템 라이브러리 및 설정과 같은 응용 프로그램을 실행하는 데 필요한 모든 것을 포함하는 가볍고 독립적이며 실행 가능한 소프트웨어 패키지입니다.
또한 컨테이너 이미지는 런타임에 컨테이너가 되고 도커 컨테이너의 경우 도커 엔진에서 실행될 때 이미지가 컨테이너가 됩니다.
리눅스와 윈도우 기반 애플리케이션 모두에서 사용할 수 있는 컨테이너화 된 소프트웨어는 인프라에 관계없이 항상 동일하게 실행됩니다.
컨테이너는 소프트웨어를 환경으로부터 격리시키고 개발과 스테이징의 차이에도 불구하고 균일하게 작동하도록 보장합니다.

그렇다면, 도커와 기존 가상화 기술(VM)의 공통점과 차이점을 통해 도커의 특징을 좀 더 쉽게 알아보겠습니다.

 

 

 

공통점

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

 

차이점 (핵심)

가장 큰 차이점은 격리된 환경을 얼마나 격리를 시키는지의 차이 라고 생각합니다.

도커 컨테이너에서 돌아가는 애플리케이션은 컨테이너가 제공하는 격리 기능 내부에 샌드버드가 있지만, 여전히 같은 호스트의 다른 컨테이너와 동일한 커널을 공유합니다. 결과적으로, 컨테이너 내부에서 실행되는 프로세스는 호스트 시스템(모든 프로세스를 나열할 수 있는 충분한 권한이 있는)에서 볼 수 있습니다.

예를 들어, 도커와 함께 몽고DB 컨테이너를 시작하면 호스트(도커가 아님)의 일반 쉘에 ps-e grep 몽고를 실행하면 프로세스가 표시됩니다.
또한 컨테이너가 전체 OS를 내장할 필요가 없는 결과, 도커는 매우 가볍습니다. (일반적으로 대략 5-100 MB 입니다.)

 

가상머신과 함께 VM 내부에서 실행되는 모든 것은 호스트 운영 체제 또는 하이퍼바이저와 독립되어 있습니다. 가상 머신 플랫폼은 특정 VM에 대한 가상화 프로세스를 관리하기 위해 프로세스를 시작하고, 호스트 시스템은 그것의 하드웨어 자원의 일부를 VM에 할당합니다. 그러나 VM과 근본적으로 다른것은 시작 시간에 이 VM 환경을 위해 새롭고 이 특정 VM만을 위한 커널을 부팅하고 운영 체제 프로세스 OS까지 가상화하는 방법은 비교적 사용법이 간단할 수 있지만 굉장히 느립니다.

 

여담으로 도커에서 컨테이너를 격리시킬 수 있는 이유는 Cgroup과 네임스페이스를 이용해서 입니다. 하지만 생각해보면 Cgroup과 네임스페이스는 리눅스 환경에서 사용되는 것인데 어떻게 된일인가 의문을 가지시는 분들은
터미널을 킨 후 docker version 명령어를 입력한 후 서버 정보를 보면

 

OS가 linux인것을 알 수 있습니다.

 

🙋🏻‍♂️ 후기

오늘은 기초 개념위주로 정리해 보았고, 다음글에서는 간단히 자주 사용하는 명령어를 정리하여 보겠습니다.
감사합니다.

반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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
글 보관함