공부하는 책
완벽한 IT 인프라 구축을 위한 Docker (2판)
복습을 위해 요약한 것.
목표
docker 책 1장 내용 숙지
- Docker를 도입하기에 앞서 알아두어야할 시스템 기반의 개요
- 시스템 기반을 다루기 위해 필요한 인프라 기술의 핵심 내용에 대한 내용
공부내용 정리
- Docker는 애플리케이션 실행 환경을 작성 및 관리하기 위한 플랫폼1
1.1 docker 시스템과 인프라 기초 지식
- 클라우드를 구성하는 대부분의 기술은 분산 환경에서 가동시키는 것이 기본
- 분산환경에서는 인프라 엔지니어가 자동화된 툴을 사용하여 오케스트레이션 함
1.1.1 시스템기반2의 구성 요소
(1) 요구사항
- 기능: 시스템의 기능으로서, 시스템이나 소프트웨어에서 우엇을 할 수 있는지를 모아놓은 것.
- 비기능: 시스템의 성능이나 신뢰성, 확장성, 운용성, 보안 등
(2) 구성요소
- 하드웨어: 서버 장비 본체, 스트리지, 전원 장치 등
- 네트워크: 라우터, 스위치, 방화벽, 케이블 배선 등
- OS(운영체제): 하드웨어나 네크워크 장비를 제어하기 위한 기본 소프트웨어. 하드웨어의 리소스나 프로세스를 관리
- 미들웨어: 서버OS상에서 서버가 특정 역할을 다하기 위한 기능을 갖고 있는 소프트웨어
1.1.2 클라우드와 온프레미스3
(1) 온프레미스(on-premises)
- 자사에서 데이터센터를 보유하고 시스템 구축부터 운용까지를 모두 수행하는 형태
- 초기 시스템 투자에 드는 비용 부담이 큼
- 시스템 이용량과 상관없이 일정 금액을 부담해야하는 것이 특징
(2) 퍼블릭 클라우드
- 인터넷을 경유하여 불특정 다수에게 제공되는 클라우드 서비스
- 초기 투자가 필요없음
- 이용한 시간이나 데이터 양에 따라 요금 지불
(3) 프라이빗 클라우드
- 특정 기업 그룹에게만 제공되는 클라우드 서비스
- 이용자를 한정할 수 있으므로 보안을 확보하기 쉬움
- 독자적인 기능이나 서비스 추가에 용이
- 클라우드 업체가 요구사항에 맞춰 단기간에 인프라 구축
1.1.3 클라우드가 적합한 케이스
-
트래픽의 변동이 많은 시스템
클라우드 오토스케일 기능
동적으로 서버 사양이나 스토리지 용량을 쉽게 증설시킬 수 있음 -
해외에 백업을 구축하고 싶은 시스템
업무 연속성 계획
재해와 같은, 사업 중단을 야기하는 리스크를 최소한으로 하기위해 미리 준비해 두는 계획 - 서비스를 빨리 제공하고 싶은 시스템
1.1.4 온프레미스가 적합한 케이스
- 가용성이 요구되는 시스템
- 기밀성이 높은 데이터를 다루는 시스템
- 특수한 요구사항이 있는 시스템
1.1.5 시스템 기반의 구축/운용 흐름
단계 | 설명 |
---|---|
시스템 구축 계획 및 요구사항 정의 단계 | 구축 범위 선정, 요구사항 정의, 예산 책정, 프로젝트 체계화, 마이그레이션, 연계 |
인프라 설계 단계 | 아키텍쳐 설계, OS,미들웨어 선택, 시스템 운용 설계, 시스템 마이그레이션 셜게 |
인프라 구축 단계 | 네트워크 부설, 서버설치, 셋업, 테스트, 마이그레이션 |
운용 단계 | 서버프로세스, 네트워크, 리소스, 배치job모니터링, 데이터 백업, 정기유지보수, OS,미들웨어 업그레이드, 장애시 대응 |
Docker는 시스템 구축이나 시스템 운용을 자동화하고 테스트가 끝난 애플리케이션을 지속적으로 제공할 수 있는 플랫폼1
이 책…말이 너무…장황해…어려워 보이고 싶어하는 것 같다
1.2 하드웨어와 네트워크 기초 지식
1.2.1 서버 장비
CPU
- 프로그램의 설계나 처리 등을 수행하는 전자회로 부품
- CPU의 작동 주파수가 클수록 연산 능력 높아짐
- 코어4 수가 많으면, 동시에 처리할수 있는 연산 수가 증가. 멀티코어
- GPU: (graphics processing unit): 여러개 코어로 동시 및 병렬처리 프로세스
메모리
- CPU가 직접 액세스할 수 있는 기억장치
스토리지
- 영구적인 데이터 저장하는 디바이스, 보조기억장치
- 하드디스크나 SSD등을 이용, 기업용도로 이용되는 Fiber Channer(FC) 하드디스크도 있음.
- 대부분 다중화 구성을 취함
그외
- 전원트러블 차단을 막기위한 UPS(무정전 전원장치)
- KVM 스위치
1.2.2 네트워크 주소
- MAC 주소 (물리 주소 / 이더넷 주소) : 48비트 주소 (앞 24비트: 네트워크 부품의 제조업체 식별번호)
- IP 주소: 네트워크에 연결된 장비에 할당되는 식별번호
1.2.3 OSI 참조 모델과 통신 프로토콜
- 통신프로토콜: 서로 어떤 약속으로 통신을 할지 정한 규약
- OSI 참조 모델: ISO가 책정한, 컴퓨터의 통신 기능을 계층 구조로 나눈 개념 모델
계층 | 계층명 | 대표 프로토콜 | 대표 통신 기기 |
---|---|---|---|
7계층 (L7) | 응용 계층 | HTTP, DNS, SMTP, SSH | 방화벽, 로드밸런서 |
6계층 (L6) | 표현 계층 | ||
5계층 (L5) | 세션 계층 | ||
4계층 (L4) | 전송 계층 | TCP, UDP | |
3계층 (L3) | 네트워크 계층 | IP, ICMP | 라우터, L3 스위치 |
2계층 (L2) | 데이터 링크 계층 | Ethernet | L2 스위치, 브리지 |
1계층 (L1) | 물리 계층 | 리피터 허브 |
1.2.4 방화벽
방화벽은 내부 네트워크와 외부와의 통신을 제어 > 내부 네트워크의 안전 유지를 위한 기술
- 패킷 필터형: 포트번호나 IP주소를 바탕으로 필터링하는 방법
- 애플리케이션 게이트웨이형
1.2.5 라우터
- 라우터는 2개 이상의 서로 다른 네트워크 사이를 중계하기 위한 통신 장비
- OSI 참조모델 3계층인 네트워크 계층에서 작동
- 어떤 루트를 통해 데이터를 전송할지 판단하기 위한 경로 선택 기능을 가지고 있음
정적 경로 | 동적경로 |
---|---|
라우터에 설정된 테이블을 바탕으로 정해진 경로 | 라우팅 프로토콜에서 설정된 경로 |
1.2.6 레이터 3 스위치
- 라우터와 거의 똑같은 기능을 갖고 있음
- 하드웨어로 라이팅 처리하여 고속
- 연결가능한 이더넷 포트의 수가 많아서 널리 이용되고 있음
1.3 OS(Linux) 기초 지식
하드웨어나 네트워크를 제어하는 것이 OS의 역할
Docker는 Linux의 기능을 사용한 기술
- 1991년 핀란드 Linus Torvalds가 개발한 Unix 호환 서버 OS
- 보안 뛰어나고 안정적으로 작동
- 스마트폰이나 임베디드 장비의 OS로도 작동
- 오픈소스
Linux 커널
- OS의 코어가 되는 부분
- 하드웨어나 애플리케이션 소프트웨어를 제어하기 위한 기본적인 기능5을 갖고 있는 소프트웨어를 말함
Linux 배포판
- 패키지화되어 배포되는 형태
- Linux 커널 이외의 부분을 사용자 공간(userland)라고 함
- 사용자 공간에서 디바이스에 직접 액세스할 수 없음 (커널을 통해 처리)
1.3.1 Linux 커널
메모리 관리: 메모리 할당/해제
메모리의 물리적인 용량을 초과하는 프로그램/데이터를 전개할 때는 하드디스크와 같은 보조기억장치에 가상 메모리 영역을 만듦. 이러한 가상 메모리 영역을 스왑(swap) 이라고 함.
- 스왑아웃: 메모리상에 전개된 이용 빈도가 낮은 데이터를 스왑으로 보냄
- 스왑인: 스왑상의 데이터를 메모리로 되돌림
쉘은 생략..
1.3.2 Linux 파일 시스템
- 파일 시스템은 Linux에서 하드디스크나 USB 메모리, CD, DVD 등과 같은 데이터에 액세스하기 위한 장치
- VFS9라는 장치를 사용하여 데이터에 대한 투과 액세스를 가능하게 함
Linux 디렉토리 생략..
1.4 미들웨어10 기초 지식
1.4.1 웹 서버/웹 애플리케이션 서버
- 웹서버: 클라이언트의 브라우저가 보내온 HTTP 요청을 받아, 웹 콘텐츠(HTML, CSS 등)를 응답으로 반환하거나 다른 서버사이드 프로그램을 호출하는 기능을 갖고 있는 서버입니다.
- 데이터베이스 서버: 시스템이 생성하는 다양한 데이터를 관리하기 위한 미들웨어
- 시스템 감시 툴
1.5 인프라 구성 관리의 기초 지식
1.5.1 인프라 구성 관리
- 인프라 구성 관리는 인프라를 구성하는 하드웨어, 네트워크, OS, 미들웨어, 애플리케이션의 구성 정보를 관리하고 적절한 상테러 유지하는 작업을 말합니다.
- 클라우드에서 이 전에 구성한 인프라를 파기하고 새로운 것을 구축하는 것을 immutable infrastucture 라고 한다.
1.5.2 코드를 사용한 구성 관리
- 인프라 구성 관리를 코드로 하고 형상관리로 이력 관리
- Infrastructure as Code 라고 함.
- Docker는 Dockerfile에 인프라의 구성 정보를 기술할 수 있음.
1.5.3 대표적인 인프라 구성 관리 툴
- 생략
- 분산 환경의 서버 관리 툴 : kubernetes11
1.5.4 지속적 인티그레이션/지속적 딜리버리
- 지속적 인티그레이션: 코드 수정 -> 테스트 하여 확실하게 작동하는 코드를 유지하는 방법. 소프트웨어의 품질 향상을 목적으로 고안된 개발 프로세스
-
소프트웨어에서의 플랫폼: 여러가지 기능을 제공해주는 공통 실행환경
↩ -
시스템 기반: 애플리케이션을 가동시키기 위해 필요한 하드웨어나 OS, 미들웨어 등과 같은 인프라를 말함.
↩ -
온프레미스(on-premises): 자사에서 데이터센터를 보유하고 시스템 구축부터 운용까지를 모두 수행하는 형태
↩ -
CPU코어: CPU의 연산회로
↩ -
하드웨어나 애플리케이션 소프트웨어를 제어하기 위한 기본적인 기능: 메모리관리, 파일시스템, 프로세스관리, 디바이스제어 등
↩ -
하드웨어: CPU, 메모리, 디스크, 입출력 장치 등
↩ -
프로세스: 해당 프로그램 파일 내용을 메모리상에 전개한 메모리상에 실행된 프로그램
↩ -
PID: 프로세스 ID
↩ -
VFS: Virtual File System: 가상 파일 시스템, 각 디바이스를 ‘파일’로 취급하는 것이 특징
↩ -
미들웨어: OS와 업무 처리를 수행하는 애플리케이션 사이에 들어가는 소프트웨어. OS가 가진 기능을 확장한 것. 애플리케이션에서 사용하는 공통 기능을 제공하는 것.
↩ -
kubernetes: 컨테이너 오케스트레이션의 사실상 표준, 컨테이너 가상 환경에 있어서 여러 컨테이너를 통합 관리하는 툴, 배의 키잡이(조타수) 라는 뜻
↩