도커를 공부시작 계기
슬슬 배포 및 서버 자체에 프로그램을 실행시켜 연동시키기보다 컨테이너에 띄워 자동배포하기 쉬운 환경에 대한 공부도 해보고 싶었고 요즘 서비스에서 많이 도입하는 MSA 관련의 기초지식이기도 하며 도커를 모르는 사람도 도커 네트워크를 이용할 수 있는 웹 서비스 프로그램을 만드는 팀프로젝트에 참가하게 되어 공부 시작
가상화를 사용하는 이유
도커에 대한 설명 전에 가상화 기술이 왜 필요한지에 대한 이해가 필요하다.
일반적으로 OS를 실행하려면 각 OS를 전용 물리적 서버에서 실행해야 한다.
여러 OS를 동시에 실행해야 하는 경우에는 물리적인 서버가 필요하고 다음과 같은 단점이 발생한다.
1. 여러 운영체제를 실행하는 것은 여러 물리적 서버를 이용한다는 것이므로 서버 관리 비용이 많이 듬
2. 각각의 물리적 서버는 CPU 사용률이 낮은 서버들로 인한 리소스 낭비가 발생가능
이럴 때 가상화를 이용하면 다음과 같이 단점을 보완한다.
1. 운영체제를 기반 하드웨어로부터 분리해 하나의 물리적 서버에서 여러 운영체제를 동시에 실행(이러한 운영체제를 Guest OS)
2. 리소스 낭비를 하는부분을 여러 OS를 실행함으로서 CPU 리소스 사용률을 높일 수 있음
VM 머신과 컨테이너 가상화의 특징
VM 머신
하나의 서버를 여러 서버로 전환하는 물리적 하드웨어의 추상화
Host OS 위에 가상화를 위한 HiperViser 엔진 위에 Guest OS를 올려 사용
각 VM에는 수십 GB를 차지하는 운영체제, 애플리케이션, 필수 바이너리 및 라이브러리의 전체 사본을 포함
컨테이너
코드와 종속성을 함께 패키징하는 애플리케이션 계층의 추상화
여러 컨테이너가 동일한 OS에서 실행될 수 있으며 각각의 컨테이너에서 프로세스로 실행되는 다른 컨테이너와 OS 커널을 공유 가능
VM보다 적은 공간을 차지해(컨테이너의 이미지의 크기는 일반적으로 MB단위) 더 많은 애플리케이션을 처리 가능
도커란? 장점은?
컨테이너라고 하는 느슨하게 격리된 환경에서 애플리케이션을 패키징하고 실행할 수 있는 기능을 제공하는 가상화 플랫폼
1. 격리 및 보안을 통해 지정된 Host OS에서 여러 컨테이너를 동시에 실행할 수 있고, 커널을 공유해 I/O 처리가 빠르다.
2. 컨테이너는 가볍고 애플리케이션을 실행하는데 필요한 모든 것을 포함하므로 호스트에 현재 설치된 항목에 의존하지 않는다
3. 의존성이 적은 컨테이너는 휴대성과 효율성이 좋고, 컨테이너 플랫폼의 표준이 되어 높은 이식성을 가진다.
도커 아키텍처
도커는 클라이언트 - 서버 아키텍처를 사용한다.
도커 클라이언트는 도커 컨테이너를 빌드, 실행 및 배포 하는 무거운 작업을 수행하는 도커 데몬과 통신한다.
도커 클라이언트와 데몬은 동일한 시스템에서 실행되거나 도커 클라이언트를 원격 도커 데몬에 연결할 수 있다.
이때 도커 클라이언트와 데몬은 UNIX 소켓 또는 네트워크 인터페이스를 통해 REST API를 사용해 통신한다.
도커 데몬
Docker API 요청을 수신하고 이미지, 컨테이너, 네트워크 및 볼륨과 같은 Docker 객체를 관리한다.
도커 클라이언트
도커 데몬과 상호작용하는 기본 방법
도커 클라이언트는 둘 이상의 도커 데몬과 통신할 수 있다.
기본적으로 리눅스에서 도커를 사용하면 리눅스의 터미널이 도커 클라이언트의 역할을 하게된다.
도커 데스크톱
Mac, Windows, Linux 환경에 설치하기쉬운 애플리케이션으로 컨테이너화된 애플리케이션 및 마이크로서비스를 구축하고 공유
도커 데몬, 도커 클라이언트, 도커 컴포즈, 도커 Content Trust, k8s 및 Crdential Helper가 포함된다.
도커 레지스트리
도커 이미지를 저장하는 레지스트리
도커 허브는 오픈 레지스트리이며 기본적으로 도커는 도커 허브에서 이미지를 찾도록 구성되있고, 개인 레지스트리도 실행가능하다.
이미지
컨테이너 실행파일과 설정값 등을 지닌 도커 컨테이너의 생성 지침이 포함된 읽기 전용 템플릿
이미지는 위와 같이 레이어로 쌓아 만든다. 특정 프로그램을 위한 컨테이너를 만들때에도 기본적인 OS 이미지는 베이스로 깔리는 것이다. nginx는 OS 이미지 위에 쌓아서 만들고, 해당 이미지에 원하는 웹서버 HTML이나 웹 앱플리케이션 정보를 추가해서 web app 이미지를 만드는 것이다.
컨테이너
이미지의 실행가능한 인스턴스
Docker API 또는 도커 클라이언트를 사용해 컨테이너를 생성, 시작, 중지, 이동, 삭제한다.
컨테이너를 하나 이상의 네트워크에 연결하거나 스토리지를 연결하거나 현재 상태를 기반으로 새 이미지를 생성할 수 있다.
컨테이너는 생성하거나 시작할 때 제공하는 구성옵션과 이미지로 정의되고 제거되면 영구 저장소에 저장되지 않은 상태 변경사항이 모두 삭제된다.
도커 사용 이유 정리
가상화기술로 적은 물리적 서버로 CPU 리소스 사용률을 증가시킬 수 있고, 그 중 컨테이너 가상화는 낮은 의존성을 통한 휴대성과 효율성을 가진다. 도커는 컨테이너 플랫폼의 표준으로 높은 이식성까지 가져 사용한다.
참고
https://www.alibabacloud.com/ko/knowledge/what-is-virtualization
가상화란 무엇인가요 - Alibaba Cloud 기술 자료
클라우드 컴퓨팅에서 가상화는 운영 체제(OS) 내에 가상 머신을 생성하는 하드웨어 가상화를 의미합니다.
www.alibabacloud.com
https://www.docker.com/resources/what-container/
What is a Container? | Docker
A container is a unit of software that packages code and its dependencies so the application runs quickly and reliably across computing environments.
www.docker.com
https://docs.docker.com/get-started/overview/
Docker overview
docs.docker.com
https://khj93.tistory.com/entry/Docker-Docker-%EA%B0%9C%EB%85%90
[Docker] Docker의 개념 및 핵심 설명
Docker란 Go언어로 작성된 리눅스 컨테이너 기반으로하는 오픈소스 가상화 플랫폼이다.현재 Docker 0.9버전 부터는 직접 개발한 libcontainer 컨테이너를 사용하고 있다. 가상화를 사용하는 이유는?이제
khj93.tistory.com