Docker

#1 도커란

낚시하는고양이 2024. 11. 11. 21:48
반응형

도커  를 많이 들어보셨죠?

 

스택오버플로에서 가장 먼저 배워야 하는 기술로 꼽히고, 그 다음으로 많이 사용되는 기술이 도커입니다. 많은 개발자들이 도커를 꼭 배워보고 싶어 한다고 합니다. 그렇다면 도커란 정확히 무엇일까요? 얼마나 유용하고 어디에서 사용되는지 궁금하시죠? 자, 그래서 준비했습니다.

도커가 무엇인지, 어떻게 활용할 수 있는지, 실용적인 사용 방법도 알려드리겠습니다. 준비되셨나요?

먼저 도커에 대한 정의부터 내려볼까요?

 

도커란 애플리케이션을 패키징할 수 있는 툴이라고 생각합니다.

 

컨테이너라고 불리는 하나의 작은 소프트웨어 유닛 안에 우리 애플리케이션과 그에 필요한 시스템 환경 설정, 모든 의존성을 하나로 묶어서 다른 서버,

다른 PC, 그 어떤 곳에도 쉽게 배포하고 안정적으로 구동할 수 있게 도와주는 도구라고 생각합니다.

 

 

기술이 발전함에 따라 우리 애플리케이션을 구동하는 데 꽤 많은 것들이 필요해졌습니다. Node.js를 예로 들어보면, 우리의 소스코드만 서버에 배포하는 것으로는 애플리케이션을 구동하는 데 문제가 있습니다. Node.js와 npm, 외부 라이브러리를 사용한다면 여러 의존성과 환경 설정, 환경변수 등 이 모든 것들을 다 설정해줘야 합니다. 서버마다, 개발자들의 PC마다 이런 모든 것들을 설치하고 설정하는 것은 꽤 번거롭고 오류도 많이 발생할 수 있습니다.

 

내가 Node.js를 사용하고 있고 서버에도 Node.js가 있으니까 소스코드를 서버에 배포하면 자동으로 동작하겠지라고 생각했다가는 에러가 발생할 수 있습니다.

 

"내 PC에서는 잘 되는데 웹서버에서는 안 되네"라고 디버깅을 하다 보면 Node.js 버전이 맞지 않아서 발생하는 문제일 경우도 있습니다.

 

 

이런 번거로움과 문제점을 해결해 주기 위해 도커가 탄생했습니다.

 

이 도커 컨테이너 안에는 우리 애플리케이션뿐만 아니라 애플리케이션을 정상적으로 동작하게 하는 Node.js 환경 설정, npm, 그리고 여러 라이브러리들의 의존성, 애플리케이션에 필요한 다양한 리소스들이 포함될 수 있습니다.

 

한마디로 말하면 우리 애플리케이션을 구동하는 데 필요한 모든 것들을 이 도커 컨테이너 안에 담아넣었다고 볼 수 있겠죠. 이렇게 도커 컨테이너를 사용하면 애플리케이션을 구동하기 위한 런타임 환경에 필요한 모든 것들을 어떤 PC에서도 언제든지 동일하게 구동할 수 있고, "맥 PC에서는 잘 동작하는데 왜 윈도우 서버에서만 안 되지?"

 

라는 문제를 해결할 수 있습니다. 또 이것저것 설정하고 준비해야 하는 번거로움을 해결해 주는 정말 유용한 패키징 도구라고 볼 수 있습니다.

 

이쯤 되면 "그럼 도커 컨테이너가 VM과 비슷한 거 아닌가요?"라고 질문하실 수 있을 것 같은데요. VM은 하드웨어 인프라스트럭처 위에 VMware나 VirtualBox와 같은 하이퍼바이저 소프트웨어를 이용해 각각의 가상 머신을 만들 수 있습니다.

 

한 운영체제 위에서 동일한 애플리케이션을 각각의 고립된 다른 환경에서 구동하기 위해서는 가상 머신을 이용해서 애플리케이션을 구동해야 했습니다.

 

이 가상 머신은 각각의 운영체제를 포함하고 있기 때문에 Mac이라는 OS 위에서 가상 머신을 이용하면 Windows와 Linux를 동시에 구동할 수 있습니다.

 

하지만 무겁죠. 이렇게 고립된 환경에서 애플리케이션을 구동하기 위해 VM을 사용하면 운영체제를 포함하고 있기 때문에 굉장히 무겁고, 시작하는 데도 오래 걸리고, 또 컴퓨터 운영체제 인프라스트럭처의 리소스를 많이 잡아먹는 주범이 될 수도 있어요.

VM에서 조금 경량화된 개념이 컨테이너입니다.

 

 

컨테이너는 하드웨어에 설치된 운영체제, 즉 호스트 OS에서 컨테이너 엔진이라는 소프트웨어를 설치만 하면 개별적인 컨테이너를 만들어서 각각의 애플리케이션을 고립된 환경에서 구동할 수 있게 해줍니다.

 

VM과의 큰 차이점이 보이시죠?

가상 머신은 운영체제를 포함하는 반면, 이 컨테이너는 운영체제를 포함하지 않습니다.

 

 

