1. 기존의 서버관리
예를 들어 웹서비스 환경을 제공한다라고 하면..
1. 서버OS설치 (Linux/Ubuntu/CentOS)
2. 애플리케이션 설치(Web/Was/DB/App)
3. 각 애플리케이션의 Configuration 설정
4. 서비스데몬 실행
(도커에 관심을 갖게 된 계기)
이걸 한번에 쭉~ 막힘없이 진행한다면 문제가 없지만
트러블메이커인 나에겐.. 제일 빡치고 화나는 부분이였다...
버전때문에,디렉토리 때문에, 알수없는 이유로, 계속 설치 실패하고 다시 시작하기......
정말 별것도 아닌일인데 이렇게 시간만 잡아먹는게 너무 현타가 왔었다
그러던 중 도커가 이러한 부분을 조금더 간편하게 해결해줄 수 있다고 느껴져서 관심을 갖게 되었다.
2. 도커란?
'컨테이너' 기반의 오픈소스 가상화 플랫폼
즉, 쉽게말해서 컨테이너들을 관리하는 플랫폼 (Pass)
3. 컨테이너란?
다양한 프로그램, 실행환경을 추상화하는 기술
즉,프로그램을 빌드/실행할 때 그 어떤 기기에서든 똑같은 환경을 조성할 수 있도록 도와주는 패키징 서비스
컨테이너에는 프로그램을 실행할떄 필요한 모든것들이 전부정의되어 있음
예를 들어 nodeJS 애플리케이션을 컨테이너화한다면
nodeJS 프레임워크를 컨테이너에 설치하고, 소스코드를 로컬 폴더에서 컨테이너로 옮긴 다음에 , 빌드하고 테스트
하는 이런 과정이 처음부터 모두 스크립트로 짜여있는 것
3-1. 컨테이너화 되면 뭐가 좋은데?
로컬에서 개발해서 빌드한 이미지가 그대로 실행되기 떄문에 환경이 바뀔때마다 추가적인 작업을 최소화 할 수 있음
동일한 인터페이스를 제공해서 프로그램의 배포관리를 단순하게 해줄 수 있음
백엔드 프로그램, 디비서버 등 어떤 프로그램도 컨테이너로 추상화할 수 있고,
AWS/GCP/Azure 같이 어디서든 실행가능
즉, 격리된 공간에서 프로세스가 동작하는 기술
3-2. 컨테이너 vs 가상머신(vm)
기존 OS를 가상화하는거랑 뭐가 다른가?
VM방식 : host OS 위에 '각각' 게스트os를 가상화해서 사용하는 방식
VMware나 VirtualBox와 같은 가상머신 사용
여러가지 os를 가상화(윈도우에서 리눅스환경을 돌릴때) 할 수 있지만 무겁고 느림
즉, 추가적으로 각각의 OS를 설치하고, 각각 할당된 가상화 하드웨어를 사용하기 때문에 오버헤드 발생
컨테이너방식 : 하나의 커널내에서 환경을 격리시키고 host 하드웨어 자원을 '공유'해서 사용하는 방식
즉, 프로세스를 격리하는 방식으로 VM방식보다 오버헤드가 적음
CPU나 메모리가 딱 프로세스에 필요한 만큼만 사용해서 성능적으로 손실이 없음
하나의 서버에 여러개의 컨테이너를 실행하면서 서로 영향을 미치지 않고 독립적으로 실행됨
새로운 컨테이너를 만드는데 걸리는 시간은 겨우1-2초로 매우 빠르고 가벼움
https://pearlluck.tistory.com/133
4.이미지란?
컨테이너를 실행하기 위한 모든 파일과 설정값들을 포함하고 있는 것
도커는 컨테이너안에 가상화한 환경들을 스냅샷처럼 변하지 않은 이미지로 가지고 있음
4-1. 이미지의 특징 : 상태값을 가지지 않고, 변하지 않는다.
컨테이너는 이미지를 실행한 상태(stateless)
컨테이너를 내리고 재생성할때 레이어에 기록된 내용은 전혀 저장되지 않고 사라지고 처음이미지 상태로 환경 재생성
이미지만 있으면 컴파일하고 다시 설치할 필요가 없다.
그래서 새로운 서버가 추가되면 미리 만들어 놓은 이미지를 다운받고, 컨테이너를 생성만 하면 됨
컨테이너의 상태가 바뀌거나 삭제되도 이미지는 그대로 남아있음(Immutable)
이미지들을 '레이어방식'으로 구현해서 관리함
특정 이미지를 기반으로 새로운 부분이 추가될때마다 레이어를 쌓고,
이 레이어에 변경된 내용을 기록해서 새로운 이미지를 만듬
-> 중복적으로 사용되는 부분을 줄일 수 있고, 특정 이미지를 기반으로 커스터마이징 가능
5. 도커이미지 파일생성
텍스트파일로 간단한게 생성가능
예를 들어 도커허브에서 Nginx이미지를 가져와서 nignx 웹서버를 만들기 위한 도커 스크립트
*Dokcer hub(https://hub.docker.com/): 깃허브처럼 오피셜한 도커이미지들을 공유하고 있는 서비스
FROM nginx:1.15.12
ADD ./static_web /var/www/html
WORKDIR /etc/nginx
CMD ["nginx"]
EXPOSE 80
EXPOSE 443
스크립트 설명
FROM 베이스이미지:버전
ADD ./static_web 폴더에 있는 내용을 컨테이너내에서 /var/www/html위치에 추가
WORKDIR 앞으로 명령어를 실행할 디렉토리
CMD 실행할 명령어
EXPOSE 열어놓을 포트
즉, 명령어들로 만든 도커파일만 있으면 config때문에 빡쳐하지 않아도 된다!
도커를 실행 할 수 있는 환경 어디에서든 똑같은 환경으로 웹서버를 올릴 수 있음!
출처
https://subicura.com/2017/01/19/docker-guide-for-beginners-1.html
https://medium.com/withj-kr/d-3eba3de2894e
'🌴 DevOps > Docker & K8s' 카테고리의 다른 글
쿠버네티스 구성요소(2/5) - Pod 구성 및 특징 (0) | 2020.04.20 |
---|---|
쿠버네티스 구성요소(1/5) (Object/Controller) (0) | 2020.04.19 |
쿠버네티스 아키텍쳐(2/2) (마스터노드/워커노드) (0) | 2020.04.19 |
쿠버네티스 아키텍쳐(1/2) (클러스터/마스터/노드) (0) | 2020.04.19 |
쿠버네티스 기본개념(컨테이너 운영환경/Container Orchestration /k8s특징) (0) | 2020.04.19 |
docker는 Paas, k8s는 Saas (느낌) (1) | 2020.04.12 |