컨테이너는 거의 대부분의 모든 환경 내부에서 어플리케이션을 구동 할 수 있게 해 주며,
빠른 배포와 재현 빌드를 제공합니다.
컨테이너는 네이티브가 아닌 OS 에서도 어플리케이션들을 구동할 수 있게 해 주는데,
예시로 윈도우나 맥 운영체제에서 리눅스 어플리케이션을 구동하는 것 입니다.
What are containers? - 컨테이너가 뭘까?
만약 구동중인 어플리케이션의 프로세스들을 사용할 수 있게 해 주며,
그들의 의존성들이 격리되어있다면,
우리는 이를 container technology(컨테이너 기술) 이라고 부릅니다.
컨테이너 기술은 이미 제품화 된 어플리케이션들의 빌드를 단순화하며,
모든 의존성들로 싸여진 소프트웨어의 일부를 생성 할 수 있는,
높은 차원의 도구를 제공합니다.
안 그래도 복잡한 소프트웨어를 처음부터 생성하는 것이 아니라,
이미 프로덕션 레벨에 있는 제품(리눅스같은) 에 의존성을 마구 추가하여
내가 원하는 소프트웨어의 일부를 생성할 수 있다는 것이다.
컨테이너에 있어 가장 중요한 기능은 격리 입니다.
다양한 의존성, 라이브러리, 그리고 어플리케이션의 파일들은 컨테이너로 패키징됩니다.
이러한 방식으로, 한 공간에서 작업하는 어플리케이션은 모든 환경에서 구동 될 수 있습니다.
서로 다른 구성 요소들을 가진 동일한 어플리케이션은 환경 변수들로 구동 될 수 있습니다.
다중 컨테이너는 호스트의 운영 체제에서 핵심이 격리 된 장치에서 구동 될 수 있습니다.
짧게 말해서, 컨테이너들은 그들의 작은 크기에도 불구하고 모든 임무들을 다룰 수 있으며,
추가 저장 공간을 결제 할 필요가 없습니다.
컨테이너 관리 소프트웨어의 예시로는,
What problems do containers solve?
컨테이너들은 이러한 문제들을 극복하도록 도와줍니다 :
- 라이브러리를 빼먹거나, 서로 다른 어플리케이션의 서로 다른 버전 장착, 잘못된 어플리케이션 의존성 작성
- 같은 컴퓨터에서 실행되는 프로그램 간의 Port 충돌
- 프로세서의 남용과 어플리케이션에 의한 메모리 스타일의 리소스 사용
- 어플리케이션의 설치, 시작, 정지, 삭제에 대한 어려움
How do they do it?
컨테이너가 이러한 임무들을 어떻게 수행하는지 이해하기 위해서,
이들의 내부를 파봅시다.
flowchart LR
subgraph Infrastructure - 인프라체제
subgraph Host Kernel/OS - 호스트 커널/운영체제
subgraph Container Runtime - 컨테이너 런타임
direction TB
subgraph Container1
direction TB
App1
Library1
end
subgraph Container2
direction TB
App2
Library2
end
subgraph Container3
direction TB
App3
Library3
end
end
end
end
컨테이너 기술에 있어 세 개의 기둥은,
namespace(네임스페이스), control groups(제어 그룹), union file system(통합 파일 시스템) 입니다.
Namespace(네임스페이스) 는 컨테이너들이 보고 접근 할 수 있는 것을 제한함으로서,
리눅스 시스템 밑에 있는 그들의 측면을 제공합니다.
당신이 컨테이너를 구동 할 때, 컨테이너들은 특정한 컨테이너가 사용 할 네임스페이스를 생성하고,
운영 체제에 대한 서로 다른 정보를 표현하는 여러 개의 네임스페이스들을 가집니다.
예를 들어, MNT
네임스페이스는 컨테이너가 사용 할 수 있는, 마운트 된 파일 시스템을 제한하고,
USER
네임스페이스는 각각의 컨테이너에서 유저들을 격리하기 위해 사용됩니다.
또한 Control Group(제어 그룹) 들은 cgroups 라고 불리기도 합니다.
이는 리눅스 커널 기능이며,
격리, 우선순위, 프로세스 집합의 리소스 사용량을 계산하는 기능입니다.
( CPU, memory, disk I/O, network, etc..)
또한 제어 그룹들은 컨테이너들에게 사용량의 제약을 부과하여,
컨테이너들이 필요한 리소스만큼한 사용한다고 보증합니다.
그리고 만약 필요하다면, 컨테이너가 사용 할 수 있는 리소스 제한합니다.
컨테이너에서 사용되는 Isolated Union file systems (격리된 통합 파일 시스템) 들은 쌓을 수 있습니다.
이러한 시스템은 당신의 새로운 컨테이너를 매번 배포 할 때 마다,
중복된 데이터를 피할 수 있게 돕습니다.
What are the advantages of containers?
컨테이너의 장점은 무엇일까?
컨테이너들은 많은 장점을 가지고 있습니다.
또한 최근 몇 년간 꽤 많은 유저들에 의해 선호되고 있습니다.
따라서, 컨테이너의 장점이 무엇일까요?
첫 번째 장점 :
컨테이너로 이미 존재하는 서비스를 배포하는 것은 그저 몇 번의 클릭이나 명령어만 필요합니다.
또 다른 한편, 당신은 아마 컨테이너들을 설정하는 방법을 배울 필요가 있습니다.
두 번째 장점 :
컨테이너에 내용물을 설명하는 파일과 함께, 우리는 새로운 컨테이너들을 시작 할 수 있거나,
이미 구동되는 어플리케이션들과 함께 더 많은 컨테이너들을 몇 개의 명령어만으로 생성 할 수 있습니다.
세 번째 장점 :
컨테이너를 사용 할 때, 일관된 테스트 환경은 특정한 파이프라인에 따라 제공됩니다.
네 번째 장점 :
컨테이너와 클라우드 기술들의 막대한 확산 덕분에,
회사들은 그들의 소프트웨어를 대부분의 모든 클라우드 제공자에게 쉽게 배포 할 수 있습니다.
Conclusion - 결론
요약하자면, 컨테이너들은 매년 더 유명해지고 있습니다.
이는 컨테이너가 내용물을 가볍고 더 빠르게 만들기 때문입니다.
당신이 이번 주제에서 배운 것과 다가오는 주제들은 소프트웨어 개발의 모든 영역에서 유용 할 것이며,
컨테이너는 더욱 더 평범해 질 겁니다.
words to remember
reproducible : 재생 할 수 있는, 재현할 수 있는
overcome : 극복하다, 이기다, 이겨내다, 극복해 내다
pillars : 기둥, 대들보, 주석, 기둥으로 받치다
underlying : 밑에 있는, 뒤에 숨은, 제일의
impose : 부과하다, 두다, 속다, 강요하다
'Hyperskill - 컴퓨터 CS 및 영어 독해 > Introduction to Docker' 카테고리의 다른 글
Run the "hello-world" docker container - hello-world 이미지로 도커 컨테이너 실행하기 (4) | 2024.08.28 |
---|---|
Introduction to docker and installation (1) | 2024.08.27 |
Globbing - 글로빙 (0) | 2024.08.21 |
Loops and sequences - Bash 반복문 (1) | 2024.08.20 |
Conditional statements and test checks - bash if-else 조건문 (0) | 2024.08.17 |