본문 바로가기
🌴 DevOps/Docker & K8s

Docker(도커) 기본개념(도커/컨테이너/VM/이미지/도커파일)

by 카프리썬_ 2020. 4. 13.
728x90
728x90

1. 기존의 서버관리 

예를 들어 웹서비스 환경을 제공한다라고 하면..

1. 서버OS설치 (Linux/Ubuntu/CentOS)

2. 애플리케이션 설치(Web/Was/DB/App)

3. 각 애플리케이션의 Configuration 설정  

4. 서비스데몬 실행

 

(도커에 관심을 갖게 된 계기)

이걸 한번에 쭉~ 막힘없이 진행한다면 문제가 없지만

트러블메이커인 나에겐.. 제일 빡치고 화나는 부분이였다...

버전때문에,디렉토리 때문에, 알수없는 이유로, 계속 설치 실패하고 다시 시작하기......

정말 별것도 아닌일인데 이렇게 시간만 잡아먹는게 너무 현타가 왔었다

그러던 중 도커가 이러한 부분을 조금더 간편하게 해결해줄 수 있다고 느껴져서 관심을 갖게 되었다. 

 

 

docker 로고 졸귀탱

2. 도커란?

'컨테이너' 기반의 오픈소스 가상화 플랫폼

즉, 쉽게말해서 컨테이너들을 관리하는 플랫폼 (Pass)

각 '도커 컨테이너'들을 관리하는 플랫폼 = '도커'

 

3. 컨테이너란?

다양한 프로그램, 실행환경을 추상화하는 기술

즉,프로그램을 빌드/실행할 때 그 어떤 기기에서든 똑같은 환경을 조성할 수 있도록 도와주는 패키징 서비스

컨테이너에는 프로그램을 실행할떄 필요한 모든것들이 전부정의되어 있음

 

예를 들어 nodeJS 애플리케이션을 컨테이너화한다면

nodeJS 프레임워크를 컨테이너에 설치하고, 소스코드를 로컬 폴더에서 컨테이너로 옮긴 다음에 , 빌드하고 테스트

하는 이런 과정이 처음부터 모두 스크립트로 짜여있는 것

 

 

3-1. 컨테이너화 되면 뭐가 좋은데?

(컨테이너화) 출처:  https://www.docker.com/resources/what-container

로컬에서 개발해서 빌드한 이미지가 그대로 실행되기 떄문에 환경이 바뀔때마다 추가적인 작업을 최소화 할 수 있음

동일한 인터페이스를 제공해서 프로그램의 배포관리를 단순하게 해줄 수 있음

백엔드 프로그램, 디비서버 등 어떤 프로그램도 컨테이너로 추상화할 수 있고,

AWS/GCP/Azure 같이 어디서든 실행가능

즉, 격리된 공간에서 프로세스가 동작하는 기술

 

3-2. 컨테이너 vs 가상머신(vm)

기존 OS를 가상화하는거랑 뭐가 다른가?

출처 https://subicura.com/2017/01/19/docker-guide-for-beginners-1.html

VM방식 : host OS 위에 '각각' 게스트os를 가상화해서 사용하는 방식

VMware나 VirtualBox와 같은 가상머신 사용

여러가지 os를 가상화(윈도우에서 리눅스환경을 돌릴때) 할 수 있지만 무겁고 느림

즉, 추가적으로 각각의 OS를 설치하고, 각각 할당된 가상화 하드웨어를 사용하기 때문에 오버헤드 발생

 

컨테이너방식 : 하나의 커널내에서 환경을 격리시키고 host 하드웨어 자원을 '공유'해서 사용하는 방식

즉, 프로세스를 격리하는 방식으로 VM방식보다 오버헤드가 적음

CPU나 메모리가 딱 프로세스에 필요한 만큼만 사용해서 성능적으로 손실이 없음

하나의 서버에 여러개의 컨테이너를 실행하면서 서로 영향을 미치지 않고 독립적으로 실행됨

새로운 컨테이너를 만드는데 걸리는 시간은 겨우1-2초로 매우 빠르고 가벼움

 

https://pearlluck.tistory.com/133

 

[클라우드흐름 2] VM(Virtual Machine) VS Container

도커의 개념에서 잠깐 나오는 VM VS Container(도커) 이야기 https://pearlluck.tistory.com/119?category=854935 [Docker1] 도커 기본개념(도커/컨테이너/VM/이미지/도커파일) 기존의 서버관리 예를 들어 웹서비..

pearlluck.tistory.com

 

4.이미지란?

컨테이너를 실행하기 위한 모든 파일과 설정값들을 포함하고 있는 것

도커는 컨테이너안에 가상화한 환경들을 스냅샷처럼 변하지 않은 이미지로 가지고 있음 

Docker Layer (출처:  https://subicura.com/2017/01/19/docker-guide-for-beginners-1.html )

 

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://medium.com/@hashbox/%EC%B5%9C%EA%B3%A0%EC%9D%98-%EB%8F%84%EC%BB%A4%EA%B0%80-%EB%90%98%EA%B8%B0-%EC%9C%84%ED%95%9C-%EC%A7%80%EC%B9%A8%EC%84%9C-a-guide-to-becoming-the-best-docker-introduction-321e0b1fe600

 

최고의 도커가 되기 위한 지침서(A guide to becoming the best docker) — Introduction

혹시 도커에 대해 들어본 적이 있나요? 필자는 도커를 이용한 간단한 프로토타입 개발이나 외주 작업을 진행할 때 도커를 이용한 개발을 매우 익숙합니다. 이제는 도커가 없이 환경을 구축하고 작업을 하는 것은 있을 수 없는 일이라고 생각이 듭니다.

medium.com

https://subicura.com/2017/01/19/docker-guide-for-beginners-1.html

 

초보를 위한 도커 안내서 - 도커란 무엇인가?

도커를 처음 접하는 시스템 관리자나 서버 개발자를 대상으로 도커 전반에 대해 얕고 넓은 지식을 담고 있습니다. 도커가 등장한 배경과 도커의 역사, 그리고 도커의 핵심 개념인 컨테이너와 이미지에 대해 알아보고 왜 이렇게 도커가 인기 인지 하나하나 살펴보겠습니다.

subicura.com

 

https://medium.com/withj-kr/d-3eba3de2894e

 

[Docker 부터 Kubernetes 까지] [#1] Docker란?

안녕하세요 소프트웨어 엔지니어 최지호입니다. Docker와 Kubernetes를 여러 프로젝트에 사용해보며 삽질도 많이 하고 많은 어려움을 극복해온 사람으로서 그동안의 경험을 커뮤니티에 공유해보려고 합니다. [Docker부터 Kubernetes]…

medium.com

 

728x90
반응형