-
[DevOps] 도커란? - 도커 개념 정리DevOps 2024. 8. 19. 20:07
도커?
- 도커(Docker)는 리눅스 컨테이너에 리눅스 애플리케이션을 프로세스 격리 기술을 사용하여 더 쉽게 컨테이너로 실행하고 관리할 수 있게 해주는 오픈소스 프로젝트이다.
- 도커는 일반적으로 도커 엔진(Docker Engine) 혹은 도커에 관련된 모든 프로젝트를 말한다.
도커 엔진?
- 도터 엔진(Docker Engine)은 컨테이너를 생성하고 관리하는 주체로서 이 자체로도 컨테이너를 제어할 수 있고 다양한 기능을 제공하는 도커의 프로젝트이다.
- 도커의 생태계에 있는 여러 프로젝트들은 도커 엔진을 좀 더 효율적으로 사용하기 위한 것에 불과하기 때문에 도커의 핵심은 도커 엔진이라고 할 수 있다.
도커 컴포즈?
- 도커 컴포즈(Docker Compose)는 여러 개의 도커 컨테이너를 정의하고 실행하기 위한 도구로, 하나의 설정 파일로 여러 개의 컨테이너를 관리하고, 컨테이너 간의 네트워크 및 종속성을 설정하는 데 사용된다.
- 주로 복잡한 응용 프로그램이 여러 컴포넌트로 구성되어 있을 때 사용한다.
Virtual Machine(가상 머신) VS Docker Container(도커 컨테이너)
가상머신
- 가상머신은 호스트 운영체제 위에 가상화된 하드웨어 계층을 생성하고, 각 가상 머신은 독립된 운영체제, 커널, 드라이버 등을 가진다.
- 이로 인해 무겁고 높은 자원 소비가 필요하다.
- 운영체제의 부팅 과정이 필요하므로 시간이 오래 걸린다.
- 독립된 운영체제를 가지므로 메모리, 디스크 공간 등 자원을 많이 소비한다.
Docker 컨테이너
- Docker 컨테이너는 호스트 운영체제의 커널을 공유하며, 가볍게 격리된 환경을 생성한다.
- 가상 머신보다 더 가벼우며 효율적으로 실행한다.
- 이미지와 컨테이너 레이어를 사용하여 빠르게 생성되며, 실행 속도가 매우 빠르다.
- 컨테이너 호스트 운영체제의 커널을 공유하므로 가볍고 효율적으로 자원을 활용할 수 있다.
즉, 가상머신은 무겁고 느리지만, 도커 컨테이너는 가볍고 빠르게 실행되며 호스트 운영체제의 커널을 공유하는 방식으로 동작한다는 것이다. 또한 컨테이너 기술은 애플리케이션 배포와 관리를 더 효율적으로 처리할 수 있는 방법을 제공한다.
도커 구성요소
- Docker Client -> 도커를 설치하면 그것이 Client며 build, pull, run 등의 도커 명령어를 수행한다.
- Docker_HOST -> 도커가 띄워져 있는 서버를 의미한다. DOCKER_HOST에서 컨테이너와 이미지를 관리하게 된다.
- Docker daemon-> 도커 엔진입니다.
- Registry -> 외부(remote) 이미지 저장소이다. 다른 사람들이 공유한 이미지를 내부(local) 도커 호스트에 pull 할 수 있다. 이렇게 가져온 이미지를 run 하면 컨테이너가 된다.
Public 저장소 : Docker Hub, Quay
Private 저장소 : AWS ECR 혹은 Docker Registry를 직접 띄워서 비공개로 사용하는 방법 등이 존재한다.
도커 이미지와 도커 컨테이너
- 도커 엔진에서 사용하는 기본 단위는 이미지와 컨테이너이며 도커 엔젠의 핵심이다.
- 도커 이미지와 컨테이너의 관계는 운영체제에서의 프로그램 <-> 프로세스, 객체지향 프로그래밍에서의 클래스 <-> 인스턴스의 관계와 비슷하다고 생각하면 이해가 더 편합니다.
Docker File -> Docker Image
- Docker File은 도커 이미지를 만들 때 사용하는 파일.
- docker build 명령어를 실행시티면 도커 이미지를 만들 수 있다.
Docker Image -> Docker Container
- Docker Image를 docker run 명령어를 실행시키면 Docker Container를 만들 수 있다.
도커 이미지
- 도커 이미지(Docker Image)는 컨테이너를 생성할 때 필요한 요소이며, 가상 머신을 생성할 때 사용하는 iso 파일과 비슷한 개념입니다.
- 이미지는 컨테이너를 생성하고 실행할 때 읽기 전용으로 사용되며 여러 계층으로 된 바이너리 파일로 존재합니다.
도커에서 사용하는 이미지의 기본적인 형태
[저장소 이름]/[이미지 이름]:[태그]
- 저장소 이름 : 이미지가 저장된 장소, 저장소 이름이 명시되지 않은 이미지는 도커 허브의 공식 이미지를 뜻함.
- 이미지 이름 : 해당 이미지가 어떤 역할을 하는지 나타내며 필수로 설정해야 함. ex) ubuntu:latest -> 우분투 컨테이너를 생성하기 위한 이미지라는 것을 나타냄.
- 태그 : 이미지의 버전을 나타냄. 태그를 생략하면 도커 엔진은 latest로 인식함.
도커 컨테이너
- 도커 컨테이너(Docker Container)는 도커 이미지로 생성할 수 있으며, 컨테이너를 생성하면 해당 이미지의 목적에 맞는 파일이 들어 있는, 호스트와 다른 컨테이너로부터 격리된 시스템 자원 및 네트워크를 사용할 수 있는 독립된 공간(프로세스)이 생성된다.
- 대부분 도커 컨테이너는 생성될 때 사용된 도커 이미지의 종류에 따라 알맞은 설정과 파일을 가지고 있기 때문에 도커 이미지의 목적에 맞도록 사용되는 것이 일반적이다.
- ex) 웹 서버 도커 이미지로부터 여러 개의 도커 컨테이너를 생성하면 생성된 컨테이너의 개수만큼 웹 서버가 생성되고, 이 컨테이너들은 외부에 웹 서비스를 제공하는 데에 사용된다.
- 컨테이너는 이미지를 읽기 전용으로 사용하되 이미지에서 변경된 사항만 컨테이너 계층에 저장하므로 컨테이너에서 무엇을 하든지 원래 이미지는 영향을 받지 않는다.
- 또한 생성된 각 컨테이너는 각기 독립된 파일시스템을 제공받으며 호스트와 분리돼 있으므로 특정 컨테이너에서 어떤 애플리케이션을 설치하거나 삭제해도 다른 컨테이너와 호스트는 변화가 없습니다.
- ex) 같은 도커 이미지로 A, B 두 개의 컨테이너를 생성한 뒤에 A 컨테이너를 수정해도 B 컨테이너에는 영향을 주지 않는다.
Summary
- 도커 : 리눅스 컨테이너에 리눅스 애플리케이션을 프로세스 격리 기술을 사용하여 더 쉽게 컨테이너로 실행하고 관리할 수 있게 해주는 오픈소스 프로젝트이다.
- 도커 엔진 : 컨테이너를 생성하고 관리하는 주체로서 이 자체로도 컨테이너를 제어할 수 있고 다양한 기능을 제공하는 도커의 프로젝트이다.
- 도커 이미지 : 컨테이너를 생성할 때 필요한 요소이며, 가상 머신을 생성할 때 사용하는 iso 파일과 비슷한 개념이다.
- 도커 컨테이너 : 도커 이미지로 생성할 수 있으며, 컨테이너를 생성하면 해당 이미지의 목적에 맞는 파일이 들어 있는, 호스트와 다른 컨테이너로부터 격리된 시스템 자원 및 네트워크를 사용할 수 있는 독립된 공간(프로세스)이 생성된다.
'DevOps' 카테고리의 다른 글
[DevOps] CI/CD란 무엇인가? (0) 2024.06.18