docker - 개념

doohyunlm·2021년 9월 24일
3

docker

목록 보기
1/1
post-thumbnail

목차

  1. 도커(docker)
    1-1. 컨테이너
    1-2. 이미지
  2. 장점
    2-1. 레이어 저장 방식
    2-2. 경로 지정 방식
    2-3. Docker Hub
    2-4. 많은 자료
  3. 참조
  4. 마치며

  • 최근 각광받는 기술로 2가지를 꼽자면 AWSKubernetes를 꼽을 수 있습니다.

  • 그중 Kubernetesdocker기반의 관리툴입니다.

  • Kubernetes를 알기전에 docker부터 알아보겠습니다.


도커(docker)


  • docker란 컨테이너 기반의 오픈소스 가상화 플랫폼입니다.

  • 다양한 프로그램, 실행환경을 컨테이너로 추상화하고 동일한 인터페이스를 제공하여 프로그램의 배포 및 관리를 단순하게 만들어 줍니다.

  • 백엔드, DB, 메시지 큐등 어떤것도 컨테이너로 추상화할 수 있고 어느 환경에서도 실행 가능합니다.



컨테이너(Container)


  • 컨테이너(Container)는 docker의 핵심 기술로써 격리된 공간에서 프로세스가 동작하는 역할을 합니다.

  • 가상화 기술중 하나지만 기존 가상화 방식과는 차이가 있습니다.


기존 가상화와의 차이점


  • 기존의 가상화 방식은 주로 OS를 가상화하였습니다.

  • VMware나 VirtualBox같은 가상머신은 호스트 OS위에 게스트 OS 전체를 가상화하여 사용하는 방식으로 여러가지 OS를 가상화할 수 있고 비교적 사용법이 간단하지만 무겁고 느리기 때문에 운영환경에선 사용하기에 어려움이 있었습니다.

  • 이러한 상황을 개선하기 위해 나온 기술이 HVM을 이용한 KVM반가상화 방식의 Xen이 등장하게 됩니다.

  • 위의 방식은 게스트 OS가 필요하긴 하지만 전체 OS를 가상화하는 방식이 아니였기 때문에 호스트형 가상화 방식에 비해 성능이 향상되었습니다. 이러한 기술들은 OpenStack이나 AWS, Rackspace같은 클라우드 서비스에서 가상 컴퓨팅 기술의 기반이 되었습니다.

  • 전가상화, 반가상화 모두 성능상 문제가 있었고 이를 개선하기 위해 프로세스를 격리하는 방식이 등장하는 데 이 방식이 컨테이너(Container)입니다.

  • 리눅스에서는 이방식을 리눅스 컨테이너라고 하고 단순히 프로세스를 격리시키기 때문에 가볍고 빠르게 동작합니다. CPU나 메모리는 딱 프로세스가 필요한 만큼만 추가로 사용하고 성능적으로도 거의 손실이 없습니다.

  • 하나의 서버에 여러개의 컨테이너를 실행하면 서로 영향을 미치지 않고 독립적으로 실행되며 가벼운 VM을 사용하는 느낌을 줍니다.

  • 실행중인 컨테이너에 접속하여 명렁어를 입력할 수 있고 패키지를 설치할 수 있으며 사용자를 추가하거나 여러개의 프로세스를 백그라운드로 실행할 수도 있습니다.

  • CPU나 메모리 사용량을 제한할 수 있고 호스트의 특정포트와 연결하거나 호스트의 특정 디렉토리를 내부 디렉토리인 것처럼 사용가능합니다.

  • 새로운 컨테이너를 추가하는데 드는 시간은 1~2초로 가상머신과 비교할 수 없게 빠릅니다.




이미지(Image)


  • 도커에서 가장 중요한 개념은 컨테이너와 함께 이미지라는 개념입니다.

  • 이미지는 컨테이너 실행에 필요한 파일과 설정값등을 포함하고 있는것으로 상태값을 가지지 않고 변하지 않습니다.

  • 컨테이너는 이미지를 실행한 상태라고 볼수 있고 추가되거나 변하는 값은 컨테이너에 저장됩니다.

  • 같은 이미지로 여러개의 컨테이너를 생성할 수 있고 상태가 변하더라도 이미지는 변하지 않습니다.

  • 이미지는 실행하기 위한 모든 정보를 가지고 있기 때문에 이것저것 설치할 필요가 없습니다. 미리 만들어논 이미지를 다운 받고 컨테이너만 생성하면 됩니다.

  • 이미지는 Docker hub에서 등록 및 다운 받거나 Docker Registry 저장소를 직접 만들어 관리할 수 있습니다.




장점


레이어 저장 방식



  • 도커 이미지는 컨테이너를 실행하기 위한 모든 정보를 담고 있기에 용량이 큽니다. 처음 다운로드 받을땐 크게 부담이 되지 않지만 파일 하나 추가했다고 다시 다운받는다면 비효율적일 수밖에 없습니다.

  • 도커는 이러한 문제를 해결하기 위해 레이어라는 개념을 사용하고 유니온 파일 시스템을 이용하여 여러개의 레이어를 하나의 파일 시스템으로 사용할 수 있도록 해줍니다.

  • 이미지는 여러개의 읽기 전용 레이어로 구성되고 파일이 추가되거나 수정되면 새로운 레이어가 생성됩니다.

  • 위에 그림처럼 아예 새로워지는 것이 아니라 위에 레이어가 추가되는 개념이기 때문에 추가된 레이어만 다운받을 수 있어 효율적입니다.

  • 컨테이너를 생성할 때도 레이어 방식을 사용하는데 기존의 이미지 레이어 위에 읽기 쓰기 레이어를 추가하여 이미지 레이어를 그대로 사용하면서 컨테이너가 실행에 생성하는 파일이나 변경된 내용은 읽기/쓰기 레이어에 저장되므로 여러개의 컨테이너를 생성해도 최소한의 용량만 사용합니다.




경로 지정 방식


  • 이미지는 url 방식으로 관리하며 태그를 붙일 수 있습니다.

  • ubuntu 14.04 이미지는 docker.io/library/ubuntu:14.04 또는 docker.io/library/ubuntu:trusty 이고 docker.io/library는 생략가능하여 ubuntu:14.04 로 사용할 수 있습니다.




Docker Hub


  • 도커 이미지 용량은 수백메가에서 수기가로 넘어가는 경우가 흔한데 도커는 Docker hub를 통해 공개 이미지를 무료로 관리해줍니다.

  • 쉽게 등록된 이미지를 활용하여 확장이 가능합니다.




많은 자료


  • 사용하는 많은 사람들과 기업이 존재하며 자료가 방대하기 때문에 사용하기에 큰 불편함을 줄일 수 있습니다.




참조


https://subicura.com/2017/01/19/docker-guide-for-beginners-1.html

마치며


  • 공부하면서 정리한 docker 개념입니다.

  • 참조 글에 정리가 잘되어 있으니 시간나시면 참조 글을 읽어보시는걸 추천드립니다.

profile
백엔드 개발자

2개의 댓글

comment-user-thumbnail
2023년 7월 28일

컨테이너 접하기 전 이 글을 먼저 봤으면 좋았을텐데 하는 아쉬움이 들정도로 도움이 됐습니다

1개의 답글