티스토리 뷰
1. Docker 란 무엇인가?
도커는 하나의 OS 위에서 여러 어플리케이션의 격리 구동을 위한 가상화 도구이다.
기존의 가상화 기술인 VM과 비교하여 알아보자.
1) VM(Virtual Machine)
가상머신(VM)은 OS 레벨에서 어플리케이션을 격리 구동 하는 기술이다.
Host OS 위에 Guest OS 구동을 위한 Hypervisor 가 있고, 그 위에서 각각의 Guest OS와 어플리케이션이 동작한다.
각 어플리케이션마다 OS를 가지고 있기 때문에 매우 무겁고 느리다는 단점이 있다.
2) Docker
반면, 도커는 Host OS의 커널을 공유하며 격리된 환경을 생성한다.
하나의 도커 엔진에 여러 개의 컨테이너를 실행하기 때문에 서로 독립적이면서도 가볍고 빠르게 동작한다.
2. Docker를 사용하는 이유
1) 일관성 보장
도커는 어플리케이션과 그에 필요한 모든 종속성을 하나로 묶어(묶은 패키지는 ’도커 이미지’ 라고 한다.) 동일한 실행 환경을 보장한다. 따라서 개발, 테스트, 배포, 로컬 PC, 서버 인스턴스 등 언제 어디서든 일관성을 유지할 수 있다.
즉, "내 컴퓨터에선 왜 안되지...?"라는 문제를 해결해준다.
2) 독립된 환경, 다중 컨테이너 지원
하나의 인스턴스 내에서도 다중 컨테이너를 통해 각각의 독립된 어플리케이션을 구동 시킬 수 있다.
따라서 서로에게 영향을 끼치지 않으며, 완전히 다른 환경의 어플리케이션 구동도 가능하다.
예를 들어 하나의 서버 인스턴스 안에 Spring boot와 MySQL을 각각 따로 동작시킬 수 있다.
3. Docker 작동 방식
도커는 Dockerfile 을 이용하여 Docker Image를 생성하고, Docker Container 로서 실행한다.
1) Dockerfile
Dockerfile은 Instruction의 집합으로, 어떤 Bins/Libs와 어떤 애플리케이션을 구동할지를 정의해놓는 파일이다.
Dockerfile을 통해 정의한 내용들을 이용하여 도커 이미지를 생성한다.
2) Docker Image
Dockerfile 통해 구성된 것을 Docker Image라고 하며, 이후에 Docker Container로서 구동된다.
3) Docker Container
Docker Container는 Docker Image가 구동 중인 상태를 말한다.
이미지와 컨테이너의 관계는 프로그램과 프로세스의 관계로 받아들이면 이해가 조금 더 쉬울 것 같다.
프로그램이 실행되어 메모리와 CPU를 할당 받을 때 프로세스라고 하는 것처럼, 컨테이너도 마찬가지로 도커 이미지가 실행되어 메모리와 CPU를 할당 받을 경우를 컨테이너라고 한다.
일반적인 도커 사용 절차는 다음과 같다.
개발 → 테스트 → 빌드 → 도커 이미지 빌드 → 도커 Registry(도커 이미지 저장소)에 push → 서버 인스턴스에서 이미지 pull → Run
4. 단일/다중 컨테이너 - Dockerfile/Docker compose
한 인스턴스에 하나의 컨테이너만 올릴 수도 있지만, 다양한 컨테이너를 조합하여 애플리케이션을 구동 시킬 수도 있다.
만약 단일 컨테이너라면 Dockerfile 을 통해 단일 이미지를 구성하고 구동한다.
이와 비슷하게, 다중 컨테이너라면 Docker-Compose를 통해 다수의 이미지를 구성하고 구동한다.
Docker-Compose 또한 Dockerfile 과 마찬가지로 선언형 툴로서 애플리케이션이 어떻게 연결 되어야 하는지 상태만을 서술해 놓은 파일이다.
*참고로 여러 인스턴스에 여러 컨테이너를 놓을 수도 있는데, 이 때 쿠버네티스를 통해 관리할 수 있다.
+다음에는 Git Action과 Docker을 이용한 CI/CD 구축을 통해 도커의 동작 과정에 대해 좀 더 상세히 알아볼 예정이다.
'Web' 카테고리의 다른 글
[Web] 웹브라우저, 웹서버 저장소 3. 웹 스토리지 - Local Storage, Session Storage (1) | 2024.05.01 |
---|---|
[Web] 웹브라우저, 웹서버 저장소 2. 세션(Session) (0) | 2024.05.01 |
[Web] 웹브라우저, 웹서버 저장소 1. 쿠키(Cookie) (0) | 2024.04.30 |
[Web] DNS란? | DNS 동작 과정 (0) | 2024.04.23 |