일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
- javaJVM
- 격파르타합격후기
- 노베이스부트캠프
- java 자료구조 활용
- java기본자료형
- 항해15기
- 비전공자sqld
- 컴파일
- java최솟값구하기
- java map
- 격파르타장점
- 작은수제거하기
- java참조자료형
- 격파르타후기
- 인터프린터언어
- java set 출력
- java set 저장
- java list 저장
- 프로그래머스
- 항해99후기
- java map 출력
- javaJRE
- 프로그래머스제일작은수
- java map 저장
- 코딩부트캠프후기
- java list 출력
- java알고리즘
- 격파르타비전공자
- java알고리즘문제풀이
- sqld자격증합격
- Today
- Total
코딩과 결혼합니다
[CS] Docker 본문
✏️Docker
Linux 컨테이너 기반의 오픈소스 가상화 플랫폼. Docker를 사용하면 컨테이너를 매우 가벼운 모듈식 가상 머신처럼 다룰 수 있다.
Docker는 애플리케이션과 그 환경을 하나의 패키지로 만들어 이를 빠르고 쉽게 배포하고 실행할 수 있도록 도와주는 도구이다.
실행방식
Docker 기술은 여러 프로세스와 애플리케이션을 서로 개별적으로 실행하여 인프라를 더 효과적으로 활용하고 개별 시스템을 사용할 때와 동일한 보안을 유지할 수 있다.
Docker를 포함한 컨테이너 툴은 이미지 기반 배포 모델을 제공한다. 따라서 여러 환경 전반에서 애플리케이션 또는 서비스를 모든 종속 항목과 손쉽게 공유할 수 있다. 또한 이 컨테이너 환경 내에서 애플리케이션 배포를 자동화한다.
- Dockerfile 작성
Dockerfile은 애플리케이션의 실행 환경을 정의한 스크립트 파일로, 여기에는 어떤 OS 이미지를 기반으로 할지, 필요한 라이브러리는 무엇인지, 어떤 명령을 실행할지 등이 명시된다. - 이미지 생성
Dockerfile을 이용하여 'docker build' 명령을 실행하면 도커 이미지가 생성된다. 이 이미지는 애플리케이션을 실행하는데 필요한 모든 파일과 설정을 담고 있다. - 컨테이너 실행
생성된 이미지를 'docker run' 명령으로 실행하면 도커 컨테이너가 생성되고 애플리케이션이 실행된다. 이 컨테이너는 완전히 독립된 환경을 제공하여 다른 컨테이너와 시스템으로부터 격리된다.
도커 구성요소
도커 클라이언트 : 도커를 설치하면 그것이 클라이언트이며 build, pull, run 등의 도커 명령어를 수행한다.
도커 호스트 : 도커가 띄워져 있는 서버를 의미한다. 도커 호스트에서 컨테이너와 이미지를 관리한다.
도커 데몬 : 도커 엔진
레지스트리 : 외부 이미지 저장소이다. 다른 사람들이 공유한 이미지를 내부(local) 도커 호스트에 pull 할 수 있다.
이렇게 가져온 이미지를 run 하면 컨테이너가 된다.
✏️리눅스 컨테이너와 도커의 차이점
Docker 기술은 처음에는 LXC(리눅스 컨테이너) 기술을 기반으로 개발되었지만 이후에는 이러한 종속 관계를 벗어났다.
Docker 기술은 컨테이너의 생성 및 구축, 이미지 전송, 이미지 버전 관리 등의 프로세를 유용하게 해주는 등 더욱 뛰어난 개발자 또는 사용자 환경을 제공하여 컨테이너를 구동하는 기능 이상의 것을 제공한다.
전통적인 Linux 컨테이너는 멀티플 프로세스를 관리할 수 있는 init 시스템을 사용한다. 즉, 전체 애플리케이션을 하나로 실행할 수 있다. 도커 기술은 애플리케이션을 개별 프로세스로 세분화하도록 권장하고 이를 위한 툴을 제공한다. 이러한 세분화된 접근 방식에는 장점이 있다.
- 모듈성
전체 애플케이션을 분해하지 않고도 업데이트 또는 복구를 위해 애플리케이션의 일부를 분해하는 기능에 중점을 준다. 이러한 마이크로서비스 기반 접근 방식 외에도 서비스 지향 아키텍처와 거의 같은 방식으로 멀티플 애플리케이션 간에 프로세를 공유할 수 있다. - 계층 및 이미지 버전 제어
각 도커 이미지 파일은 일련의 계층으로 구성되며 이러한 계층들은 단일 이미지로 결합된다. 계층은 이미지가 변경될 때 생성되고, 사용자가 실행 또는 복사와 같은 명령을 지정할 때마다 새 계층이 생성된다.
도커는 이러한 계층을 재사용하여 새 컨테이너를 구축하는데, 이때 구축 프로세스가 빨라진다. 계층화에는 버전 제어가 내재되어 있고 새로운 변경사항이 있을 때마다 변경 로그가 기본 제공되어 컨테이너 이미지를 완벽하게 제어할 수 있다. - 롤백
모든 이미지에는 계층이 있고 현재의 이미지 반복이 적절하지 않은 경우 이전 버전으로 롤백할 수 있다. 이 기능은 지속적 통합 및 배포를 수행하는 데 도움을 준다. - 신속한 배포
각 프로세스에 대한 컨테이너를 생성하면 해당 프로세스를 새 애플리케이션과 빠르게 공유할 수 있고 또한 컨테이너를 추가하거나 이동하기 위해 운영체제를 부팅할 필요가 없어 배포 시간이 상당히 단축된다.
배포 시간이 단축되면 컨테이너에서 생성한 데이터를 쉽고 비용 효율적으로 생성하고 제거할 수 있다.
✏️가상머신과 도커
가상머신
기존의 가상화 기술인 가상머신은 하이퍼바이저를 이용해 여러 개의 운영체제를 하나의 호스트에서 생성해서 사용하는 방식이었다.
이러한 여러 개의 운영체제는 가상 머신이라는 단위로 구별되고 각 가상머신에는 우분투, CentOS 등의 운영체제가 설치되어 사용된다. 그래서 하이퍼바이저에 의해 생성되고 관리되는 운영체제는 게스트 운영체제 라고 하며, 각 게스트 운영체제는 다른 게스트 운영체제와는 완전히 독립된 공간과 시스템 자원을 할당받아 사용한다.
단점
각종 시스템 자원을 가상화하고 독립된 공간을 생성하는 작업은 하이퍼바이저를 반드시 거치기 때문에 일반 호스트에 비해 성능의 손실이 발생한다. 그뿐만 아니라 가상 머신은 게스트 운영체제를 사용하기 위한 라이브러리, 커널 등을 전부 포함하기 때문에 가상 머신을 배포하기 위한 이미지로 만들었을 때 이미지의 크기 또한 커진다.
즉, 가상 머신은 완벽한 운영체제를 생성할 수 있다는 장점은 있지만 일반 호스트에 비해 성능 손실이 있으며, 수 기가바이트에 달하는 가상 머신 이미지를 애플리케이션으로 배포하기는 부담스럽다는 단점이 있다.
도커 컨테이너
가상화된 공간을 생성하기 위해 리눅스 자체 기능(chroot, 네임스페이스, cgroup)을 사용함으로써 프로세스 단위의 격리 환경을 만들기 때문에 성능 손실이 거의 없다. 컨테이너에 필요한 커널을 공유해서 사용하고, 컨테이너 안에는 애플리케이션을 구동하는 데 필요한 라이브러리 및 실행 파일만 존재하기 때문에 컨테이너를 이미지로 만들었을 때 이미지의 용량 또한 가상 머신에 비해 대폭 줄어든다. 따라서 컨테이너를 이미지로 만들어 배포하는 시간이 가상 머신에 비해 빠르며, 가상화된 공간을 사용할 때에 성능 손실도 거의 없다는 장점이 있다.
도커이미지와 도커컨테이너
'2세 > Computer Science' 카테고리의 다른 글
[CS] 모노레포(monorepo) (0) | 2023.11.13 |
---|---|
[CS] 서버리스(Serverless) (0) | 2023.11.09 |
[CS] Caching (0) | 2023.11.03 |
[CS] MSA : MicroService Architecture (0) | 2023.11.02 |
[CS] 자료구조 : Java와 HashMap (1) | 2023.11.01 |