Server/Docker

[Docker]Docker 예제

93_seong.on2e 2024. 8. 12. 13:08
반응형

 

Docker란?

Docker는 소프트웨어 개발 및 배포를 위해 널리 사용되는 컨테이너 기반의 플랫폼입니다.

Docker를 사용하면 응용 프로그램과 그 응용 프로그램이 실행되는 환경을 "컨테이너"라는 독립된 단위로 패키징할 수 있습니다. 이 컨테이너에는 필요한 모든 라이브러리, 의존성, 코드 및 설정이 포함되어 있어, 어떤 환경에서도 일관되게 애플리케이션을 실행할 수 있게 해줍니다.

 

컨테이너란?

Docker에서 컨테이너는 애플리케이션과 그 실행 환경을 하나의 독립된 패키지로 묶어주는 가상화 기술의 한 형태입니다. 이 패키지는 필요한 모든 코드, 라이브러리, 환경 변수, 설정 파일 등을 포함하며, 이를 통해 어디서나 동일한 환경에서 애플리케이션을 실행할 수 있게 해줍니다.

 

컨테이너는 운영 체제의 커널을 공유하면서도, 애플리케이션이 서로 격리된 상태로 실행될 수 있도록 해줍니다. 이는 하이퍼바이저 기반의 가상 머신과 비교할 때 훨씬 가볍고 빠르며, 자원 사용량도 적습니다. Docker는 이러한 컨테이너를 쉽게 생성, 배포, 관리할 수 있는 도구를 제공하며, 이를 통해 개발자와 운영자가 동일한 환경에서 애플리케이션을 테스트하고 배포할 수 있도록 도와줍니다.

Docker의 구조

 

 

Docker Image

Docker 이미지(Docker Image)는 애플리케이션을 실행하기 위한 모든 필요한 파일, 설정, 라이브러리, 실행 환경 등을 포함하는 읽기 전용 템플릿입니다.

Docker 이미지는 컨테이너를 생성하는 데 사용되며, 특정 애플리케이션을 실행하기 위해 필요한 모든 것을 하나의 패키지로 묶어놓은 것입니다.

이미지는 여러 레이어로 구성되어 있으며, 각 레이어는 이전 레이어에 대한 변경사항을 포함합니다. 예를 들어, 기본 운영 체제 레이어 위에 특정 애플리케이션이 설치된 레이어가 추가되고, 그 위에 설정 파일이 추가된 레이어가 있을 수 있습니다. 이러한 레이어 구조 덕분에 이미지는 효율적으로 저장되고, 동일한 레이어를 공유하는 컨테이너 간의 자원 낭비를 줄일 수 있습니다.

 

Docker File

Dockerfile은 Docker 이미지를 만들기 위해 필요한 명령어와 설정을 기술한 텍스트 파일입니다. 이 파일에는 특정 애플리케이션을 실행하기 위한 환경을 어떻게 구축할지 단계별로 작성되어 있습니다. Docker는 Dockerfile을 읽고, 그 지시에 따라 이미지를 생성합니다.

Dockerfile은 일종의 스크립트처럼 동작하며, 각 명령어는 이미지의 레이어를 생성합니다. 일반적으로 Dockerfile에는 다음과 같은 명령어들이 포함됩니다:

  1. FROM: 베이스 이미지를 지정합니다. 예를 들어, FROM ubuntu:20.04는 우분투 20.04 이미지를 베이스로 사용하겠다는 의미입니다.
  2. RUN: 이미지 생성 과정에서 특정 명령을 실행합니다. 예를 들어, RUN apt-get update는 패키지 목록을 업데이트하는 명령을 실행합니다.
  3. COPY: 호스트 머신에서 파일을 이미지 내의 특정 위치로 복사합니다.
  4. WORKDIR: 작업 디렉터리를 설정합니다.
  5. CMD: 컨테이너가 실행될 때 기본으로 실행될 명령을 지정합니다.
  6. EXPOSE: 컨테이너에서 사용할 포트를 지정합니다.

예를 들어, 간단한 .NET 애플리케이션을 위한 Dockerfile은 다음과 같이 작성될 수 있습니다:

# Use the official .NET SDK as a build environment
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build

# Set the working directory
WORKDIR /src

# Copy the project file and restore dependencies
COPY ["DockerProject.csproj", "./"]
RUN dotnet restore "./DockerProject.csproj"

# Copy the rest of the application files
COPY . .

# Build the application
RUN dotnet build "DockerProject.csproj" -c Release -o /app/build

# Publish the application
RUN dotnet publish "DockerProject.csproj" -c Release -o /app/publish

# Use the official ASP.NET Core runtime as a base image
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS final
WORKDIR /app
COPY --from=build /app/publish .
ENTRYPOINT ["dotnet", "DockerProject.dll"]

 

VM  VS Docker

VM은 높은 격리성과 다양한 운영 체제가 필요한 경우 적합하고, Docker는 빠른 배포와 효율적인 자원 사용이 중요한 경우에 유리합니다.

 

VM(가상 머신)의 장단점
장점:
격리성: 각 VM은 자체 운영 체제를 갖고 있어, 높은 수준의 보안과 완전한 격리성을 제공.
호환성: 다양한 운영 체제를 동시에 실행할 수 있어 다양한 테스트 환경 제공 가능.
성숙한 기술: 오랜 시간 사용되어 온 기술로, 안정적이고 신뢰할 수 있음.

 

단점:
무거운 자원 사용: 각 VM은 자체 운영 체제를 포함하므로, 많은 메모리와 CPU를 소모함.
느린 부팅 시간: 운영 체제의 부팅 시간이 길어 애플리케이션 시작이 느림.
배포 및 관리 복잡성: VM 이미지는 크기가 크고, 배포 및 관리가 복잡할 수 있음.

 

Docker(컨테이너)의 장단점

장점:
경량화: Docker 컨테이너는 운영 체제를 공유하므로, 훨씬 적은 자원으로 동작 가능.
빠른 시작: 컨테이너는 애플리케이션과 필요한 환경만 포함하여 빠르게 시작됨.
일관된 환경: 개발, 테스트, 프로덕션 환경 간의 일관성을 쉽게 유지할 수 있음.
쉬운 배포 및 관리: 컨테이너 이미지는 가볍고, 배포와 관리가 간편함.

 

단점:
제한된 격리성: 모든 컨테이너가 동일한 운영 체제를 공유하므로, VM에 비해 격리성이 낮음.
운영 체제 의존성: 컨테이너는 호스트 운영 체제와 동일한 커널을 사용해야 하므로, 다른 OS를 실행할 수 없음.
복잡한 네트워킹: 컨테이너 간 네트워킹 설정이 VM에 비해 더 복잡할 수 있음.

728x90
반응형

'Server > Docker' 카테고리의 다른 글

[Docker] TimeZone 변경  (0) 2024.09.03
[Docker] Azure AppService에 Docker 배포 예제  (0) 2024.08.12