소개
Docker 는 컨테이너화를 위한 강력한 플랫폼을 제공하여 소프트웨어 개발을 혁신했습니다. 이 튜토리얼은 첫 번째 Docker 이미지를 배포하는 필수 단계를 안내하여 개발자 및 IT 전문가가 Docker 컨테이너의 기본 개념과 실제 구현을 이해하는 데 도움을 줄 것입니다.
Docker 기본 개념
Docker 란 무엇인가?
Docker 는 컨테이너화 기술을 사용하여 애플리케이션의 배포, 확장 및 관리를 자동화하는 오픈소스 플랫폼입니다. 개발자는 모든 종속성을 포함한 애플리케이션을 표준화된 단위인 컨테이너에 패키징할 수 있습니다.
주요 Docker 개념
컨테이너
컨테이너는 애플리케이션 실행에 필요한 모든 것을 포함하는 경량의 독립 실행형 실행 패키지입니다. 코드, 런타임, 시스템 도구, 라이브러리 및 설정이 포함됩니다.
graph TD
A[애플리케이션 코드] --> B[컨테이너]
C[종속성] --> B
D[시스템 라이브러리] --> B
E[런타임 환경] --> B
Docker 이미지
Docker 이미지는 컨테이너를 생성하는 데 사용되는 읽기 전용 템플릿입니다. 컨테이너 생성의 기반이 되며 Docker Hub 와 같은 레지스트리에 저장될 수 있습니다.
Docker 아키텍처
| 구성 요소 | 설명 |
|---|---|
| Docker 클라이언트 | Docker 와 상호 작용하기 위한 명령줄 인터페이스 |
| Docker 데몬 | Docker 객체를 관리하는 백그라운드 서비스 |
| Docker 레지스트리 | Docker 이미지를 저장하고 배포하는 시스템 |
Docker 사용 이유
- 다양한 환경에서의 일관성 유지
- 경량 및 빠른 배포
- 쉬운 확장성
- 개선된 리소스 활용
- 간소화된 구성 관리
Ubuntu 22.04 에서 Docker 설치
Ubuntu 에 Docker 를 설치하려면 다음 명령어를 사용합니다.
## 패키지 인덱스 업데이트
sudo apt update
## 종속성 설치
sudo apt install apt-transport-https ca-certificates curl software-properties-common
## Docker 공식 GPG 키 추가
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
## 안정적인 리포지토리 설정
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
## Docker 엔진 설치
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io
Docker 설치 확인
설치 후 Docker 가 정상적으로 작동하는지 확인합니다.
## Docker 버전 확인
docker --version
## hello-world 컨테이너 실행
sudo docker run hello-world
Docker 워크플로우
graph LR
A[개발] --> B[이미지 빌드]
B --> C[레지스트리에 푸시]
C --> D[이미지 풀]
D --> E[컨테이너 실행]
LabEx 시작하기
LabEx 는 개발자가 컨테이너화 기술을 더 효과적으로 연습하고 이해하는 데 도움이 되는 대화형 Docker 학습 환경을 제공합니다.
환경 설정
시스템 요구 사항
Docker 환경을 설정하기 전에 다음 요구 사항을 충족하는지 확인하십시오.
| 요구 사항 | 사양 |
|---|---|
| 운영 체제 | Ubuntu 22.04 LTS |
| CPU | 64 비트 프로세서 |
| RAM | 최소 4GB |
| 저장 공간 | 20GB 이상의 디스크 공간 |
시스템 준비
시스템 패키지 업데이트
sudo apt update
sudo apt upgrade -y
필요한 종속성 설치
sudo apt install -y \
ca-certificates \
curl \
gnupg \
lsb-release \
software-properties-common
Docker 설치 방법
graph LR
A[Docker 설치] --> B[리포지토리 설치]
A --> C[수동 패키지 설치]
A --> D[스크립트 기반 설치]
리포지토리 설치 (권장)
Docker 공식 GPG 키 추가
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
리포지토리 설정
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 패키지 설치
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
설치 후 구성
사용자를 Docker 그룹에 추가
sudo usermod -aG docker $USER
부팅 시 Docker 자동 시작 설정
sudo systemctl enable docker
sudo systemctl start docker
설치 확인
Docker 버전 확인
docker --version
docker compose version
Hello World 컨테이너 실행
sudo docker run hello-world
Docker Compose 설정
Docker Compose 설치
sudo apt install docker-compose
권장 도구
| 도구 | 용도 |
|---|---|
| Docker Desktop | Docker 관리 GUI |
| Visual Studio Code | Docker 확장 프로그램이 있는 IDE |
| Docker Hub | 컨테이너 이미지 레포지토리 |
LabEx 환경 권장 사항
LabEx 는 설정 및 학습을 간소화하는 사전 구성된 Docker 환경을 제공하여 초보자가 컨테이너화 기술을 시작하기 쉽게 합니다.
일반적인 설치 문제 해결
잠재적인 문제
- 호환되지 않는 시스템 아키텍처
- 오래된 시스템 패키지
- 권한 부족
- 네트워크 연결 문제
권장 해결 방법
- 시스템이 최소 요구 사항을 충족하는지 확인
- 시스템 패키지를 정기적으로 업데이트
- 인터넷 연결을 확인
- 사용자 권한을 확인
- 공식 Docker 문서를 참고
첫 번째 컨테이너 배포
컨테이너 배포 이해
컨테이너 배포 워크플로우
graph LR
A[이미지 선택] --> B[이미지 가져오기]
B --> C[컨테이너 생성]
C --> D[컨테이너 시작]
D --> E[컨테이너 관리]
Docker 이미지 가져오기
공식 Docker Hub 이미지
## Ubuntu 이미지 가져오기
docker pull ubuntu:latest
## Nginx 웹 서버 이미지 가져오기
docker pull nginx:latest
## Python 개발 이미지 가져오기
docker pull python:3.9
첫 번째 컨테이너 실행
기본 컨테이너 실행
## Ubuntu 컨테이너 실행
docker run -it ubuntu:latest /bin/bash
## Nginx 웹 서버 실행
docker run -d -p 8080:80 nginx:latest
## Python 대화형 컨테이너 실행
docker run -it python:3.9 python
컨테이너 관리 명령어
| 명령어 | 설명 |
|---|---|
docker ps |
실행 중인 컨테이너 목록 |
docker ps -a |
모든 컨테이너 목록 |
docker start <컨테이너_ID> |
중지된 컨테이너 시작 |
docker stop <컨테이너_ID> |
실행 중인 컨테이너 중지 |
docker rm <컨테이너_ID> |
컨테이너 제거 |
사용자 정의 컨테이너 생성
Dockerfile 예제
## 공식 Python 기반 이미지 사용
FROM python:3.9
## 작업 디렉토리 설정
WORKDIR /app
## 애플리케이션 파일 복사
COPY . /app
## 종속성 설치
RUN pip install flask
## 포트 노출
EXPOSE 5000
## 시작 명령 정의
CMD ["python", "app.py"]
사용자 정의 이미지 빌드 및 실행
## Docker 이미지 빌드
docker build -t myapp:v1 .
## 사용자 정의 컨테이너 실행
docker run -p 5000:5000 myapp:v1
컨테이너 네트워킹
graph TD
A[컨테이너] -->|포트 매핑| B[호스트 네트워크]
B -->|서비스 노출| C[외부 접근]
포트 매핑 예제
## 컨테이너 포트 80을 호스트 포트 8080으로 매핑
docker run -d -p 8080:80 nginx:latest
컨테이너 볼륨
볼륨 관리
## 이름이 지정된 볼륨 생성
docker volume create mydata
## 컨테이너에 볼륨 마운트
docker run -v mydata:/data ubuntu:latest
권장 사항
- 공식 이미지 사용
- 이미지 크기 최소화
- 다단계 빌드 구현
- 특정 이미지 태그 사용
- 루트 사용자로 컨테이너 실행하지 않기
컨테이너 모니터링
## 컨테이너 로그 보기
## 리소스 사용량 모니터링
## 컨테이너 세부 정보 확인
LabEx 학습 환경
LabEx 는 개발자가 실습 중심의 안내 환경에서 컨테이너 배포 기술을 연습할 수 있도록 대화형 Docker 실습 환경을 제공합니다.
고급 배포 기술
| 기술 | 설명 |
|---|---|
| Docker Compose | 멀티 컨테이너 오케스트레이션 |
| Kubernetes | 컨테이너 확장 및 관리 |
| Docker Swarm | 네이티브 Docker 클러스터링 |
요약
이 튜토리얼을 완료함으로써 Docker 컨테이너화에 대한 중요한 통찰력을 얻었으며, Docker 환경을 설정하고 첫 번째 컨테이너를 성공적으로 배포하는 방법을 배웠습니다. 이러한 기본적인 기술은 실제 상황에서 더 복잡한 애플리케이션 배포 및 관리에 Docker 의 기능을 활용할 수 있도록 능력을 향상시킬 것입니다.



