Linux 에서 Docker 컨테이너 생성 방법

DockerBeginner
지금 연습하기

소개

Docker 는 개발자와 IT 전문가들이 애플리케이션을 관리하고 배포하는 방식을 혁신한 강력한 컨테이너화 플랫폼입니다. 이 튜토리얼에서는 Linux 시스템에서 Docker 컨테이너를 만드는 과정을 안내합니다. Docker 설치 및 구성부터 사용자 정의 컨테이너를 빌드하고 실행하는 방법까지 자세히 다룹니다.

Docker 컨테이너 이해

Docker 는 개발자가 컨테이너 환경에서 애플리케이션을 구축, 배포 및 실행할 수 있도록 지원하는 인기 있는 오픈소스 플랫폼입니다. 컨테이너는 애플리케이션 실행에 필요한 코드, 런타임, 시스템 도구 및 라이브러리 등 모든 것을 포함하는 경량의 독립 실행형 실행 가능한 소프트웨어 패키지입니다.

Docker 컨테이너란 무엇인가요?

Docker 컨테이너는 코드와 모든 종속성을 패키징하여 한 컴퓨팅 환경에서 다른 환경으로 애플리케이션을 빠르고 안정적으로 실행할 수 있도록 표준화된 소프트웨어 단위입니다. 컨테이너는 컨테이너 생성을 위한 청사진인 Docker 이미지로부터 생성됩니다. Docker 컨테이너는 서로 그리고 호스트 운영 체제로부터 분리되어 일관되고 예측 가능한 런타임 환경을 제공합니다.

Docker 컨테이너의 장점

  • 이식성: Docker 컨테이너는 기본 인프라나 운영 체제에 관계없이 Docker 가 설치된 모든 머신에서 실행될 수 있습니다.
  • 일관성: Docker 컨테이너는 환경에 관계없이 애플리케이션이 동일한 방식으로 실행되도록 보장합니다.
  • 효율성: Docker 컨테이너는 가상 머신보다 경량이며 호스트 운영 체제의 커널을 공유하기 때문에 더 적은 리소스를 사용합니다.
  • 확장성: Docker 컨테이너는 쉽게 확장 및 축소할 수 있어 애플리케이션 관리 및 배포를 용이하게 합니다.
  • 격리: Docker 컨테이너는 서로 그리고 호스트 운영 체제로부터 격리되어 보안 및 안정성을 향상시킵니다.

Docker 컨테이너 아키텍처

graph TD A[Docker 호스트] --> B[Docker 엔진] B --> C[Docker 이미지] B --> D[Docker 컨테이너] D --> E[애플리케이션] D --> F[라이브러리] D --> G[시스템 도구]

Docker 컨테이너 수명주기

  1. 빌드: Dockerfile 로부터 Docker 이미지를 생성합니다.
  2. 배포: Docker Hub 와 같은 레지스트리에 Docker 이미지를 저장합니다.
  3. 실행: 이미지로부터 Docker 컨테이너를 생성하고 실행합니다.

Docker 컨테이너 사용 사례

  • 마이크로서비스: Docker 컨테이너는 마이크로서비스 기반 애플리케이션을 구축하고 배포하는 데 적합합니다.
  • 지속적인 통합 및 배포: Docker 컨테이너는 애플리케이션의 빌드, 테스트 및 배포를 자동화하는 데 사용될 수 있습니다.
  • 클라우드 호스팅: Docker 컨테이너는 AWS, Azure 및 Google Cloud 와 같은 클라우드 플랫폼에서 쉽게 배포 및 확장할 수 있습니다.
  • 머신 러닝 및 데이터 과학: Docker 컨테이너는 머신 러닝 모델 및 데이터 처리 파이프라인을 패키징하고 배포하는 데 사용될 수 있습니다.

Linux 에서 Docker 설치 및 구성

Ubuntu 22.04 에 Docker 설치

  1. 패키지 인덱스 업데이트:
