둘셋 개발!

[Docker] 도커란 무엇이고, 왜 필요한가? 본문

Docker

[Docker] 도커란 무엇이고, 왜 필요한가?

23 2023. 4. 5. 13:17

✔️ 도커란?

: 컨테이너 기반 가상화 도구로, 애플리케이션을 컨테이너라는 단위로 격리하여 실행하고 배포하는 기술을 말한다.

 

여기서 컨테이너와 가상화를 잘모르면 도커가 어떤건지 잘 감이 안잡힐 수 있다.

그래서 도커를 깊이 다루기 전에 컨테이너와 가상화 기술을 먼저 설명이 필요하다.


✔️ 가상화 기술이란?

: 하나의 물리적인 컴퓨터 자원을 가상적으로 분할하여 여러개의 가상 컴퓨터 환경을 만들어 내는 기술이다.

 

이 가상화 기술로 고성능인 컴퓨터 자원을 효율적으로 사용 할 수 있게 된 것이다.

또한 컴퓨터 환경을 분할 함으로써 안정적인 운영이 가능하다.

 

가상화 기술에는 가상머신(Virtual Machine, VM)과 컨테이너 두 가지 유형이 있다.


가상머신🎈

하이퍼바이저(Hypervisor)라는 소프트웨어를 사용해서

하나의 호스트 컴퓨터에서 여러개의 게스트 운영체제를 실행 할 수 있는 기술

 

컨테이너🕋

컨테이너 엔진을 사용해서 하나의 호스트 운영체제 위에 컨테이너 단위로 격리하여,

각각의 컨테이너 안에서 애플리케이션을 가동할 수 있는 기술


 

가상머신과 컨테이너의 가장 큰 차이점은 게스트 운영체제의 유무이다. 가상머신은 호스트 컴퓨터 위에 분리된 환경을 만들기 위해 게스트 운영체제를 각각 두어 사용하고, 컨테이너는 게시트 운영체제 없이 컨테이너 단위로 환경을 분리하는 것이다.

그림으로 보면 다음과 같다.

출처: 원티드 프리온보딩 도커 1일차 강의 자료

 

다시 도커 이야기로 돌아오면, 도커는 컨테이너 기반 가상화 도구라고 앞서 설명했다.

그러면 도커는 위의 그림에서 컨테이너 엔진이라고 말할 수 있다.

 

도커를 통해서 애플리케이션을 컨테이너 단위로 격리해서 실행하고 배포할 수 있다.

그리고 도커는 컨테이너화된 애플리케이션을 손쉽게 빌드, 배포, 관리할 수 있는 다양한 기능도 제공하고 있다.

이렇게 할 수 있는 이유는 도커의 기본적인 작동 과정을 보면 알 수 있다.

 


✔️ 도커의 작동과정

1. 도커파일로 도커 이미지를 생성한다.

 

여기서 도커파일이란 애플리케이션을 가동시킬 수 있는 설정정보를 텍스트 형태로 담고 있는 파일이다. 

예를 들어 spring 3.0.5 버전을 실행하기 위한 도커 파일은 다음과 같다.

 

- Dockerfile

# 베이스 이미지
FROM openjdk:8-jdk-alpine

# 작업 디렉토리 설정
WORKDIR /app

# 애플리케이션 파일 복사
COPY ./target/myapp.war /app

# 포트 설정
EXPOSE 8080

# 애플리케이션 실행 명령어
CMD ["java", "-jar", "myapp.war"]

 

이렇게 생긴 도커파일로 도커이미지를 생성하는 것이다.

그렇다면 도커 이미지에 대해서도 알아야 한다.

도커 이미지란 도커 컨테이너를 만들기 위한 읽기 전용 템플릿이다. 쉽게 말해서 아이폰이라고 치면 앱을 다운 받기 위해서는 app store에서 들어가서 앱 프로그램을 선택하게 된다. 이때 앱 프로그램이 도커 이미지라고 생각하면 된다.

그리고 도커 이미지들을 공개적으로 혹은 비공개로 저장되어 있는 공간을 도커 허브이다.

 

https://hub.docker.com

 

Docker Hub Container Image Library | App Containerization

Deliver your business through Docker Hub Package and publish apps and plugins as containers in Docker Hub for easy download and deployment by millions of Docker users worldwide.

hub.docker.com

여기가 도커 허브이다. explore을 들어가면 다양한 도커 이미지들이 있다.

 

 

2. 도커 컨테이너 생성

도커 이미지를 기반으로 도커 컨테이너를 생성한다. 

 

 

3. 도커 컨테이너 실행

생성된 도커 컨테이너를 실행한다.

도커는 각 컨테이너에 고유한 IP주로를 할당하고, 컨테이너 간 통신을 위한 가상 네트워크를 생성해서 애플리케이션을 실행한다.

 

 

4. 도커 컨테이너 모니터링 및 관리

도커는 컨테이너의 상태를 모니터링하고, 필요에 따라서 자동으로 컨테이너를 다시 시작하거나 스케일링하는 등의 관리 기능을 제공한다.

 

 


✔️ 도커가 필요한 이유

도커가 무엇인지 알았다면, 대충 쓸모 있겠다~ 싶지만 그래도 왜 도커가 필요한지 알아보자

 

1. 일관된 환경을 제공

개발환경와 운영환경이 달라지는 경우에 있기 때문에 도커를 사용해서 일관된 환경을 제공한다.

 

2. 빠른 배포

도커는 애플리케이션을 컨테이너로 패키징하기 때문에 배포가 빠르다.

 

3. 확장성 굿

각 컨테이너는 독립적이기 때문에, 서버 구성이나 네트워크 구성 들을 유연하게 변경할 수 있다.