티스토리 뷰

Docker

Docker란?

0307kjb 2022. 4. 13. 10:38
 

DevOps, 마이크로소프트 아키텍쳐, 클라우드 => 프로그램 세분화, 서버 관리 어려워짐

이런 상황에 도커가 출시.

 

+

기존 개발의 문제점

  • 언어, 웹서버, 데이터베이스, 자동배포툴 등등 여러가지 버전을 신경써서 다운받고 서로 맞물려 잘 동작할 수 있도록 이것저것 설정해줘야 함
  • 서버를 운영하다보면 더 성능 좋은 서버로 옮겨가거나 늘어나 접속량을 처리하기 위해 서버를 여럿 추가해야 하게 될 수 있어 그곳들에도 똑같이 다 설치를 해야함
  • 같은 서버에 여러 서비스를 돌리는 경우, 각각이 다른 실행환경에서 동작해야 될 때 일이 까다로워짐 ex) 기존 java7에서 동작 -> 새로운 서비스 java8에서 동작

도커의 장점

  1. 각 요소들이 설치된 모습을 '이미지'란 형태로 박제해 저장 (Docker Hub에 업로드 / 공유)
  2. 이미지로 저장된 항목들이 함께 연결돼서 동작하도록 설정된 상태를 명령어 텍스트나 문서 형태로 저장할 수 있음
  3. Docker Hub에서 요소를 다운 받고 Docker는 이것들을 컴퓨터에 바로 설치하지 않고, '컨테이너'라는 독립된 가상 공간을 만들어내서 복원함
  4. 가상 OS를 설치하지 않고 도커엔진을 통해 실행 환경만 독립적으로 돌리는 거라 훨씬 가볍고 빠르게 사용 가능

+

정의 : 컨테이너 기반의 오픈소스 가상화 플랫폼

여기서 컨테이너는 다양한 프로그램과 실행환경을 추상화하고 동일한 인터페이스를 제공의 의미.

가상화는 단일 물리 하드웨어 시스템에서 여러 시뮬레이션 환경, 전용 리소스를 생성할 수 있는 기술인데 하이퍼바이저라는 소프트웨어가 하드웨어와 직접 연결되며 1개의 시스템을 가상 머신(VM)이라는 별도의 고유하고 안전한 환경을 분할할 수 있음.

플랫폼은 응용 소프트웨어를 실행하기 위해 쓰이는 하드웨어와 소프트웨어의 결합.(ex 윈도우)

=> 결과로 프로그램의 배포 및 관리를 단순하게 해줌 (백엔드, 디비 서버, 메시지 큐, AWS, Azure, Google Cloud 등에 쓰임이 있음.)

여기서 컨테이너의 경우

기존 방식으로 OS 가상화(VMware나 VirtualBox)같은 가상머신을 사용했는데 사용법은 간단하지만, 무겁고 느려서 운영환경에서 사용하기 어려움.

이러한 상황을 개선하기 위해 전체 OS를 가상화하지 않는 방법인 프로세스 격리하는 방식이 등장하여 메모리와 기능적으로 만족도가 높음

 

 

이미지)

이미지는 컨테이너 실행에 필요한 파일과 설정값 등을 포함하고 있는 것이며 상태값을 가지지않고 변하지않음(Immutable) 말이 그렇지 컨테이너의 모든 정보를 담는다고 생각하면 됨.

=> 새로운 서버 추가 시 미리 만들어 놓은 이미지를 다운 받고 컨테이너 생성하면 되는데 여러개의 컨테이너도 실행하고 수 많은 서버도 문제 없음.

=> 도커 이미지는 Docker hub, Docker Registry 저장소를 직접 만들어 관리 가능.

이런 문제는 어때?

처음 이미지 다운 받을 때 부담이 없지만, 기존 이미지에 파일 하나 추가 할 때 다시 그 많은 데이터를 다시 받으면 매우 비효율적.

도커는 이런 문제를 해결하기 위해 Layer라는 개념을 사용하고 유니온 파일 시스템( 다른 파일시스템 통합해주는 시스템) 을 이용하여 여러개의 레이어를 하나의 파일시스템으로 사용할 수 있게 해줌.

각 레이어 층에서 변화(crud) 할 때마다 새로운 레이어가 생성되며 이런 새롭게 수정된 레이어만 다운받으니 굉장히 효율적.

또 컨테이너 생성 시 레이어 방식을 사용하는데 기존 이미지의 레이어 위에 읽기/쓰기 레이어를 추가해 이미지 레이어를 그대로 사용해도 각 R/W 레이어에 저장되니 최소한의 용량으로 효과를 본다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
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
글 보관함