도커는 컨테이너 기술을 기반으로 한 일종의 가상화 플랫폼이다.
가상화란 물리적인 하드웨어를 효율적으로 사용하기 위해서 하드웨어 공간 위에 가상의 머신을 만드는 기술이다.
컨테이너란 컨테이너가 실행되고 있는 Host OS 의 기능을 그래도 사용하면서 프로세스를 격리해 독립된 환경을 만드는 기술이다.
정리하면, 도커는 독립된 환경을 만들어서 하드웨어를 효율적으로 활용하는 기술이다.
🧐 먼저 가상화와 컨테이너에 대해서 좀 더 자세히 알아보자
가상화는 하나의 하드웨어를 여러개의 가상머신으로 분할해 효율적으로 사용할 수 있는 기술이다.
분리된 가상 머신들은 각각 독립적인 환경으로 구동된다.
이때 베이스가 되는 기존의 환경은 Host OS
, 가상 머신으로 분할된 각각의 환경은 Guest OS
라고 부른다.
환경이 완벽히 분리된다. 하이퍼바이저를 활용하면 마치 하드웨어가 여러 개인 것 처럼 하나의 서버를 여러 명이 나눠 쓸 수도 있고, 컴퓨터 한 대에서 서로다른 OS를 동시에 활용할 수 있다.
하지만 가상 머신으로 무언가를 하려면 반드시 하이퍼바이저를 거쳐야 하기 때문에 속도 저하가 발생한다. 또 가상 머신은 해당 환경을 구동하는데 필요한 파일을 모두 포함하고 있기 때문에, 가상 머신을 배포할 때 만들어지는 이미지의 크기가 매우 커진다는 한계점이 있다.
하이퍼바이저와 달리 컨테이너는 가상의 OS를 만드는 것이 아니라 Host OS의 환경을 공유하면서 필요한 프로세스만 격리하는 방식으로, 커널을 공유하기 때문에 Host OS의 기능을 모두 사용할 수 있다.
이미지는 가상 머신이나 컨테이너 또는 프로그램을 실행하는데 필요한 파일과 라이브러리, 설정 등을 가지고 있는 파일이다. 이미지는 레이어라는 계층 구조로 이루어져 있는데, 변경 사항이 생기면 새로운 레이어를 추가해서 기록한다. 이미지 전체를 새로 받지 않고 해당 레이어만 받는 것으로 이미지를 업데이트 할 수 있다는 장점이있다.
즉 이미지를 실행시키면 프로세스. 즉 컨테이너가 된다.
도커는 컨테이너 기반 가상화 플랫폼이다. 컨테이너를 잘 다룰 수 있게 도와주는 도구이다. 도커를 이용하면 이미지를 실행시켜 컨테이너로 만들거나, 생성된 컨테이너를 관리하거나, 컨테이너를 다시 이미지로 만드는 작업을 쉽게 할 수 있다.
이제 도커가 어떤 구조를 갖고 있는지 알아보자.
그림을 살펴보면 내 OS 위에 Docker Engine이 실행되는데 이 Docker Engine 이 컨테이너를 관리한다.
이 말은 우리가 일반적으로 생각하는 프로세스 처럼 운영체제 위에서 동작한다고 말할 수 있다. 더 구체적으로 말하면 Docker Engin은 백그라운드에서 실행되는 데몬 프로세스라고 이해하면 되겠다.
이 Docker Engin은 컨테이너의 생성/수정/삭제를 담당한다. 즉 컨테이너를 관리하는 상위 관리자 프로세스라고 볼 수 있다.
다음으론 Docker Engine 에 대해서 알아보자
docker run
: 컨테이너 실행.docker ps
: 실행 중인 컨테이너 목록 확인.docker build
: 이미지 생성.docker pull
: 이미지 다운로드. docker run
, docker build
등).이미지 관리
컨테이너 관리
네트워크 관리
bridge
: 기본 네트워크 모드.host
: 호스트와 네트워크 공유.none
: 네트워크 격리.데이터 볼륨 관리
자 이제 도커를 실행 시키는 Docker Engine에 대해서 알아보았다 그러면 이 Docker Engine 이 내 운영체제에서 어떻게 작동하는지 이해해보자. mac os를 사용중이다.
도커는 기본적으로 리눅스 운영체제에서만 동작한다. 리눅스 운영체제가 동작하는 것을 전제로 한다.
왜냐면 도커는 서버에 사용되는 경우가 많기 때문에 대부분 서버 환경을 전제로 구성하도록 되어있다.
즉, 도커는 리눅스 컴퓨터에서 독립적인 환경을 만드는 것이며, 리눅스에서만 동작하고 컨테이너에서 동작할 프로그램도 리눅스용 프로그램이다.
이전에 가상화와 컨테이너에 대해서 학습 했던 ==가상화 기술==을 도입한다. Host OS 와 Guest OS 로 분리해 2개의 OS를 하나의 하드웨어에서 분리하여 사용할 수 있다.
이때 내 mac OS
는 Host OS가 되는 것이고, 도커 데몬 프로세스를 실행시킬 OS는 Guest OS 로 Linux OS
가 되는 것이다.
처음에 왜 도커를 '도커는 컨테이너 기술을 기반으로 한 일종의 가상화 플랫폼이다.' 라고 정의한 이유가 다른 환경에서도 Linux 환경의 어플리케이션을 실행시킬 수 있게 도와주는 기술이기 때문이다.
도커를 사용하려면 어떤 형태로든 리눅스 운영체제를 갖춰야 한다는 것을 기억하자!