소개
이 튜토리얼은 Docker Compose 를 사용하는 방법에 대한 포괄적인 가이드를 제공하며, "docker: 'compose' is not a docker command" 오류를 해결하는 데 중점을 둡니다. Docker Compose 를 설치 및 구성하고, 다중 컨테이너 애플리케이션을 구축 및 관리하며, 효과적인 Docker Compose 사용을 위한 최선의 사례를 살펴볼 것입니다.
Docker 기본 개념
Docker 컨테이너화 소개
Docker 는 애플리케이션 배포 및 개발을 혁신하는 강력한 컨테이너 기술입니다. 컨테이너 기술을 통해 개발자는 애플리케이션과 모든 종속성을 패키징하여 다양한 컴퓨팅 환경에서 일관적인 성능을 보장할 수 있습니다.
Docker 의 핵심 개념
Docker 란 무엇인가요?
Docker 는 애플리케이션 배포, 확장 및 관리를 자동화할 수 있도록 하는 오픈소스 컨테이너화 플랫폼입니다. 컨테이너를 통해 기존 가상 머신에 비해 가벼운 대안을 제공하여 격리된 환경을 생성합니다.
Docker 의 주요 구성 요소
| 구성 요소 | 설명 |
|---|---|
| Docker Engine | 컨테이너 생성 및 실행을 위한 핵심 런타임 환경 |
| Docker Image | 애플리케이션 코드와 종속성이 포함된 읽기 전용 템플릿 |
| Docker Container | Docker 이미지의 실행 가능한 인스턴스 |
| Dockerfile | 컨테이너 빌드 지침을 정의하는 텍스트 파일 |
Docker 아키텍처
graph TD
A[Docker Client] --> B[Docker Daemon]
B --> C[Container Runtime]
B --> D[Image Registry]
D --> E[Docker Hub]
기본 Docker 명령 및 예제
Ubuntu 22.04 에 Docker 설치
## 시스템 패키지 업데이트
sudo apt update
## Docker 종속성 설치
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
## Docker 리포지토리 설정
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 Hub에서 이미지 가져오기
## 사용 가능한 이미지 목록
## 컨테이너 실행
## 실행 중인 컨테이너 목록
## 컨테이너 중지
컨테이너 기술의 이점
Docker 컨테이너화는 다음과 같은 여러 가지 장점을 제공합니다.
- 일관된 애플리케이션 환경
- 더 빠른 배포 및 확장
- 감소된 리소스 소비
- 개선된 개발 워크플로우
- 플랫폼 독립성
Docker 컨테이너의 활용 사례
Docker 는 다음과 같은 분야에서 널리 사용됩니다.
- 마이크로서비스 아키텍처
- 지속적 통합/지속적 배포 (CI/CD)
- 클라우드 네이티브 애플리케이션 개발
- 개발 및 테스트 환경
Docker Compose 워크플로우
Docker Compose 이해
Docker Compose 는 다중 컨테이너 Docker 애플리케이션을 정의하고 실행하는 도구입니다. YAML 파일을 사용하여 애플리케이션 서비스, 네트워크 및 볼륨을 구성할 수 있으므로 복잡한 컨테이너화된 환경을 관리하는 프로세스를 단순화합니다.
Docker Compose 아키텍처
graph TD
A[Docker Compose] --> B[docker-compose.yml]
B --> C[Service 1]
B --> D[Service 2]
B --> E[Service 3]
C --> F[Network]
D --> F
E --> F
Docker Compose 구성
YAML 파일 구조
| 키 | 설명 |
|---|---|
| version | Compose 파일 형식 버전 |
| services | 개별 컨테이너 정의 |
| networks | 컨테이너 네트워킹 구성 |
| volumes | 지속적인 데이터 저장소 관리 |
실제 예제: 웹 애플리케이션 배포
샘플 docker-compose.yml
version: "3.8"
services:
web:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./website:/usr/share/nginx/html
database:
image: postgres:13
environment:
POSTGRES_PASSWORD: secretpassword
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
postgres_data:
Docker Compose 명령어
## Ubuntu 22.04에 Docker Compose 설치
sudo apt update
sudo apt install docker-compose
## compose 파일 유효성 검사
docker-compose config
## 다중 컨테이너 애플리케이션 시작
docker-compose up -d
## 실행 중인 컨테이너 보기
docker-compose ps
## 컨테이너 중지 및 제거
docker-compose down
서비스 조직 기술
Docker Compose 는 고급 서비스 조직을 가능하게 합니다.
- 컨테이너 간 종속성 정의
- 환경 변수 관리
- 네트워크 연결 구성
- 컨테이너 시작 순서 제어
확장성 및 유연성
다중 컨테이너 애플리케이션은 다음과 같은 이점을 얻습니다.
- 모듈형 아키텍처
- 쉬운 수평 확장
- 단순화된 구성 관리
- 일관된 개발 환경
Docker 고급 기술
Docker 네트워크 구성
네트워크 유형
| 네트워크 모드 | 설명 |
|---|---|
| Bridge | 기본 네트워크 모드 |
| Host | 호스트 네트워크 직접 사용 |
| Overlay | 다중 호스트 통신 |
| Macvlan | MAC 주소 할당 |
graph TD
A[Docker Network] --> B[Bridge Network]
A --> C[Host Network]
A --> D[Overlay Network]
A --> E[Macvlan Network]
사용자 정의 네트워크 생성
## 사용자 정의 브리지 네트워크 생성
docker network create --driver bridge custom_network
## 네트워크 목록
docker network ls
## 네트워크 세부 정보 확인
docker network inspect custom_network
컨테이너 리소스 관리
리소스 제약
services:
webapp:
image: nginx
deploy:
resources:
limits:
cpus: "0.50"
memory: 512M
reservations:
cpus: "0.25"
memory: 256M
Docker 볼륨 관리
## 이름이 지정된 볼륨 생성
docker volume create app_data
## 컨테이너에 볼륨 마운트
docker run -v app_data:/app/data nginx
## 볼륨 목록
docker volume ls
## 사용되지 않는 볼륨 제거
docker volume prune
Dockerfile 최적화
## 다단계 빌드 예제
FROM golang:1.17 AS builder
WORKDIR /app
COPY . .
RUN go build -o myapp
FROM alpine:latest
COPY --from=builder /app/myapp /usr/local/bin
ENTRYPOINT ["myapp"]
고급 문제 해결
## 컨테이너 로그 검사
## 실시간 리소스 모니터링
## 컨테이너 프로세스 세부 정보
보안 강화
런타임 보안 옵션
## 읽기 전용 파일 시스템으로 컨테이너 실행
docker run --read-only nginx
## 컨테이너 기능 제한
docker run --cap-drop ALL --cap-add NET_BIND_SERVICE nginx
성능 모니터링
## 시스템 전체 Docker 정보
docker system info
## 디스크 사용량 분석
docker system df
## 사용되지 않는 리소스 제거
docker system prune -a
요약
이 튜토리얼을 마치면 Docker Compose 에 대한 심층적인 이해와 "docker: 'compose' is not a docker command" 오류를 해결하는 방법을 익히게 됩니다. 최적의 성능과 유지 관리를 위한 업계 표준의 최선의 방법을 따르면서 Docker Compose 애플리케이션을 설정, 관리 및 확장할 수 있게 될 것입니다.



