소개
이 포괄적인 Docker 튜토리얼은 개발자 및 IT 전문가에게 컨테이너 기술에 대한 기본적인 이해를 제공합니다. Docker 의 핵심 개념, 아키텍처 및 실제 구현을 탐색함으로써 학습자는 현대 소프트웨어 배포 및 애플리케이션 개발 전략에 대한 중요한 기술을 습득하게 됩니다.
이 포괄적인 Docker 튜토리얼은 개발자 및 IT 전문가에게 컨테이너 기술에 대한 기본적인 이해를 제공합니다. Docker 의 핵심 개념, 아키텍처 및 실제 구현을 탐색함으로써 학습자는 현대 소프트웨어 배포 및 애플리케이션 개발 전략에 대한 중요한 기술을 습득하게 됩니다.
Docker 는 소프트웨어 배포 및 애플리케이션 개발을 혁신하는 강력한 컨테이너 기술입니다. 개발자는 애플리케이션과 모든 종속성을 컨테이너라는 표준화된 단위에 패키징하여 다양한 컴퓨팅 환경에서 일관된 성능을 보장할 수 있습니다.
Docker 는 기존 가상 머신에 비해 경량적인 대안을 제공하여 소프트웨어가 최소한의 오버헤드로 격리된 환경에서 실행될 수 있도록 합니다. Docker 의 주요 구성 요소는 다음과 같습니다.
| 구성 요소 | 설명 |
|---|---|
| Docker Engine | 컨테이너 생성 및 관리를 위한 핵심 실행 환경 |
| 컨테이너 | 애플리케이션과 종속성을 포함한 경량 실행 패키지 |
| Docker 이미지 | 컨테이너를 생성하는 데 사용되는 읽기 전용 템플릿 |
| Docker 레지스트리 | Docker 이미지를 저장하고 배포하는 플랫폼 |
## 패키지 인덱스 업데이트
sudo apt update
## 종속성 설치
sudo apt install apt-transport-https ca-certificates curl software-properties-common
## Docker 공식 GPG 키 추가
curl -fsSL | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
## 안정적인 리포지토리 설정
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
## Docker Engine 설치
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io
## Docker 버전 확인
docker --version
## Docker Hub에서 이미지 가져오기
docker pull ubuntu:latest
## 사용 가능한 이미지 목록
docker images
## 컨테이너 실행
docker run -it ubuntu:latest /bin/bash
Docker 는 다양한 시나리오에서 효율적인 소프트웨어 배포를 가능하게 합니다.
Docker 컨테이너는 리소스 활용에서 상당한 이점을 제공합니다.
Dockerfile 은 Docker 이미지를 생성하기 위한 지침이 포함된 텍스트 문서입니다. 컨테이너 내에서 애플리케이션을 실행하는 데 필요한 환경, 종속성 및 구성을 정의합니다.
| 명령어 | 목적 | 예시 |
|---|---|---|
| FROM | 기본 이미지 지정 | FROM ubuntu:22.04 |
| RUN | 명령 실행 | RUN apt-get update |
| COPY | 파일 이미지로 복사 | COPY ./app /application |
| WORKDIR | 작업 디렉토리 설정 | WORKDIR /application |
| ENV | 환경 변수 설정 | ENV PORT=8080 |
| EXPOSE | 컨테이너 포트 선언 | EXPOSE 8080 |
| CMD | 기본 명령 정의 | CMD ["python", "app.py"] |
## 기본 이미지 선택
FROM python:3.9-slim
## 작업 디렉토리 설정
WORKDIR /app
## 시스템 종속성 설치
RUN apt-get update && apt-get install -y \
build-essential \
&& rm -rf /var/lib/apt/lists/*
## 애플리케이션 파일 복사
COPY . /app
## Python 종속성 설치
RUN pip install --no-cache-dir -r requirements.txt
## 애플리케이션 포트 노출
EXPOSE 5000
## 시작 명령 정의
CMD ["python", "app.py"]
## 태그가 지정된 이미지 빌드
docker build -t myapp:v1 .
## 생성된 이미지 목록
docker images
## 이미지 세부 정보 확인
docker inspect myapp:v1
## 빌드 단계
FROM maven:3.8.1-openjdk-11 AS build
WORKDIR /app
COPY pom.xml .
COPY src ./src
RUN mvn package
## 런타임 단계
FROM openjdk:11-jre-slim
COPY --from=build /app/target/app.jar /application.jar
ENTRYPOINT ["java", "-jar", "/application.jar"]
Docker 컨테이너는 운영 수명주기 동안 여러 상태를 거치며, 유연한 관리 및 배포 기능을 제공합니다.
| 명령어 | 동작 | 설명 |
|---|---|---|
| docker create | 초기화 | 컨테이너를 시작하지 않고 생성 |
| docker start | 시작 | 중지된 컨테이너를 시작 |
| docker run | 인스턴스화 | 컨테이너를 생성하고 즉시 시작 |
| docker stop | 종료 | 실행 중인 컨테이너를 정상적으로 종료 |
| docker pause | 일시 중지 | 컨테이너 프로세스를 일시 중지 |
| docker unpause | 재개 | 일시 중지된 컨테이너를 재개 |
| docker rm | 제거 | 컨테이너를 영구적으로 삭제 |
## nginx 컨테이너 생성
docker create --name web-server nginx:latest
## 컨테이너 시작
docker start web-server
## 대화형 컨테이너 실행
docker run -it ubuntu:22.04 /bin/bash
## 실행 중인 컨테이너 종료
docker stop web-server
## 중지된 컨테이너 제거
docker rm web-server
## 여러 컨테이너 인스턴스 생성
docker run -d --name web1 nginx:latest
docker run -d --name web2 nginx:latest
docker run -d --name web3 nginx:latest
## 실행 중인 컨테이너 목록
docker ps
## 컨테이너 세부 정보 확인
docker inspect web1
## 컨테이너 리소스 제한
docker run -d \
--name limited-container \
--cpus="0.5" \
--memory="512m" \
nginx:latest
## 컨테이너 성능 모니터링
docker stats limited-container
## 다중 컨테이너 관리를 위한 docker-compose 사용
version: '3'
services:
web:
image: nginx:latest
deploy:
replicas: 3
restart_policy:
condition: on-failure
## 사용자 정의 네트워크 생성
docker network create mynetwork
## 특정 네트워크에서 컨테이너 실행
docker run -d --name app --network mynetwork nginx:latest
Docker 는 소프트웨어 개발 및 배포 방식을 혁신적으로 바꾸는 기술입니다. 다양한 컴퓨팅 플랫폼에서 가볍고, 휴대 가능하며, 일관된 환경을 제공합니다. Docker 기본 원리를 숙달함으로써 개발자는 애플리케이션 패키징을 간소화하고, 확장성을 개선하며, 컨테이너 기술을 통해 시스템 전반의 효율성을 높일 수 있습니다.