[Docker] Docker와 Container의 이해

99winnmin·2023년 1월 23일
0

Docker

목록 보기
1/16

컨테이너를 배워야 하는 이유?

  • Bare Metal 시스템에서 각 os 위에 여러 어플리케이션들을 운영하는 것이 출발점이였음
  • h/w 성능이 좋아지고 싸지면서 가상 컴퓨터에서 필요한 어플리케이션들을 운영하는 것으로 발전 -> 가상화 플랫폼
  • 시간이 지나면서 FE, BE 어플리케이션들을 client들의 사용량에 따라 각각 scale in, out하여 자유롭게 확장, 축소할 수 있는 요구가 생김 -> 무중단 배포/운영을 위해!
  • 결국 Bare Metal 시스템 위에 OS를 올리고 그 위에 Container Engine을 올림
  • Docker는 Container 엔진의 종류임
  • Container로 운영되는 어플리케이션은 용량이 적음 why? 실제 어플리케이션에 요구되는 최소한의 환경만 들어가기 때문!!
  • 하나의 프로그램은 isolate되기 때문에 확장성 good, 배포 easy -> 이 시대가 요구하는 바!

소프트웨어적 Container란?

백엔드든지 프론트엔드든지 어플리케이션에서 요구되는 것들을 컨테이너에 담아서 독립적으로 구성해놓음

왜 굳이 리눅스에서 돌리는가?

  • 리눅스 커널의 기능을 써야 하기 때문에

사용되는 Linux Kernel의 기능

  1. chroot
    독립된 공간 형성
  2. namespace
    isolate 기능 지원
    각각의 컨테이너가 완전히 독립될 수 있는 기능
  3. cgroup
    필요한만큼 H/W 지원

그렇다면 윈도우나 MacOS는?

Hypervisor 기능을 활성화시켜서 사용해야함 -> 리눅스 커널의 기능을 사용하기 위해
따라서 Docker는 윈도우나 MacOS 말고 라이센스 비용이 들지 않는 Linux 위에 설치해서 사용함

그냥 프로그램과 컨테이너는 어떻게 다른가?

하는 일은 같지만 생긴 구조(모양)이 다르다~
그냥 운영하느냐? 컨테이너에 넣어서 운영하느냐!

DockerFile을 통해 빌드해서 운영하게됨
<예시 DockerFile 로직>
1. 필요한 환경을 먼저 세팅
2. 만들어놓은 어플리케이션을 저장
3. application을 실행

ex) 컨테이너가 8080포트를 열고 client connection을 처리하고 200 code를 리턴하게 됨

사용하는 진짜 주요한 이유?

개발자가 만든 그대로 어디서든 돌아가게!
확장/축소가 쉽고 MSA, DevOps에 적합하다!

우리가 평소에 개발했던 개발 환경을 다른 곳에서 받아서 운영할 때 개발 환경을 세팅을 하게 할 필요가 없다! -> 컨테이너 기반 어플리케이션이기 때문에

ex) 서버 하나를 만들었는데 scale out 해야한다 근데 os를 똑같이 하나 더 만들어서 운영한다?(인스턴스를 하나 더 판다?) 이건 너무 비효율적이고 cost가 많이 나갈거같음... 근데 컨테이너 기반으로 운영을 한다? 그럼 도커 어플리케이션만 하나 더 운영하면 매우 편리하고 OS를 하나 더 운영할 필요가 없음!!!

profile
功在不舍

0개의 댓글

관련 채용 정보