0. 들어가기 앞서
수업을 통해 도커를 배웠지만, 제대로 활용하여 프로젝트에 적용할 수 없었고 개발환경과 배포환경에 대한 이슈가 발생하지 않았어서 크게 적용할 부분도 없었다. 하지만 환경에 차이에 따른 문제는 언제 발생할 지 모르기 때문에 나중을 위해서라도 도커를 제대로 배워두고 사용할 수 있을 정도로 익히자라는 생각으로 강의를 찾게 되었고 도커란 무엇인지와 간단한 실습을 통해 사용하는 법을 배울 수 있는 기초 강의인 "초보를 위한 도커 안내서"를 수강하기로 했습니다.
1. 도커란 무엇인가?
도커는 컨테이너 기반의 오픈소스 가상화 플랫폼
그렇다면 어떠한 문제를 해결하기 위해 만들어 졌는지에 대해서 알아보자
서버관리란?
복잡한 환경으로 구성되어있는 서버
->서버의 환경에 맞지 않거나 실수를 했거나 버전이 맞지 않거나 문서가 오래되었거나 또는 서버의 환경이 바뀌거나 개발의 환경이 계속 바뀌는 경우 이러한 이유로 실행이나 기능이 작동을 안하는 경우가 빈번하게 발생(나도 많이 경험해봤다...)
도커의 등장으로 서버 관리/개발 방식이 완전히 바뀌게 된다.
전통적인 서버관리 방식은 처음부터 끝까지 전부 직접 설치하고 설정을 해주어야 했다.
->도커가 등장하고 나서 모든게 컨테이너라는 것으로 추상화 할 수 있게 된다.
->서로 다른 프로그램들을 공통적인 컨테이너라는 형태로 만들 수 있게 되었다.
->컨테이너로 만들어 둔다면, 어떠한 서버 환경에서든 실행이 가능하다.
그렇다면 가상머신과 컨테이너의 차이점은?
가상머신처럼 독립적으로 실행되지만, 가상머신보다 빠르고 쉽고 효율적이다.
Guest OS, Hypervisor가 존재하는 가상머신은 속도가 느리고 격리만 해주는 도커는 성능상 하락이 없다.
전통적인 서버 운영 방식에서 도커로의 전환 과정
서버의 상태를 관리하기 위해서 인프라 엔지니어의 노력
- 서버배포 ppt를 만든다. (~~설치 방법 등)
-> 정확한지, 다른 os에서의 설치는 어떻게 하는지 등 문제 발생 - 상태관리 도구의 도입 (chep, pupet, ansible 등)
-> 러닝커브가 있다, 명령어가 조금씩 다르고 시행착오를 많이 겪는다.
-> 같은 서버에 다른 버전을 설치하고자 할 때, 버전마다 경로를 다르게 해야해서 어려움 생긴다 - 가상머신의 도입
-> 처음부터 다시 세팅하기 어려움, 이미지의 공유가 어렵다, 그리고 느리다 - 자원 격리
-> 파일, 디렉토리, 프로세스를 가상으로 분리하는 것(실제로는 같지만 다르게 보이게)
-> 그룹별로 cpu, memory, I/O 그룹별로 제한
-> 빠르고 효율적인 관리
-> 기술이 있지만 사용하기 너무 어려움
도커의 등장으로 어렵고 복잡한 기술을 사용하기 쉽게 만들어 주었다.
컨테이너 - 격리된 환경에서 작동하는 프로세스
- 리눅스 커널의 여러 기술을 활용
- 하드웨어 가상화 기술보다 가볍다
- 이미지 단위로 프로세스 실행 환경을 구성
도커의 특징
1) 확장성/이식성
- 도커가 설치되어 있다면 어디서든 컨테이너를 실행할 수 있음
- 특정 회사에 종속적이지 않음
- 쉽게 개발서버를 만들 수 있고 테스트 서버 생성도 간편하다.
2) 표준성
- 애플리케이션을 여러가지 언어로 만들 시, 배포 방식이 제각각 다르다.
-> 컨테이너라는 표준으로 서버를 배포하므로 모든 서비스들의 배포과정이 동일해진다.
3) 이미지
- 컨테이너를 실행하기 위한 압축파일, 이미지를 만드는 과정이 꼭 필요
- Dockerfile을 이용하여 이미지를 만들고 처음부터 재현 가능
- 빌드 서버에서 이미지를 만들고 이미지 저장소에 저장하여 운영서버에서 이미지를 불러온다.
4) 설정관리
- 설정은 환경변수로 제어
- 컨테이너를 띄울 때, 환경변수를 같이 지정한다.
5) 자원관리
- 가상의 공간에 프로세스가 생기기 때문에 컨테이너가 없어졌을 시 같이 사라질 수도 있음
- 별도의 저장소가 필요하다.
- 세션이나 캐시를 외부로 분리해야한다.
도커의 미래-> 컨테이너의 미래
쿠버네티스 -> 여러대의 서버와 여러개의 서비스를 관리하기 쉽게 만든다.
1) 스케줄링
- 컨테이너를 적당한 서버에 배포해주는 작업 (서버가 죽거나 놀거나 할 시 배포를 알아서 적절히 해준다)
2) 클러스터링
- 여러 개의 서버를 하나의 서버처럼 사용한다.
- 여러 곳의 서버에 흩어진 컨테이너도 가상 네트워크를 이용하여 하나의 서버처럼 쉽게 통신하게 한다.
3) 서비스 디스커버리
- 서비스를 찾아주는 기능
- 어느 서버에 컨테이너가 생성될 지 알 수 없고 다른 서버로 이동할 수 있으므로 컨테이너와 통신을 하기 위해서 어느 서버에서 실행중인지 알아야 하며 중지될 때 어딘가에 IP와 Port 정보를 업데이트 해줘야 한다.
- key-value 스토리지에 정보를 저장할 수도 있고 내부 DNS 서버를 이용한다.
'Kubernetes, Docker' 카테고리의 다른 글
[Docker] 도커 설치 및 실행 / 초보를 위한 도커 안내서 - 2일차 (0) | 2022.11.17 |
---|---|
[Kubernetes] 쿠버네티스 Tips 및 수강 후기/ 쉽게 시작하는 쿠버네티스(v1.25) - 5일차 (0) | 2022.11.10 |
[Kubernetes] 쿠버네티스 문제 상황 만들기 및 오브젝트란?/ 쉽게 시작하는 쿠버네티스(v1.25) - 4일차 (0) | 2022.11.09 |
[Kubernetes] 쿠버네티스 배포 및 구성요소 / 쉽게 시작하는 쿠버네티스(v1.25) - 3일차 (0) | 2022.11.08 |
[Kubernetes] 쿠버네티스 환경 구성/쉽게 시작하는 쿠버네티스(v1.25) - 1,2일차 (0) | 2022.11.07 |
댓글