Docker, 아직도 몰라?

고은정·2021년 5월 7일
2

Docker

목록 보기
1/2
post-thumbnail

이 글은 subicura님의 글에서 많은 도움을 받아서 작성했습니다.

Docker 시리즈!📚

벨로그에서 Docker시리즈를 작성하면서 아래의 항목들에 대한 개념을 잡아나갈 계획입니다.

  • 도커가 뭐지?
  • 왜 생긴거지?
  • 도커의 핵심 포인트
  • 인기가 넘치는 이유
  • 기본 사용법(명령어)
  • 도커에서 개발하기
  • 배포

이 포스팅은 시리즈에서 첫번째 주자로, 도커의 전체 개념을 다룹니다.

도커? 많이 들어봤는데,,,🤔

도커,,많이 들어봤고, 고래로고를 사용하는 것도 알고있습니다. 그런데 어디에서 온 무엇일까요??

도커 역사의 시작

도커 역사에 대해 아주 짧게 이야기하면, 2013년 3월에 산타클라라에서 열린 Pycon Conference에서 dotCloud의 창업자인 Solomon Hykes의 The future of Linux Container 세션을 통해 처음 알려졌습니다.

그래서 Docker가 뭐라고?💁‍♀️

짧고 간단하게 컨테이너 기반의 오픈소스 가상화 플랫폼입니다. 컨테이너는 뭐고,,가상화는 뭔지,,

컨테이너

컨테이너는 도커의 주요 개념입니다. 위의 도커 로고만 봐도 고래가 컨데이너들을 가득 담고 있는것을 확인할 수 있습니다.

컨테이너는 격리된 공간에서 프로세스가 동작하는 기술로, 가상화 기술의 하나인데 도커 이전의 방식과는 차이가 있습니다.

기존 가상화는 주로 OS를 가상화하는 방식으로, 우리가 많이 사용하는 VMware같이 가상머신을 사용해서 호스트OS위에 게스트OS전체를 가상화하는 방식입니다. 이 방식으로 여러가지 OS를 가상화 할 수 있고, 쉽게 사용이 가능하지만 무겁고 느린 단점 때문에 운영환경에서는 사용할 수 없습니다.

이를 개선하기 위해 반가상화가 등장합니다. 게스트OS를 필요로 하면서도 전체OS를 가상화하는 방식이 아니기 때문에 기존의 호스트형 가상화 방식에 비해 성능이 높습니다.

하지만 성능 문제로 인해 결국은 프로세스를 격리시키는 방식이 등장하게 됩니다. 리눅스에서 이것이 바로 리눅스 컨테이너입니다.

프로세스를 격리시켜서 가볍고 빠르게 동작하도록 하고, CPU나 메모리는 필요한 만큼만 사용해서 성능이 매우 높습니다. 하나의 서버에 여러 컨테이너를 실행하더라도 서로 영향을 미치지 않고 독립적으로 실행되어 가벼운 VMware를 사용하는 느낌을 주고, 명령어를 입력하거나 패키지 설치, 사용자 추가, 백그라운드 프로세스 실행 등이 가능합니다.

위의 설명을 그림으로 표현하면 아래와 같습니다. VMs에서 붉은 박스로 표시된 부분이 낮은 성능을 불러옵니다.

이미지

컨테이너와 함께 도커의 주요 개념으로 불리는 이미지는 다음과 같습니다. 이미지 출처

컨테이너 실행에 필요한 파일과 설정값등을 모두 포함하고 있는 것으로, 상태값을 가지지않으며 변하지 않습니다. 즉, 위에서 설명한 컨테이너는 이미지를 실행한 상태라고 볼 수 있고, 변경되는 값은 컨테이너에 저장됩니다. 이러한 개념으로 인해 같은 이미지에서 여러 컨테이너 생성이 가능하며, 컨테이너의 상태를 수정하거나 삭제하더라도 이미지는 변하지 않고 그대로 남아있습니다.

다들 좋아하는 이유가 뭐래?🤷‍♀️

도커로 동작하는 프로젝트들이 너무너무너무 많다는 것은 간단한 구글링을 통해서도 알 수 있습니다. 다들 왜 이렇게 좋아하고, 왜 이렇게나 많이 사용하는 걸까요??

1. 레이어 저장방식

도커의 레이어 개념은 여러개의 레이어를 하나의 파일 시스템으로 사용할 수 있도록 합니다. 이러한 개념이 왜 필요한 걸까요? 도커 이미지는 컨테이너를 실행하기 위한 모든 정보를 가지고 있기 때문에 용량이 매우 큽니다(보통 수백MB). 이미지를 다운받을 땐 큰 부담이 없더라도, 파일 하나씩 추가할 때마다 큰 용량을 매번 다운받는 것은 매우 비효율적입니다.

이러한 부분에서 레이어라는 개념이 빛을 바라는데, 기존에 다운받은 이미지는 여러 개의 읽기전용 레이어로 구성되고, 수정이나 추가된 파일들은 새로운 레이어로 생성됩니다.

이미지뿐만 아니라 컨테이너에도 레이어 방식이 사용되는데, 기존의 이미지 레이어 위에 새로운 레이어를 추가하면 컨테이너 실행중에 수정 및 추가된 내용은 새로운 레이어에 저장되므로 여러개의 컨테이너를 생성해도 최소한의 용량만 사용하게 됩니다.

그림으로 표현하면 아래와 같습니다. 이미지 출처

2. 이미지 경로

이미치 출처
이미지는 url방식으로 관리하며 태그를 붙여서 사용합니다. 그래서 이해가 쉽고 이해하기 쉽고 편리하게 사용할 수 있습니다.

3. Dockerfile

도커는 이미지를 만들기 위해서 Dockerfile에 DSL(Domain-specific language)로 이미지 생성 과정을 기록합니다. 이 파일은 소스와 함께 버전 관리가되며, 후에 의존성 패키지를 설치하고 설정할 때 매우 유용하게 사용이 가능합니다.

4. Docker Hub

이미지 출처
엄청난 용량의 도커 이미지를 무료로 관리해줍니다. 큰 용량의 이미지를 서버에 저장하고 관리하는 것 자체가 쉽지않은데, docker hub는 심지어 무료입니다.

5. Command, API

도커 클라이언트의 커맨드 명령어는 매우 잘 만들어졌습니다.(저는 아직 사용을,,,😅) 명령어가 직관적이고 사용하기가 쉬워서 시스템 구성에 대한 이해도가 낮더라도 편하게 사용이 가능합니다. 또한 http기반의 Rest API도 지원하여 확장성이 매우 좋습니다. 이 부분은 다음 포스팅쯤에서 다룰 예정입니다.

6. 커다란 생태계와 커뮤니티

도커로 만들어진 오픈소스 프로젝트들은 매우 많습니다. 이 글을 쓰면서 매우매우 참고한 subicura님의 글은 2017년도에 작성되었는데, 2021년도인 지금까지도 도커는 많은 사랑을 받고 있습니다.

정리하며✏️

이번 글에서는 도커에 대한 기본적인 개념을 정리했습니다. 간단한 역사를 알고, 왜 도커가 만들어졌고 어떤 부분에서 차별화를 가져서 사랑받았는지 정리가 되니, 바로 도커를 설치해서 잘 활용할 수 있을 것만 같은 느낌이 듭니다.

위에서 언급했듯이 실무에서 도커를 사용하는데 어려움이 없도록 도커 시리즈에서 다양한 방향의 개념들을 정리할 예정입니다~!!

profile
개발이 하고싶어요

0개의 댓글