Container와 Docker

hyomkim·2021년 2월 4일
0

프로그래밍 지식

목록 보기
4/5

container 란?

컨테이너는 애플리케이션이 동작하는데 필요한 환경을 패키징할수 있는 기술입니다.

컨테이너를 사용하는 이유

  1. 일관성 있는 환경
    사용자마다 다른 동작환경에 대하여, 컨테이너는 애플리케이션이 동작할 환경까지 패키징하여 제공하므로 애플리케이션이 어떤 환경에서 구동하던 간에 동일한 구동환경을 약속받을 수 있습니다.

  2. 폭넓은 구동 환경
    패키지안에 환경까지 포함되어 있으므로 최종적으로 구동될 환경에의에 받는 영향이 현저이 작아서 환경에 구애받지 않고 구동할 수 있습니다.

  3. 격리
    사용자가 의도적으로 연결하기 전 까지 한정된 환경에서만 동작하므로 사용하지 않을때는 애플리케이션 자체를 격리하는 효과를 가집니다.

  4. 가벼움
    가상머신과 대조하여 가상머신의 크기는 GB단위인데 반해 컨테이너는 MB단위의 크기를 가집니다.
    덕분에 배포에 드는 시간도 현저하게 적습니다.

컨테이너의 장점을 한마디로 요약하자면
개발하는 애플리케이션의 구동 환경에 대한 고민을 해결해줍니다.

Docker 란?

environment disparity(환경 불균형)문제 해결을 위해 사용하는 기능입니다.

간단히 말해서, 개발환경이나 서비스환경관리를 쉽게 할 수 있도록 해주는 서비스 입니다.

이해하기 쉽도록 예를 들어보겠습니다.

농부코코넛 농사를 하고 있습니다.
농부가 코코넛을 기르고있는 은 코코넛이 자라기 좋은 환경 이었습니다.
그러던 어느날 농부는 지인이 자신의 땅에서도 코코넛을 키워달라는 지인의 부탁을 받고 지인의 땅에 코코넛을 똑같이 심었어요.
하지만 그 곳의 땅은 그동안 코코넛을 키워왔던 땅과 환경이 전혀 달랐어요.
코코넛들은 제대로 자라지 못하고 죽어가기 시작했답니다.

여기서

농부 : 개발자
코코넛 : 프로그램
땅 : 기존 서버 혹은 기존 애플리케이션 구동 환경
지인의 땅 : 새로운 서버 혹은 새로운 애플리케이션 구동 환경

이라고 생각해 보겠습니다.
그리고 대입해서 다시 해석해보면 이런식으로 해석해볼 수 있습니다.

개발자프로그램을 개발했습니다.
이 애플리케이션은 윈도우 환경에서 개발되어 구동합니다.
그러던 어느날 리눅스기반의 서버에서 프로그램을 구동해야 했지만 환경이 달라서 프로그램이 제대로 구동하지 않았습니다.

프로그램의 구동 환경 달라지게 되면 프로그램이 제대로 동작하지 않는 문제가 발생할 수 있습니다.

도커는 이러한 환경이 달라서 생기는 문제를 해결해주는 기술 입니다.

한번 더 위의 농부예를 가지고 설명해 보겠습니다.
농부가 환경이 달라지면서 코코넛을 기르기가 힘들다면 이를 해결할 수 있는 방법은 무엇이 있을까요?

일단 코코넛 농사 이주 업체는 코코넛나무가 어떤종류인지 기억하기위해 전체적인 사진을 찍어 준비합니다.
업체는 새로운 땅에서 필요한 만큼의 공간에 비닐하우스를 만듭니다. 그리고 그 안에 사진대로 모든 준비를 해줍니다. 여기엔 코코넛나무 본체는 물론 코코넛을 키우기위한 각종 장치나 기기 그리고 땅의 재질등의 환경도 완벽하게 준비해줍니다.

여기서

코코넛 농사 이주 업체 : 도커
사진 : 이미지(도커는 필요한 것을들 이미지형식으로 복사합니다.)
비닐하우스 : 컨테이너

이를 대입해서 이야기를 해보자면

도커는 프로그램의 전체적인 것들을 이미지로 확보합니다.
그리고 새로운 서버에 컨테이너를 만들어서 이미지에따라 필요한 툴등을 자동으로 다운로드를 하는 등 최적의 환경을 만들어 줍니다.

라고 할 수 있습니다.

이미지와 컨테이너

보통 비유를 할 때, 이미지를 붕어빵 틀에, 컨테이너를 붕어빵으로 비유합니다.

붕어빵 틀이 있다면 우리는 언제든지 붕어빵을 찍어낼 수 있지요.
이처럼 우리가 이미지를 가지고 있다면, 그 이미지대로 구성된 컨테이너를 몇개든 찍어낼 수 있습니다.

요약

요약하자면 도커는
새로운 서버나 운영체제에 컨테이너를 만들어 해당 공간을 격리시킵니다.
그리고 격리된 공간에 필요한 툴이나 프로그램등을 자동으로 설치하고 프로그램 동작을 위한 환경조성을 자동으로 해줍니다.

그리고 컨테이너를 활용하는 특징덕에 전혀 다른 작업도 별개의 컨테이너를 만들어서 진행할 수 있다는 장점이 있습니다.

Reference :
https://tech.osci.kr/2020/03/03/91690167/
https://www.redhat.com/ko/topics/containers/whats-a-linux-container
https://sesamy.tistory.com/7
https://cloud.google.com/containers?hl=ko
https://velog.io/@shlee7131/1.-Docker-%EA%B8%B0%EC%B4%88
https://www.youtube.com/watch?v=tPjpcsgxgWc&feature=youtu.be
https://www.youtube.com/watch?v=chnCcGCTyBg

profile
C++을 좋아하는 조금 모자란 사람이랍니다!

0개의 댓글