자바 2차 프로젝트를 들어가기에 앞서 각자 Docker에 대해 공부해오기로했다.
도커에대해서 많이 들은 말을 정리해보면
- 가상화 기술로 컨테이너 가상화 방식이다.
- 도커 cli로 도커 이미지를 가상화한다.
- 무중단 배포를 할 줄 알아야한다.
이정도려나
과연 여기서 내 지식이 얼마나 늘까 정리해본다.
도커를 사용하는 이유
도커가 등장하기 전, 회사에서는 각각의 다른 운영체제위에 vmware를 사용하여 가상머신으로 linux라는 공통의 컴퓨터를 생성하고 운영체제를 설치하여 사용하였다.이 경우 가상의 OS의 버전부터 설치할 프로그램의 버전까지 모두 맞춰야한다.
하지만 컴퓨터안에 또다른 컴퓨터가 있다보니 실행되는 속도가 느리고 리소스를 많이 먹는 단점이있다.
그래서 부팅 같은 운영체제의 핵심 기능(커널)을 공유하는 가상머신으로 DOCKER 가 등장하였다.
(윈도우의경우 wsl2(window subsystem for linux)를 설치해야 커널을 공유할 수 있다.
커널?
- 기존의 컴퓨터와 가상의 컴퓨터사이에 공통되는기능
도커에는 node나 mysql을 설치할 수도 있는데 누군가 설치해놓은 것을 전달받아 바로 실행시키면 똑같은 환경으로 실행 할 수 있다.
필요한것이 설치되어있는 도커파일을 컴퓨터의 파일처럼 주고받을 수 있는점 또한 장점이다.
덕분에 새로운 사원이 와도 도커 파일을 사용해서 공통된 환경을 세팅할 수 있어 빠르게 작업에 참여할 수 있다.
도커의 장점
- 개발환경과 배포환경을 통일하기 쉽다.
- 도커는 오픈 플랫폼이다.
- 애플리케이션을 인프라에서 분리하여 인프라에서 애플리케이션을 관리하는것처럼 관리할 수 있다.
- 가볍고 신속하며, 코드 배포에 용의하다.
Docker란?
- 도커는
container 기반
의가상화
도구이다. - 쉽게말해 내컴퓨터 안에 또다른 가상의 컴퓨터를 만드는 도구이다.
- 애플리케이션을 container 단위로 격리하고 실행하여 배포하는 기술을 말한다.
Container?
- 가상화 기술의 하나로 호스트의 운영체제 위에 생성된 여러개의 격리된 환경을 말한다.
- 각각의 컨테이너 안에서 애플리케이션이 실행된다.
가상화(Virtualization)?
- 하드웨어의 리소스(프로세서, 메모리, 저장소 등)을 추상화 하는것을 말한다.
- ex) 메모리 가상화, 하드웨어 가상화(Hypervisor 기반), 컨테이너 가상화, 네트워크 가상화
가상머신?
- 하나의 물지거인 컴퓨터 자원(CPU, Memory, Storage) 를 가상으로 분할하여 가상의 컴퓨터 환경을 여러개로 만들어내는 기술이다.
- 이를 통해 물리적인 컴퓨터 자원을 더욱 효율적으로 사용할 수 있고, 서버나 애플리케이션을 운영하는데 유연성과 안정성을 향살 시킬 수있다.
가상머신 이미지 만들어서 넣자
Hypervisor?
- 가상머신을 생성하고 구동하는 소프트웨어
- OS에 자원을 할당하거나 조율하며, OS의 요청을 번역하여 하드웨어에 전달한다.
컨테이너 기반의 특징
- 리눅스 커널 기능을 사용해서 만든다.(linux 컨테이너 기술인 Linux Container 기반)
- 다양한 운영체제에서 사용할 수 있으며, 컨테이너화된 애플리케이션을 쉽게 빌드, 배포, 관리할 수 있는 다양한 기능을 제공한다.
chroot: 파일 시스템을 격리한다.
namespace: 프롤세스를 격리한다.
cgroup: 하드웨어 자원을 격리한다.
Docker Architecture
1. Client(도커 클라이언트)
- Docker 명렬어를 사용하여 Docker와 상호작용한다.
- 도커 cli 명령어를 사용하면 Docker daemon으로 보내고 실행된다.
2. Docker Daemon(=dockerd)
- 도커 엔진의 핵심구성요소로, 도커 호스트에서 컨테이너를 관리하고 실행하는 역할을 한다.
- 컨테이너를 생성, 시작, 중지, 삭제하는 작업을 수행한다.
- 또 컨테이너 이미지를 관리하고, 외부에서 이미지를 다운로드하고 빌드하는 작업을 수행한다.
3. Docker Architecture
1) 도커 오브젝트(docker object)
- **도커 이미지(docker image)** : 도커 컨테이너를 만들기 위한 전용 템플릿이다.
- **도커 컨테이너(docker container)**
- 하나의 도커 이미지의 실행 가능한 인스턴스.
- 애플리케이션을 실행하기위한 모든 파일과 설정 정보를 포함하는 패키지이다.
4. Docker Registries(도커 레지스트리)
- 도커이미지를 관리하고 저장하는 곳이다.
- Docker hub : default 레지스트리로 누구나 접근가능한 공개형 저장소이다.