Containerization/Docker

[Docker/개념] 도커, 도커 컨테이너란 무엇이고 왜 쓸까

쉬지마 이굥진 2024. 5. 9. 15:12

본 포스팅은 원티드 프리온보딩 챌린지 5월 수업을 듣고 회고 및 개인 학습하며 쓴 글입니다.


내가 제일 좋아하는 고래 (tmi)

🐳개발자들에게 사랑받고 있는 docker

본격적으로 도커에 대해 설명하기 전, Git 만큼 기본적인 개발 툴이 된 도커의 영향력(?)에 대해 먼저 알고 가보려 한다.

출처: https://survey.stackoverflow.co/2022/#overview

스택오버플로우에서 2022년에 한 설문조사를 보면 도커를 63% 나 사용하고 있다는 결과를 볼 수 있다. 

출처: https://survey.stackoverflow.co/2023/#overview

그 이듬해 2023년의 설문조사에서는 2022년의 2위에서 상승해 전체 응답자의 53%나 사용하는 도구가 된 것을 볼 수 있다. 이만큼 현재 도커의 인기가 이렇게 높다는 뜻!

 

🐳docker 란?

도커라는 기술을 간단히 두 문장으로 정리하면 이렇다.

  • 컨테이너 기반 가상화 도구
  • 애플리케이션을 컨테이너라는 단위로 격리하여 실행하고 배포하는 기술

 

docker 의 특징

  • open platform 이다.
  • 어플리케이션을 인프라에서 분리해준다.
  • 신속하다.
  • 인프라를 어플리케이션을 관리하는 것처럼 관리할 수 있다.
  • 코드 배포에 용이하다.

📦Container 란?

도커는 컨테이너 기반 가상화 도구라고 하는데, 그럼 '대체 컨테이너가 정확히 뭐지' 라는 생각을 하시는 분들이 많이 계실 것 같다. 도커를 이해하기 위해서는 컨테이너에 대한 이해가 필수적이기 때문에 확실히 알아두어야 한다.

컨테이너는 우리가 일반적으로 생각하는 그 네모난 상자를 생각하면 된다. 

 

컨테이너는 앱을 실행하는 데 필요한 모든 걸 담은 작은 상자다. 앱을 돌리는 데 필요한 코드, 프로그래밍 언어, 라이브러리 같은 것들이 포함 되어 있다.

Docker에서는 'Dockerfile'이라는 걸 사용해서 이런 컨테이너를 만든다.

  • 가상화 기술 중 하나이다.
  • 호스트 운영체제 위에 여러 개의 격리된 환경을 생성한다.
  • 각각의 컨테이너 안에서 애플리케이션을 실행한다.

가상화(Virtualization) 기술

하드웨어 리소스 (프로세서, 메모리, 저장소 등)를 추상화 하는 것을 말함

가상 머신

하나의 물리적인 컴퓨터 자원(CPU, 메모리, 저장장치 등)을 가상적으로 분할하여 여러 개의 가상 컴퓨터 환경을 만들어 내는 기술.

이를 통해 물리적인 컴퓨터 자원을 더욱 효율적으로 사용할 수 있으며, 서버나 애플리케이션 등을 운영하는 데 있어 유연성과 안정성을 제공한다.

 

왜 씀?

  • 컨테이너는 컴퓨터 자원(예를 들어 CPU나 메모리)을 여러 앱들과 나눠 쓸 수 있게 해준다.
  • 앱을 컨테이너에 넣으면 그 컨테이너가 어디에서 실행되든 똑같이 잘 돌아간다. 이건 마치 앱을 작은 상자에 넣어서 어디든 가져갈 수 있는 것과 비슷하다.
  • 컨테이너는 서로 독립적이라서 한 컨테이너가 문제가 생겨도 다른 컨테이너에는 영향을 주지 않는다.

이렇게 컨테이너 기술을 사용하면 앱을 더 안정적이고 효율적으로 관리하고 실행할 수 있다. 컨테이너 덕분에 앱을 어디서든 쉽게 실행하고 관리할 수 있는 것이다.

 

컨테이너의 장점 정리⭐

위에서 언급한 장점을 정리해보면,

  • 경량화
    • 컨테이너는 컴퓨터의 운영체제(OS)를 여러 앱과 공유한다. 그래서 각 앱마다 따로 운영체제를 설치할 필요가 없다. 이 덕분에 컨테이너 파일은 작고 가볍다. 그리고 크기가 작아서 빨리 시작할 수 있다. (장점 미쳤음)
  • 이동성 + 플랫폼 독립성
    • 컨테이너는 앱을 실행하는 데 필요한 모든 것을 함께 담는다.  그래서 한 번 만든 앱을 노트북이든, 클라우드든, 다른 컴퓨터든 재설정 없이 그대로 옮겨 실행할 수 있다.
  • 현대적인 개발 및 아키텍쳐 지원
    • 컨테이너는 크기가 작고 여러 플랫폼에서 잘 작동해서 최신 개발 방식과 앱 패턴에 잘 맞는다. 이말인 즉, 새로운 코드를 조금씩 추가하거나 업데이트할 때 매우 유용하다는 말 !!! 
  • 사용률 향상 (CPU, 메모리 등등)
    • 개발자와 운영자는 컨테이너를 사용해서 컴퓨터의 CPU나 메모리를 더 효율적으로 쓸 수 있다. 앱의 각 부분을 따로따로 배치하거나 크기를 조절할 수 있기 때문에, 전체 앱을 확장하는 것보다 더 유연하게 관리할 수 있다.

