sugang
sugang'study
sugang
전체 방문자
오늘
어제
  • 분류 전체보기
    • [OS]
    • [취업정보]
    • [Server]
    • [Algorithm]
    • [Database]
    • [MyTravel]
    • [Network]

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • n

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
sugang

sugang'study

[server] Docker 시작하기
[Server]

[server] Docker 시작하기

2022. 7. 1. 23:43

Docker 란?

도커는 컨테이너 가상화 기술을 제공하여 애플리케이션의 실행에 필요한 환경을 하나의 '이미지'로 정의하여 모아두고, 그 이미지를 사용하여 다양한 환경에서 애플리케이션 실행 환경을 구축 및 운용할 수 있는 오픈소스 플랫폼이다.

 도커의 가장 대표적 특징은 도커를 사용할 수 있는 환경만 있다면 애플리세이션에 대한 이미지를 다운로드 받아 바로 사용할 수 있는 다운로드(Pull)기능이다. 애플리케이션의 실행에 필요한 프로그램, 라이브러리, 소스 등의 모든 파일 및 디렉토리들을 '컨테이너'로 묶어 이미지화 하고, 이러한 도커 이미지를 레지스트리(Registry)에 저장하여 공유할 수 있다.

 

도커 레지스트리

  • 허브
  • 리포지토리 : 이미지를 저장하고 저장된 이미지를 다운로드 할 수 있는 공유 환경을 제공하는 저장소

도커가 설치되어 있는 환경이라면 어디서든지 '이미지'가 작동되므로 환경설정 문제를 줄일 수 있다! 

 

도커의 특징

1. 빠른 설치

2. 높은 이식성 : 애플리케이션과 설치 파일들이 하나의 컨테이너에 존재하기 때문에 도커만 실행이 가능하면 사용 가능하다.

3. 버전 관리, 컴포넌트 재사용: 버전 관리가 쉽고 변경 내역을 확인가능하여 롤백이 간단.

4. 쉬운 유지관리 

 

 

가상화로 보는 도커의 필요성

하이퍼바이저 가상화 기술-

전가상화(Full-virtualization): 하드웨어를 완전히 가상화 하는 방식

반가상화(Para-virtualization): 전가상화의 가장 큰 단점인 성능 저하의 문제를 해결하기 위해 하드웨어를 부분적으로 가상화하는방식이다.(  OpenStack, AWS 등의 클라우드 서비스의 가상 컴퓨터 기술의 기반)

 

VMware 등의 하이퍼바이저형 가상머신은 Host OS 위에 Guest OS 환경을 통째로 가상화한다. 이 방식은 가상 서버마다 OS를 선택할 수 있고 하나의 가상서버가 공격을 받았을 시, 다른 가상 서버에 피해가 가지 않는 장점이 있으나 가상 서버마다 OS가 필요하므로 하드웨어 리소스(CPU, 메모리, 스토리지 등) 의 소비량이 많고 부팅이 느리다. 즉, 성능 문제가 여전히 남아있다. 

 

컨테이너

이를 개선한 프로세스 격리 방식으로 '컨테이너'가 도입된다. 

컨테이너는 격리된 공간에서 프로세스가 동작하는 기술로, 하나의 OS 환경에서 애플리케이션의 실행 영역을 여러 개로 나누어 사용할 수 있다.

즉, 하나의 호스트 OS에서 OS처럼 운용가능한 '컨테이너'를 통해 성능 문제를 해결하여 멀티 OS환경을 구현할 수 있다. 

단순하게 프로세스를 격리시키는 방식이기 때문에 가볍고 빠르게 동작한다.

CPU나 메모리 등의 자원을 프로세스가 필요한 만큼만 할당하고 더 필요하면 그때마다 추가적으로 할당하기 때문에 성능적인 손실이 거의 없다.

하나의 서버에 다수의 컨테이너를 실행하면 서로 영향을 주지 않고 독립적으로 실행되며, 실행 중인 컨테이너에 접속하며 명령어 입력, 패키지 설치, 사용자 추가 등 모든 작업을 할 수 있다.

 

도커의 기본개념: 이미지, 컨테이너, 레이어

 

이미지: 
도커에서 서비스 운영에 필요한 서버 프로그램, 소스코드 및 라이브러리, 컴파일된 실행 파일을 묶어 정의해놓은 것이다. 
 즉, 특정 프로세스를 실행(컨테이너 실행)에 필요한 변치 않는 모든 파일과 환경을 가지고있어, 더 이상의 환경을 구성할 필요가 없는 상태의 파일을 의미한다. 예를 들어 Ubuntu이미지는 Ubuntu를 실행하기 위한 모든 파일을 가지고 있다. 

컨테이너:
이미지(Image)를 실행한 상태로, 응용프로그램의 종속성과 함께 응용프로그램 자체를 패키징 or 캡슐화하여 격리된 공간에서 프로세스를 동작시키는 기술이다.

레이어: 
도커 이미지는 컨테이너 실행에 대한 모든 정보를 담고 있기 때문에 용량이 매우 크다. 따라서 기존의 이미지에 파일 하나를 추가했다고 수백메가가 넘어가는 이미지를 다시 다운로드한다면 매우 비효율적일 수 밖에 없다.
따라서 도커는 Layer라는 개념을 사용한다. 유니온 파일 시스템을 이용하여 다수의 레이어를 하나의 파일시스템으로 사용할 수 있게 해준다. 이미지는 여러 개의 읽기 전용 레이어(Read-only Layer)로 구성되고 파일에 변화(추가, 수정)가 생기면 새로운 레이어가 생성된다.
예를 들어 CentOS 이미지가 C1 + C2 레이어의 집합이라면 이 이미지에서 nginx가 구동되는 환경의 이미지 레이어는 C1 + C2 + nginx 가 된다. 이런 식으로 기존의 이미지 레이어 위에 레이어가 추가되는 방식으로 최소한의 용량을 사용할 수 있게 된다. 여러대의 서버에 최소한의 용량으로 배포가능 하다. 

 

참조: https://velog.io/@ragnarok_code/%EB%8F%84%EC%BB%A4-%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88Container%EC%99%80-%EC%9D%B4%EB%AF%B8%EC%A7%80Image%EB%9E%80

https://zinirun.github.io/2020/08/15/how-to-use-docker/#1-%EB%8F%84%EC%BB%A4%EB%A5%BC-%EC%99%9C-%EC%93%B8%EA%B9%8C-%EB%AD%90%EA%B8%B8%EB%9E%98

'[Server]' 카테고리의 다른 글

스프링입문 - 데이터 조회하기 with JPA, 페이지 이동하기, 수정, 삭제  (0) 2022.09.08
[server] Docker 로 Node.JS & Nginx개발환경 구축  (0) 2022.07.03
local 서버에 개발환경 구축하기  (0) 2021.10.02
[Server] AWS 서버 구축 - gabia로 도메인 적용하기  (0) 2021.07.11
[Server] AWS Server 구축 - Mysql 외부 접속 with Workbench  (0) 2021.07.10
    '[Server]' 카테고리의 다른 글
    • 스프링입문 - 데이터 조회하기 with JPA, 페이지 이동하기, 수정, 삭제
    • [server] Docker 로 Node.JS & Nginx개발환경 구축
    • local 서버에 개발환경 구축하기
    • [Server] AWS 서버 구축 - gabia로 도메인 적용하기
    sugang
    sugang

    티스토리툴바