※ 이 글은 개인적으로 공부한걸 바탕으로 작성된 글입니다.
잘못된 내용이나 보충해야할 내용이 있다면 댓글 혹은 mail로 피드백 해주시면 감사하겠습니다.※
한줄 요약 :
도커(Docker)는 리눅스 컨테이너 를 만들고 사용할 수 있도록 하는 컨테이너화 기술이다.
현재는 자체 라이브러리인 립컨테이너(libcontainer)를 사용하고 있다.
출처:https://zetawiki.com/wiki/Libcontainer
등장 배경 :
서버에 여러개의 서버를 생성하려면 여러개의 VM(Virtual Machine)을 뛰워야하는데 이때 VM을 생성하고 구동하는 Hypervisor를 사용하여 그림 1과 같이 여러대의 VM을 생성해서 사용했다.
그림 1
호스트 서버에 조금 더 효과적으로 많은 서비스를 올리기위해, 리소스 사용량을 조금 더 가볍게 만들 수 없을까?
해서 만들어진 것이 컨테이너 엔진이다.
도커 특징 :
하나의 같은 서버에서 각기 다른 환경의 컨테이너를 설정할 수 있다.
기존 자원(디스크, 네트워크 등)을 그대로 활용할 수 있어 여러 서비스들을 한 서버에 돌리기가 VM에 비해 수월하다.
다른 컨테이너의 환경을 재현할 수 있는 이미지가 있다.
도커는 원하는 개발 환경을 파일에 저장하면, 유저가 원하는 어떤 머신에든 해당 환경을 시뮬레이션 해준다.
또한 환경들은 각기 독립적으로 존재하기에 원하는 어떤 환경에서든 모듈식 관리가 가능하다.
- 파이썬 서버, 자바 서버, 데이터베이스 서버 등 독립적으로 존재하기에 새로운 서버를 구매할필요 없이 컨테이너를 이용하여 사용할 수 있음.
예를들어 Window환경에서 개발한 내용을 Server에 업로드를 해야할때, 코드가 서버에 올리니까 제대로 작동하지 않는
이슈가 발생했다.
그림2
내 컴퓨터 (개발환경)은 윈도우 운영체제를 사용하였고, 서버 컴퓨터는 리눅스이기때문에 발생한 이슈이다.
이같은 이슈를 도커가 해결해 줄 수 있다.
도커 파일(Docker File)
이미지를 만들 때 사용하는 파일
→ 도커 파일을 준비해서 build하게 되면 도커 이미지가 된다.
도커 이미지(Docker image)
컨테이너를 생성할 때 필요한 요소 (서버 프로그램, 소스코드, 라이브러리 등)를 묶은 계층구조 형태이다.
즉, 컨테이너 생성에 필요한 모든 파일과 설정 값을 지닌 것을 의미한다.
(의존성 파일을 컴파일하거나 다른 설치가 필요 없는 상태의 파일)
이해를 돕기위해 Ubuntu를 설치하기위한 Ubuntu.iso를 생각하면 된다. Ubuntu 이미지는 Ubuntu를 실행하기 위한
모든 필요 파일과 실행 명령어 등을 가지고 있다.
→ 도커 이미지를 도커 RUN 명령어를 사용하여 실행시키게 되면 도커 컨테이너가 된다.
이미지와 레이어(Layer)
레이어란 기존 이미지에 추가적인 파일이 필요할 때 다시 다운로드 받는 방법이 아닌 필요한 파일을 추가하는 개념이다.
이미지는 여러 개의 읽기전용(read only) 레이어로 구성되고, 파일이 추가되면 새로운 레이어가 생성된다.
도커는 여러개의 레이어를 묶어서 하나의 파일 시스템으로 사용할 수 있게 해주기에 이미지와 레이어는 같은 의미로도 사용된다.
도커 컨테이너(Docker container)
도커 이미지를 실행한 상태로, 호스트와 다른 컨테이너로부터 격리된 시스템 자원과 네트워크를 사용하는 프로세스를 동작시키는 기술이다.
이때 이미지는 읽기 전용으로 사용하여 변경사항은 컨테이너 계층에 저장된다.
→ 컨테이너에서 무엇을 하든 이미지는 영향을 받지 않는다.
가상머신 VM (Virual Machines) 와 컨테이너의 차이
출처: https://www.atlassian.com/microservices/cloud-computing/containers-vs-vms
가상머신은 Hypervisor를 통해 여러 운영체제(Guest OS)를 생성하고 관리함.
시스템 자원을 가상화하고 독립된 공간을 생성하는 작업은 HyperVisor를 거치므로 성능 손실이 크고 무거움.
가상 머신은 Guest OS를 사용하기 위한 라이브러리, 커널 등을 포함하므로 용량이 큼
컨테이너는 가상머신과 달리 하이퍼 바이저 위에 Guest OS를 실행하지 않고 Host OS의 커널을 사용하여
격리된 여러 개의 컨테이너를 실행한다.
가상머신과 달리 HyperVisor를 거치지 않고 독립된 공간을 생성할 수 있으며, Gusst OS와를 사용하지 않기에 용량도 적다.
즉 가상머신과 비교하여 더 가볍고 효율적이다.
'Learning > Docker' 카테고리의 다른 글
[Docker] 도커파일(Dockerfile) (0) | 2023.12.28 |
---|---|
[Docker]이미지, 컨테이너 만들기 : Dockerfile, build, commit (0) | 2023.12.26 |
[Docker] Install docker, 도커 설치 (0) | 2023.12.20 |