컨테이너의 개념

  • 컨테이너는 하나의 작은 소프트웨어 유닛으로, 어플리케이션과 필요한 시스템 환경 설정을 포함한다.
  • 이 컨테이너는 다른 서버 PC에 쉽게 배포할 수 있도록 설계되어 있다.
  • 안정적인 구동을 지원하여 다양한 환경에서 일관된 성능을 제공하는 것이 특징이다.
  • 토리라는 개념을 통해, 기술 발전에 따라 어플리케이션 구동에 필요한 요소들이 증가하고 있음을 강조한다.

어플리케이션 배포의 문제점

  • 테크놀로지 발전에 따라 어플리케이션을 구동하는 데 필요한 요소가 많아졌다.
  • 소스 코드를 서버에 배포하는 것만으로는 문제를 해결할 수 없다.
  • 노드 JS npm 같은 외부 라이브러리를 사용할 경우, 여러 환경 설정이 필요하다.
  • 개발자들이 각자의 PC에서 모든 것을 설치하고 설정하는 것은 번거롭고 오류가 발생할 수 있다.

노드 JS와 환경 설정

  • 노드 JS npm 외부 라이브러리를 사용할 때, 여러 디펜던시와 환경 변수를 설정해야 한다.
  • 각 서버마다 환경 설정이 다를 수 있어, 디버깅 과정에서 문제가 발생할 수 있다.
  • 예를 들어, 노드 JS 버전이 맞지 않아 발생하는 문제를 들 수 있다.
  • 이러한 문제는 개발자에게 불편함을 초래하며, 효율적인 개발을 방해한다.

도커의 필요성

  • 도커는 이러한 번거로움과 문제점을 해결하기 위해 탄생하였다.
  • 도커  컨테이너는 어플리케이션과 그에 필요한 모든 리소스를 포함할 수 있다.
  • 이 컨테이너는 어플리케이션이 정상적으로 동작하기 위한 환경 설정 라이브러리를 포함한다.
  • 모든 필수 요소를 하나의 컨테이너에 담아, 배포와 구동을 간편하게 만든다.

도커의 기능과 장점

  • 도커를 사용하면 어플리케이션을 구동하기 위한 런타임 환경을 동일하게 유지할 수 있다.
  • 맥 PC에서 잘 동작하는 어플리케이션이 서버에서도 동일하게 동작하도록 보장한다.
  • 설정과 준비 과정에서의 번거로움을 줄여준다.
  • 도커는 유용한 패키징 도구로, 개발자에게 많은 이점을 제공한다.

VM과 도커의 차이

  • VM(가상 머신)은 하드웨어 위에 설치된 소프트웨어로, 각각의 가상 머신을 생성할 수 있다.
  • VM은 운영 체제를 포함하고 있어, 무겁고 시작하는 데 시간이 오래 걸린다.
  • 컨테이너는 호스트 OS를 공유하며, 경량화된 환경을 제공한다.
  • VM과 컨테이너의 주요 차이점은 운영 체제의 포함 여부에 있다.

가상 머신의 특징

  • VM은 하드웨어와 운영 체제 위에 설치된 소프트웨어로, 고립된 환경에서 어플리케이션을 구동할 수 있다.
  • VM을 사용하면 여러 운영 체제를 동시에 구동할 수 있는 장점이 있다.
  • 그러나 VM은 리소스를 많이 소모하고, 성능 저하를 초래할 수 있다.
  • 이러한 문제로 인해, 경량화된 컨테이너의 필요성이 대두되었다.

컨테이너의 경량화

  • 컨테이너는 VM보다 경량화된 개념으로, 호스트 OS에서 컨테이너 엔진만 설치하면 된다.
  • 각 어플리케이션은 고립된 환경에서 구동될 수 있다.
  • 컨테이너는 운영 체제를 포함하지 않고, 호스트 OS를 공유하여 효율성을 높인다.
  • 이러한 구조는 리소스 절약 빠른 시작을 가능하게 한다.

컨테이너 엔진의 역할

  • 컨테이너가 구동되기 위해서는 컨테이너 엔진이 필요하다.
  • 이 엔진은 호스트 OS에 접근하여 필요한 작업을 처리한다.
  • 도커는 가장 많이 사용되는 컨테이너 엔진으로, 경량화된 환경을 제공한다.
  • 도커는 개발자들에게 편리한 도구로 자리 잡고 있다.

도커의 구성 요소

  • 도커는 컨테이너를 만들고 배포하고 구동하는 기능을 제공한다.
  • 컨테이너를 만들기 위해서는 세 가지가 필요하다.
    1. 도커 파일: 컨테이너를 어떻게 만들 것인지에 대한 설명서이다.
    2. 이미지: 도커 파일을 기반으로 생성된 컨테이너의 템플릿이다.
    3. 컨테이너: 실제로 구동되는 어플리케이션 환경이다.
  • 도커 파일은 어플리케이션 구동에 필요한 프레임워크 라이브러리를 명시할 수 있다.

컨테이너 생성 과정

  • 컨테이너를 만들기 위해서는 도커 파일을 먼저 작성해야 한다.
  • 도커 파일은 어플리케이션 구동에 필요한 환경 변수 스크립트를 포함할 수 있다.
  • 이 과정을 통해 이미지가 생성되고, 이를 기반으로 컨테이너가 구동된다.
  • 이러한 단계는 어플리케이션의 일관된 배포 구동을 보장한다.

 

 

 

도커파일을 이미지로만들수 있는데

 

 

 

Image 는 java 에 class 처럼 생각하면 됩니다.

 

 

반응형