Docker (1) :: 도커란 무엇인가

Eon Kim·2021년 10월 17일
4

Docker

목록 보기
1/5

안녕하세요, 주니어 개발자 Eon입니다.

Docker 시리즈 포스팅을 시작하겠습니다.

Docker 시리즈를 포스팅하겠다고 생각했을 때, 고민을 했습니다.
'어디서부터 다뤄야 할까?'
고민 끝에 Docker의 첫 부분부터 다뤄야겠다고 고민을 마쳤습니다.
뛰어난 설명과 자료들로 유튜브에 많은 강의와 소개 영상들이 있지만, 제 나름대로 따로 정리해 보겠습니다.

Docker란 무엇인가

Docker는 VM (Virtual Machine)이라고 생각하시면 될 것 같습니다.
정확히는 가상의 환경도 아닌, 완전히 독립된 것도 아닙니다.
하지만, 호스트의 OS가 무엇이든, Docker는 원하는 OS로 VM을 생성할 수 있습니다.
마치 Windows 환경에 Virtual Box나 VMWare 같은 VM을 설치해서 Ubuntu를 비롯한 Linux 계열 OS를 사용할 수 있는 것처럼 말입니다.
또, Docker는 독립된 공간을 제공합니다.
Docker는 Container를 사용해서 그 공간을 분리합니다.
(위의 Docker 로고에서도 확인하실 수 있습니다. Docker는 저런 Container를 관리 및 사용할 수 있게 해줍니다.)
그리고 우리는 그 Container에 들어가서 마음대로 환경을 구성할 수 있습니다.
이러한 편리성, 확장성과 많은 유틸리티 덕에 개발 환경에도 많이 사용됩니다.

Container란 무엇인가

Container는 Docker를 사용하기 위해 구성되는 VM이라고 생각하시면 됩니다.
위에 소개한 'Docker가 VM이다'에서 실질적인 VM이 되는 녀석이고 단위입니다.
Docker는 Container를 생성해서, 그 Container를 동작시킵니다.
우리는 Container에 OS를 구성하고, Application을 설치하고, 서비스를 구동하고 제공합니다.
Container마다 컴퓨터 1대라고 생각하시면 됩니다.
그러면 이제 여기서 헷갈리기 시작합니다.
Docker도 VM, Container도 VM, 게다가 Container는 컴퓨터라고?
여기서 한 번 더 정제를 하자면, Docker는 Virtual Box나 VMWare같은 Application이라고 이해하시면 됩니다.
즉, Container (실제 VM)을 운용하게 해주는 도구입니다.

Container는 독립된 객체이고, 각 Container는 서로에게 영향을 주지 않습니다.
개발 환경을 구성할 때, Ubuntu 기반의 Container와 CentOS 기반의 Container, Debian이나 Fedora, Alpine 을 사용할 수도 있습니다.
그리고 그 모든 Container를 하나의 컴퓨터에서 실행할 수도 있습니다.

Container의 구조는 어떻게 되어 있나


Docker Container는 위와 같은 구조를 띕니다.
호스트 OS가 Linux (Ubuntu 18.04 LTS)인 경우, 해당 컴퓨터의 Kernel을 공유하여 그 위에 Container들이 실행됩니다.
여기서 중요한 것은 Kernel을 공유한다는 점입니다.
일반적으로 VM은 모두 Kernel을 생성해서 사용합니다.
Kernel을 생성해서 사용하기 때문에 VM 자체의 사이즈가 커질 수 밖에 없습니다.

위의 Container 구조를 보시면, Container마다 다른 OS와 다른 Application들이 설치되어 있는 것을 볼 수 있습니다.
이 모든 걸 호스트의 Kernel 위에서 수행합니다.
때문에 Docker container는 VM과는 다르게 사이즈가 상대적으로 작습니다.

Container는 완벽히 독립된 공간인가

Container는 완벽히 독립된 공간인가...에 대한 대답은 X입니다.
Container는 Host의 OS와 다른 OS를 사용할 수 있습니다.
그렇기 때문에 독립된 공간이고 완전히 다른 환경을 구성할 수 있습니다.
하지만 Kernel을 공유합니다.
Kernel을 공유함으로써 Host가 영향을 받을 수도 있고, Container에 영향을 줄 수도 있습니다.
이를 제외하면 독립되었다고 볼 수 있습니다.

Docker는 어떤 때에 사용되는가

Docker는 편의를 위해 사용되는 게 대부분입니다.
퍼포먼스 자체는 Host에서 직접 실행하는 것보다는 떨어지지만, 그 정도가 큰 차이는 없는 것으로 알려져 있습니다.
퍼포먼스가 떨어지는데 왜 사용하는가?
배포가 굉장히 쉽습니다. 그리고 대규모 서비스를 구성하기에도 좋습니다.
뒤에서 다룰 내용이지만 Docker는 Image를 사용해서 Container를 생성합니다.
그리고 그 Image에는 필수적으로 OS가 들어갑니다.
그리고 Image만 있으면 Container를 계속해서 만들어내고 구동할 수 있습니다.
그럼 개발을 Docker Container 환경에서 하고, 그 Container를 Image로 만들면 똑같은 Container를 복제할 수 있는 것입니다.
이미 서비스 규모가 큰 회사들은 Docker를 많이 사용하며, Kubernetes라는 컨테이너 관리 시스템을 사용합니다.

Docker는 개발용으로도 많이 사용합니다.
Host 컴퓨터에 개발 환경을 구성하다 보면 App끼리 충돌이 일어나거나 업데이트로 인한 호환성 문제가 발생하기도 합니다.
그럴 때, 잘 동작하던 Application도 에러를 일으키기도 합니다.
이런 환경 변화에 유동적이고 빠른 대처를 하기 위한 방법으로 Docker를 사용하기도 합니다.
업데이트된 환경을 Docker Container에 구성하여 테스트해 보기도 하고, 무언가 업데이트를 진행하기 이전에 Container를 Image로 생성하여 백업을 해둘 수도 있습니다.
여러모로 편리하지 않을 수 없습니다.


이번 포스트에선 Docker에 대한 기본이 될 수 있는 것들을 다뤘습니다.
다음 포스트에선 Docker 설치(installation docs. link 제공)와 Docker Container 사용에 대해 다루겠습니다.
감사합니다.👍

profile
주니어 개발자

0개의 댓글