Docker 왜 사용하는가?
1. 일관성 보장
2. 다중 컨테이너 지원
1. 일관성 보장
어플리케이션이 어떤 머신에서도 정상 및 동일 동작하기 위해서는 어플리케이션이 구동되는데 필요한 모든 것들이 아래의 환경과 버전 등이 맞아야한다. -> 이를 일관성이라고 한다.
- Application 파일
- 환경 변수
- 런타임 환경, 버전
- 서드파티 라이브러리
- Cut down OS
격리 (Isolation) & 일관성 (Consistency)
- 격리 : 로컬(인스턴스)의 환경과 분리된 도커 환경으로 로컬 환경을 오염 / 충돌하지 않음
- 일관성 : 다양한 로컬(인스턴스)에서도 도커로 일관된 어플리케이션 구동 가능
도커가 없다면 로컬(인스턴스)의 환경과 + App 구동을 위한 환경이 충돌하고 이리저리 섞인다.
도커가 있다면 로컬(인스턴스)의 환경과 + App 구동을 위한 환경이 충돌하지 않는다.
- App 구동 후 App 구동에 필요한 모든 환경들은 이미지(컨테이너)로 감싸져있어서 버리면 된다.
2. 다중 컨테이너 지원
하나의 서버임에도 다중 컨테이너를 동작시키면 다양한 어플리케이션들을 조합하여 원하는 서버 구동 가능
- WAS + DB: 하나의 서버에서 Spring 과 MySQL을 각각 따로 동작 및 연결
- WAS + Logstash: 하나의 서버에서 Spring 에서 생성하는 로그를 Logstash 가 수집, 가공, 전송
Docker란?
격리 구동을 위한 가상화 기술 = 격리된 공간에서 프로세스가 동작하는 기술
하나의 서버(Host OS) 위에서 다양한 환경에서의 어플리케이션을 격리 구동시키기 위해서는 가상화를 사용한다.
격리, 가상화 단위: VM vs. Container
다양한 환경이 무엇이냐에 따라 가상화 방법은 2개로 나뉜다.
VM (Virtual Machine)
다양한 환경의 정의 = Guest OS + Bins/Libs + App B
OS 레벨 독립적 어플리케이션 구동 환경 -> 무겁고, 느림
Virtual Machine에서 우분투 실행하려고 하면 시작하는데 엄청 오래 걸리고, 메모리도 많이 잡아 먹는다.
Container
다양한 환경의 정의 = Bins/Libs + App B
Bins/Libs 레벨 독립적 어플리케이션 구동 환경 -> VM 보다 경량화 (OS 레벨 -> Bins/Libs 레벨)
- 가볍고 빠르다.
- 리소스를 적게 사용
왜 Docker는 항상 Linux 명령어만 사용하는가?
docker는 Linux Cotainer 구동을 위해 Image를 만들고 Container 를 구동하는 책임을 갖는다.
- 컨테이너: 격리된 공간에서 프로세스가 동작하는 기술 (Isolated Process in Userspace)
- Docker 컨테이너 구동 원리는 LXC(Linux Container), cgroup, kernel namespaces 기반
- Docker의 Container = Linux Container
VM(Virtual Machine) 사용 시 Guest OS 구동을 위한 Hypervisor 타입
VM 사용 시 Guest OS 구동을 위한 Hypervisor는 2개 타입으로 나뉜다.
- Baremetal (microkernalized): 호스트 머신(하드웨어) 위 바로 구동
- 호스트 OS 의 하드웨어(머신) 위 동작이기에 적은 오버헤드
- Microsoft Hyper-V, WSL 등등
- Hosted (Monolithic): 호스트 OS위 소프트웨어 레이어 혹은 애플리케이션으로써 구동
- 호스트 OS의 하드웨어 자원을 (소프트웨어적으로) "추상화하여 나누어 사용"
- Monolithic = 하드웨어 자원은 호스트 OS꺼 한개 뿐
- 호스트 OS의 하드웨어(머신) 위에서 추상화 방식으로 동작되는 것이기에 설치 및 구성 편리
- Oracle VirtualBox 등등
Docker 용어
Docker Image
Docker 격리 단위이다.
Bins/Libs와 App 집합
- App: 구동시킬 앱이 담겨져있다. (예, Spring Boot)
- Bins/Libs: 앱 구동시킬 때 필요한 라이브러리, 실행파일, 환경 변수
Dockerfile
Docker 격리 정의
어떤 Bins/Libs와 어떤 App 을 포장할지 = 이미지 생성 규칠
- 어떤 App을 사용할거야?
- 어떤 Bins/Libs 들을 사용할거야?
Docker Container
Docker 격리 동작
실행중인 이미지 = 이미지 구동
'ASAC 웹 풀스택 > DevOps' 카테고리의 다른 글
[Github Action] Github Action 동작 원리 및 워크플로 파일 이해하기 (0) | 2024.10.29 |
---|---|
[Docker] best practices (1) | 2024.10.24 |
[Docker] Docker Workflow (1) | 2024.10.19 |
[Docker] Github Action으로 CI/CD - CD (1) | 2024.10.17 |
[Docker] Docker를 통한 어플리케이션 관리: 단일 / 다중 컨테이너 (0) | 2024.10.16 |