sudo apt-get update
  1. apt가 HTTPS 를 통해 리포지토리를 사용할 수 있도록 필요한 패키지 설치:
sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release
  1. 공식 Docker GPG 키 추가:
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
  1. Docker 리포지토리 설정:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  1. Docker Engine, containerd 및 Docker Compose 설치:
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

Docker 구성

  1. Docker 설치 확인:
sudo docker run hello-world
  1. sudo 없이 Docker 명령어를 실행할 수 있도록 사용자를 Docker 그룹에 추가:
sudo usermod -aG docker $USER
  1. 시스템 부팅 시 자동으로 Docker 시작하도록 구성:
sudo systemctl enable docker.service
sudo systemctl enable containerd.service
  1. (선택 사항) 다른 저장소 드라이버를 사용하도록 Docker 구성:
sudo vi /etc/docker/daemon.json

다음 구성을 추가하고 파일 저장:

{
  "storage-driver": "overlay2"
}
  1. Docker 서비스 다시 시작:
sudo systemctl restart docker

Docker Compose 설치

  1. 최신 버전의 Docker Compose 다운로드:
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
  1. 바이너리 실행 권한 부여:
sudo chmod +x /usr/local/bin/docker-compose
  1. Docker Compose 설치 확인:
docker-compose --version

Docker 컨테이너 구축 및 실행

Docker 이미지 구축

  1. 프로젝트 디렉터리를 생성합니다.
mkdir my-docker-project
cd my-docker-project
  1. 프로젝트 디렉터리에 Dockerfile을 생성합니다.
touch Dockerfile
  1. Dockerfile을 열고 다음 내용을 추가합니다.
## 기본 Ubuntu 22.04 이미지를 사용합니다.
FROM ubuntu:22.04

## 패키지 인덱스를 업데이트하고 필요한 패키지를 설치합니다.
RUN apt-get update && apt-get install -y \
    nginx \
    curl \
    && rm -rf /var/lib/apt/lists/*

## 기본 Nginx 구성 파일을 복사합니다.
COPY default.conf /etc/nginx/conf.d/

## Nginx를 위한 80번 포트를 노출합니다.
EXPOSE 80

## 컨테이너 시작 시 Nginx를 시작합니다.
CMD ["nginx", "-g", "daemon off;"]
  1. 기본 Nginx 구성 파일 default.conf을 생성합니다.
server {
    listen 80;
    server_name example.com;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
}
  1. Docker 이미지를 구축합니다.
docker build -t my-nginx-app .

Docker 컨테이너 실행

  1. Docker 컨테이너를 실행합니다.
docker run -d --name my-nginx-app -p 80:80 my-nginx-app
  1. 컨테이너가 실행 중인지 확인합니다.
docker ps
  1. 컨테이너 내에서 실행 중인 Nginx 웹 서버에 접근합니다.
curl http://localhost

Docker 컨테이너 관리

  1. 실행 중인 컨테이너를 중지합니다.
docker stop my-nginx-app
  1. 중지된 컨테이너를 시작합니다.
docker start my-nginx-app
  1. 컨테이너를 제거합니다.
docker rm my-nginx-app
  1. Docker 이미지를 제거합니다.
docker rmi my-nginx-app

Docker Compose

  1. docker-compose.yml 파일을 생성합니다.
version: '3'
services:
  web:
    build: .
    ports:
     - "80:80"
  1. Docker Compose 애플리케이션을 구축하고 실행합니다.
docker-compose up -d
  1. Docker Compose 애플리케이션을 중지하고 제거합니다.
docker-compose down

요약

이 튜토리얼을 마치면 Docker 와 그 기능에 대한 확실한 이해와 Linux 시스템에서 Docker 컨테이너를 생성, 관리 및 실행하는 실질적인 기술을 갖추게 될 것입니다. 이 지식은 애플리케이션 배포를 간소화하고, 확장성을 개선하며, 전반적인 DevOps 워크플로우를 향상시키는 데 도움이 될 것입니다.