소개
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 컨테이너 수명주기
- 빌드: Dockerfile 로부터 Docker 이미지를 생성합니다.
- 배포: Docker Hub 와 같은 레지스트리에 Docker 이미지를 저장합니다.
- 실행: 이미지로부터 Docker 컨테이너를 생성하고 실행합니다.
Docker 컨테이너 사용 사례
- 마이크로서비스: Docker 컨테이너는 마이크로서비스 기반 애플리케이션을 구축하고 배포하는 데 적합합니다.
- 지속적인 통합 및 배포: Docker 컨테이너는 애플리케이션의 빌드, 테스트 및 배포를 자동화하는 데 사용될 수 있습니다.
- 클라우드 호스팅: Docker 컨테이너는 AWS, Azure 및 Google Cloud 와 같은 클라우드 플랫폼에서 쉽게 배포 및 확장할 수 있습니다.
- 머신 러닝 및 데이터 과학: Docker 컨테이너는 머신 러닝 모델 및 데이터 처리 파이프라인을 패키징하고 배포하는 데 사용될 수 있습니다.
Linux 에서 Docker 설치 및 구성
Ubuntu 22.04 에 Docker 설치
- 패키지 인덱스 업데이트:
sudo apt-get update
apt가 HTTPS 를 통해 리포지토리를 사용할 수 있도록 필요한 패키지 설치:
sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release
- 공식 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
- 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
- Docker Engine, containerd 및 Docker Compose 설치:
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
Docker 구성
- Docker 설치 확인:
sudo docker run hello-world
sudo없이 Docker 명령어를 실행할 수 있도록 사용자를 Docker 그룹에 추가:
sudo usermod -aG docker $USER
- 시스템 부팅 시 자동으로 Docker 시작하도록 구성:
sudo systemctl enable docker.service
sudo systemctl enable containerd.service
- (선택 사항) 다른 저장소 드라이버를 사용하도록 Docker 구성:
sudo vi /etc/docker/daemon.json
다음 구성을 추가하고 파일 저장:
{
"storage-driver": "overlay2"
}
- Docker 서비스 다시 시작:
sudo systemctl restart docker
Docker Compose 설치
- 최신 버전의 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
- 바이너리 실행 권한 부여:
sudo chmod +x /usr/local/bin/docker-compose
- Docker Compose 설치 확인:
docker-compose --version
Docker 컨테이너 구축 및 실행
Docker 이미지 구축
- 프로젝트 디렉터리를 생성합니다.
mkdir my-docker-project
cd my-docker-project
- 프로젝트 디렉터리에
Dockerfile을 생성합니다.
touch Dockerfile
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;"]
- 기본 Nginx 구성 파일
default.conf을 생성합니다.
server {
listen 80;
server_name example.com;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
- Docker 이미지를 구축합니다.
docker build -t my-nginx-app .
Docker 컨테이너 실행
- Docker 컨테이너를 실행합니다.
docker run -d --name my-nginx-app -p 80:80 my-nginx-app
- 컨테이너가 실행 중인지 확인합니다.
docker ps
- 컨테이너 내에서 실행 중인 Nginx 웹 서버에 접근합니다.
curl http://localhost
Docker 컨테이너 관리
- 실행 중인 컨테이너를 중지합니다.
docker stop my-nginx-app
- 중지된 컨테이너를 시작합니다.
docker start my-nginx-app
- 컨테이너를 제거합니다.
docker rm my-nginx-app
- Docker 이미지를 제거합니다.
docker rmi my-nginx-app
Docker Compose
docker-compose.yml파일을 생성합니다.
version: '3'
services:
web:
build: .
ports:
- "80:80"
- Docker Compose 애플리케이션을 구축하고 실행합니다.
docker-compose up -d
- Docker Compose 애플리케이션을 중지하고 제거합니다.
docker-compose down
요약
이 튜토리얼을 마치면 Docker 와 그 기능에 대한 확실한 이해와 Linux 시스템에서 Docker 컨테이너를 생성, 관리 및 실행하는 실질적인 기술을 갖추게 될 것입니다. 이 지식은 애플리케이션 배포를 간소화하고, 확장성을 개선하며, 전반적인 DevOps 워크플로우를 향상시키는 데 도움이 될 것입니다.