이렇게 컨테이너를 사용하면 앱을 가볍고 유연하게 만들 수 있고, 어디서든 잘 돌아가게 할 수 있다.

현대적인 개발 방식에도 잘 맞고, 컴퓨터 자원도 더 잘 활용할 수 있다는 것 !!!! 너이녀석 참 좋은녀석이구나

 

어디다 쓸까요?

이렇게 좋은 거 어디에 쓰면 좋을까 ?! 

  • 마이크로 서비스에 good
    • 컨테이너는 작고 가벼워서, 앱을 여러 작은 부분으로 나누어 관리하는 마이크로서비스 아키텍처에 딱 맞는다! 각 부분이 서로 독립적으로 잘 돌아가게 할 수 있다.
  • DevOps에도 good
    • 소프트웨어를 만들고 운영하는 방식인 DevOps를 사용하는 팀에게 컨테이너는 아주 유용할 수 있다. 마이크로서비스 아키텍처와 잘 맞아서, 앱을 더 빠르고 효율적으로 개발하고 배포할 수 있다.
  • 하이브리드, 멀티클라우드에 이상적임
    • 컨테이너는 어디서든 잘 돌아간다. (노트북이든, 회사 데이터 센터든, 클라우드든 상관 없이!) 이런 점 때문에 여러 클라우드 서비스를 섞어 쓰는 하이브리드나 멀티클라우드 환경에서도 잘 맞는다고 볼 수 있다.
  • 클라우드 마이그레이션
    • 많은 기업이 클라우드로 옮겨가면서 앱을 컨테이너로 바꾸는 방법을 많이 쓴다고 한다. 이렇게 하면 앱을 클라우드로 쉽게 옮길 수 있고, 관리도 편해지기 때문!

이렇게 컨테이너는 마이크로서비스, DevOps, 클라우드 환경에 매우 유용하다. 앱을 더 잘 관리하고, 어디서든 잘 돌아가게 할 수 있어서, 현대적인 소프트웨어 개발에 큰 도움이 되는 녀석이다.

 

📦정리

컨테이너의 구조를 한 눈에 볼 수 있는 그림이다.

  • host : 운영체제가 설치된 주인 컴퓨터
  • container : host에서 실행되는 격리된 각각의 실행 환경
    • 각각의 컨테이너에는 운영체제 전체가 설치되어 있는 게 아니라, 앱을 실행하는데 필요한 라이브러리와 실행 파일들만 포함되어 있다.
이미 존재하는 운영체제를 공유하니까 👉 무엇인가를 설치할 필요도 없고!
운영체제가 하나니까 👉 속도도 느려지지 않고! 시간도 절약 가능! 저장 장치 용량도 아낄 수 있음!

 

 

이런 컨테이너 기술을 이용한 소프트웨어들이 여럿 있으나, 그 중에서 가장 많이 이용하는 제품이 바로 docker 인 것.

(docker는 부두에서 컨테이너를 다루는 노동자들을 뜻한다)

 


🐳도커 왜 쓰나요?

위에서 설명한 도커(및 컨테이너)의 특징을 기반으로 도커를 쓰는 이유를 설명해보자면 아래와 같다.

  • 압도적으로 편해지는 애플리케이션 개발과 배포
    • Docker Container 내부에서 여러 소프트웨어를 설치해도 호스트 OS에는 영향이 없다.
    • CI/CD에서 지속적인 통합(Continuous Integration) 과정의 테스트에서 Docker를 활용한다.
    • 어떤 서버에 올리더라도 같은 환경으로 구성된 컨테이너로 동작하기 때문에 표준화된 배포를 구성할 수 있다.
  • 여러 애플리케이션의 독립성과 확장성이 높아진다.
  • docker가 가상화에서 사실상 표준의 위치이기 때문

 

도커가 뭔지, 왜 쓰는지에 대해 배웠으니 다음 포스팅에선 실습 하는 과정과 결과를 다뤄보도록 하겠다 :-)

 

<다음글>

 

[Docker] Windows 도커 설치 / 설치 확인

[Docker/개념] 도커, 도커 컨테이너란 무엇이고 왜 쓸까본 포스팅은 원티드 프리온보딩 챌린지 5월 수업을 듣고 회고 및 개인 학습하며 쓴 글입니다.🐳개발자들에게 사랑받고 있는 docker본격적으

developer-jinnie.tistory.com


References

https://cloud.google.com/learn/what-is-a-virtual-machine?hl=ko#section-2

https://www.youtube.com/watch?v=Ps8HDIAyPD0&list=PLuHgQVnccGMDeMJsGq2O-55Ymtx0IdKWf&index=1