도커의 사용이유와 작동 흐름에 대해서 간단히 살펴보겠습니다.
명령어와 실제 사용하는 방법들은 다음 글부터 등장할 예정이니 해당 부분이 필요 없으신 분들은 넘어가주셔도 되겠습니다.
🧐 도커는 무엇일까요?
도커는 컨테이너를 생성하고 관리하기 위한 도구입니다.
소프트웨어 개발에서 컨테이너란 소프트웨어 유닛을 의미합니다.
쉽게 말해 코드들의 패키지와, 해당 코드를 실행하는데 필요한 의존성과 도구를 의미합니다.
즉 동일한 컨테이너를 사용한다면, 동일한 환경에서 정확히 동일한 애플리케이션을 실행할 수 있습니다.
도커는 이러한 컨테이너를 구축하고, 관리하기 위한 도구일 뿐입니다.
🧐 왜 도커인가?
가상화 기술이 나오기 전에는 하나의 서버는 하나의 용도로만 사용되었습니다.
하나의 서버에는 하나의 운영체제만 있었고, 하나의 프로그램만을 운영하였습니다.
이는 안정적이나, 비효율적입니다.
그러던 중 하이퍼 바이저 기반의 가상화 방식이 출현하였습니다.
하이퍼 바이저를 통해 논리적으로 공간을 분할하여 독립적인 가상 환경(VM)의 서버 이용이 가능해졌습니다.
하이퍼 바이저
가상 머신(Virtual Machine)을 생성하고 실행하는 프로세스입니다.
하이퍼바이저는 메모리 및 처리와 같은 단일 호스트 컴퓨터의 리소스를 가상으로 공유하여 호스트 컴퓨터가 여러 게스트 가상 머신을 지원할 수 있도록 합니다.
가상 머신(VM)과 도커 컨테이너는 기본 하드웨어와 격리된 환경에서 애플리케이션을 배치하는 방법입니다.
그러나 격리시키는 환경의 수준에서 차이가 발생합니다.
VM에서는 애플리케이션을 실행하기 위하여 VM에 자원을 할당하고, 게스트 OS를 부팅해야 합니다.
이는 매우 복잡하며, 무겁습니다.
그러나 컨테이너 방식에서는 호스트 OS 위에서 게스트 OS 없이 애플리케이션의 실행 패키지(= 이미지)를 배포하면 실행이 가능합니다.
즉 기존의 VM보다 훨씬 가벼운 방법입니다.
도커의 컨테이너 각각은 서로 격리되어있지만, 같은 호스트 OS의 다른 컨테이너들과 동일한 커널을 공유합니다.
컨테이너의 격리
컨테이너의 격리가 가능한 이유는 cgroup과 namespace 덕분입니다.
그러나 저는 이들을 잘 모르기에... 이후 공부한 뒤 다시 와서 정리하겠습니다.
🧐 도커
컨테이너를 사용하여 프로그램을 더 쉽게 만들고 배포하고 실행할 수 있도록 설계된 도구입니다.
🧐 컨테이너
애플리케이션이 한 컴퓨팅 환경에서 다른 컴퓨팅 환경으로 빠르고 안정적으로 실행될 수 있도록 코드와 모든 종속성을 패키징하는 소프트웨어의 표준 단위입니다.
🧐 도커 이미지
코드, 런타임 시스템 도구, 명령어, 시스템 라이브러리 및 설정과 같이 애플리케이션을 실행하는 데 필요한 모든 것을 포함하는 가벼운 독립 실행형 실행 소프트웨어 패키지입니다.
도커 컨테이너의 경우 도커 컨테이너 이미지가 Docker Engine에서 실행될 때 도커 컨테이너가 됩니다
도커 이미지는 다음을 포함합니다.
- 시작시에 실행 될 명령어 (프로그램을 실행할 명령어)
- 파일 스냅샷 (실행될 프로그램 파일)
도커 이미지를 통해 컨테이너가 생성될 때, 도커 이미지가 가진 파일 스냅샷이 도커 컨테이너 내부의 하드디스크에 저장됩니다.
🧐 도커의 작동 방식
항상 도커를 사용할 때에는 먼저 도커 CLI에 명령어를 입력하여야 합니다.
그러면 도커 서버가 해당 명령어에 따라 작업을 실행합니다.
1. 도커를 실행시켜주세요
위 사진처렁 도커가 실행중이어야 합니다.
2. terminal을 열어주세요
다음을 입력해주세요
docker run hello-world
위 과정에서의 실행 흐름은 다음과 같습니다.
- 컴퓨터의 도커 클라이언트에게 docker run hello-world라는 명령어가 전달됩니다.
- 도커 클라이언트는 컴퓨터에 있는 도커 서버에 해당 명령어를 전달합니다.
- 도커 서버는 컴퓨터 내부 도커 이미지 Cache 저장소에서 hello-world라는 이미지가 있는지 찾습니다.
- 없는 경우 도커 허브(docker-hub)에 해당 이미지를 찾아서 가져옵니다. 또한 Cache 저장소에 저장합니다.
- 이후 실행 시에는 해당 이미지가 Cache 저장소에 있으므로 다운받지 않고 바로 실행됩니다.
🧐 도커 이미지가 컨테이너가 되는 과정
1. Docker 클라이언트에 명령어('docker run 이미지')를 입력합니다.
2. 이미지는 프로그램 실행시 필요한 명령어와, 실행될 프로그램 파일에 대한 스냅샷을 가지고 있습니다.
3. 파일 스냅샷을 컨테이너 내부의 하드 디스크에 제공합니다.
4. 프로그램 실행시 필요한 명령어를 컨테이너에 제공합니다.
5. 컨테이너는 실행될 때, 전달받은 명령어를 통해 파일을 실행시킵니다.
'Docker' 카테고리의 다른 글
[Docker] - (3) 도커를 사용하여 간단한 SpringBoot 어플 실행하기 (8) | 2022.06.29 |
---|---|
[Docker] - (2) 도커 이미지 만들기 (0) | 2022.06.23 |
[Docker] - (1) 도커 명령어 (0) | 2022.06.22 |