도커는 특정 응용 프로그램과 의존성(dependency)를 하나로 패키징하여 독립된 공간인 컨테이너(Container)에서 동작할 수 있도록 하는 '컨테이너 기반 플랫폼'이다. 독립된 공간이라하면 가상 머신(Virtual Machine)을 떠올릴수도 있는데, 이는 개념이 조금 다르다.
가상 머신의 경우, 기존의 PC 자원을 나누어 마치 '하나의 독립된 또 다른 PC'처럼 사용할 수 있도록 한다. 즉, 원래의 컴퓨팅 자원을 n개의 부분으로 나누어 하나의 PC 안에 m개의 PC가 각각 독립적으로 작동하고 있는 형태로 활용된다고 생각하면 된다.
이때, 기존의 자원은 물리적으로 분할할 수 없기 때문에 하드웨어 내부에서 특정 로직을 통해 논리적으로 나누는 방법 밖에 없는데, 이렇게 내부에서 PC를 논리적으로 구성하는 과정 자체를 '가상화(Virtualization)'이라고 한다.
가상화된 PC를 사용하기 위해선 이를 관리해주는 소프트웨어가 필요한데, 이를 '하이퍼바이저(Hypervisor)'라고 한다. 하이퍼바이저도 크게 두 종류가 존재하는데(Type 1, Type 2), 지금은 가상화의 개념 정도만 파악하고 좀 더 자세한 설명은 추후에 작성하게 될 용어 정리에서 다루도록 하겠다. 지금은 가상 머신을 관리하는 소프트웨어가 VM의 바로 밑 계층에 존재한다고 생각하면 된다.
가상 머신은 실재하는 PC의 호스트 운영체제 위해 가상 머신의 관리를 위한 하이퍼바이저를 설치해야 하고, 하이퍼바이저 위에서 구동되는 각각의 가상 머신은 게스트 운영체제를 가져 서로 독립적인 공간에서의 작동이 가능하도록 논리적으로 분리되어 있다.
(공식 문서: https://docs.docker.com/)
Home
Docker Documentation is the official Docker library of resources, manuals, and guides to help you containerize applications.
docs.docker.com
컨테이너의 경우 컨테이너를 관리하기 위해 도커를 설치하는 것까지는 가상 머신의 활용 방법과 유사하나, 이 둘은 서로 차이점이 존재한다.
가상 머신의 경우 호스트 운영체제 위에서 작동함과 동시에 각각의 가상 머신이 게스트 운영체제를 가지기 때문에 컴퓨터 자원을 사용함에 있어 호스트 운영체제를 무조건 거쳐야지만 자원이 사용 가능하다. 이에 따라 가상 머신 자체가 다소 무겁고, 자원 소비량이 높다. 또한 운영체제의 부팅 과정이 사실상 두 번 존재하기 때문에 시간이 초기 상태 진입에 시간이 오래 걸린다는 단점이 있다.
컨테이너의 경우, 컨테이너 내부에는 기본적으로 호스트 운영체제가 존재하지 않으며, 컨테이너의 런타임을 관장하는 도커라는 소프트웨어가 호스트 운영체제의 커널을 공유하기 때문에 가볍고 효율적으로 자원을 활용한다. 앞서 언급한 바와 같이 독립적인 운영체제가 존재하지 않기 때문에 가상 머신보다 훨씬 더 가볍게 실행되며, 사용자가 설정한 이미지와 레이어를 통해 상당히 빠르게 실행된다는 장점이 있다. 그뿐만 아니라 이미지만 가지고 있으면 사용자의 운영체제 환경과는 관계없이 어디서든 배포가 가능하다.
흔히들 사용하는 일반적 용도의 PC에는 보통 호스트 운영체제(Host OS)가 존재하고, 도커를 설치하면 그 윗 계층에 도커 환경이 조성된다. 컨테이너로써 특정 애플리케이션을 구동하려면 먼저 도커 파일(DockerFile)을 작성하고, 도커를 통해 빌드(Build) 과정을 거치면 본인이 사용하고자 하는 이미지가 로컬 환경에 생성된다. 이후 CLI(Command Line Interface) 환경에서 해당 이미지를 실행하면 이미지 내의 애플리케이션과 라이브러리가 컨테이너 환경에서 작동하게 된다.
이때 컨테이너 환경을 조성하기 위해서는 반드시 이미지가 필요한데, 다음 그림은 컨테이너 빌드 명령어가 입력될 때 도커가 어떤 방식으로 이미지를 사용하는지에 대한 동작 플로우이다.
이후 설명되는 내용은 간단한 플로우 설명을 위한 명령어 예시이고, 실질적 활용은 다음 글에서부터 진행한다.
먼저 CLI(Command Line Interface)를 실행한다. 운영체제가 Window면 'Window Powershell이나 명령 프롬프트', Mac이라면 '터미널'을 활용하면 된다. (이 외에도 Docker Desktop 앱을 다운 받아 해당 애플리케이션에서 제공하는 터미널 환경을 활용해도 된다)
docker image build -t { 이미지 이름 }:{ 태그 } { 도커 파일 디렉토리 위치 }
쉘을 띄웠다면 'docker image build -t { 이미지 이름 }:{ 태그 } { 도커 파일 디렉토리 위치 }' 명령어를 통해 본인이 작성한 도커 파일을 기반으로 이미지를 로컬 환경에 빌드한다. 그럼 도커는 dockerd라는 백그라운드 프로세스를 통해 이미지를 빌드하고, 이를 로컬 환경에 저장한다.
docker run -it { 이미지 이름 }:{ 태그 }
이후 'docker run -it { 이미지 이름 }:{ 태그 }'를 통해 가상 터미널 환경을 활성화하고, 입력을 통해 컨테이너 환경과 소통하는 형태로 개발할 수 있다.
위의 그림을 보고 눈치 챘을수도 있지만, 도커는 본인이 만든 이미지 외에도 이미 만들어진 이미지를 외부로부터 불러와서 로컬 환경에서 사용할 수 있다. 이 과정을 '이미지 풀(Image Pull)'이라고 부르며, 불러온 이미지는 로컬 환경에 저장된다. 이때, 외부에서 이미지를 제공하는 레포지토리가 존재해야 마치 Github의 푸쉬, 풀 개념처럼 사용자가 로컬에서 만든 이미지를 원격 레포지토리에 업로드하거나, 필요한 이미지를 다운로드할 수 있는데, 이러한 기능을 제공해주는 곳이 바로 Docker Hub다.
https://www.docker.com/products/docker-hub/
The World’s Largest Container Registry | Docker
Docker Hub is a container registry built for developers and open source contributors to find, use, and share their container images and access verified content.
www.docker.com
이를 다루는 내용은 바로 다음 글에서 활용해볼 예정이다. 설치 과정의 경우 다음 글을 참고하여 진행하면 된다.
https://velog.io/@woody_/Docker-%EC%84%A4%EC%B9%98Window-11
Docker 설치(Window 11)
Docker는 리눅스를 기반으로 동작한다. 따라서 윈도우 환경에서 리눅스를 사용할 수 있도록 도와주는 WSL2를 활성화 해야한다.WSL(Windows Subsystem for Linux)는 VM과 같은 도구 없이 윈도우 환경에서 Linux
velog.io
'도커' 카테고리의 다른 글
도커 사용 예시 - Docker Desktop & Docker Hub (1) | 2024.12.29 |
---|