반응형

1. 도입 및 목적
- 애플리케이션(웹 서버, DB, 에이전트 등)을 OS와 격리된 환경에서 쉽고 빠르게 실행하기 위함.
- venv가 파이썬 환경만 격리한다면, Docker는 OS 커널 레벨에서 애플리케이션 실행에 필요한 모든 파일(라이브러리, 의존성 등)을 이미지로 만들어 격리함.
- 서버 이전이나 확장 시 환경 설정의 번거로움을 원천 차단하는 것이 핵심 목표.
2. 아키텍처 비교 (Hypervisor vs Container)
나중에 헷갈리지 않게 가상화 방식의 차이점을 텍스트 아트로 정리해 둠. Docker가 왜 가벼운지 직관적으로 파악 가능.
Plaintext
[Virtual Machine (VM)] [Container (Docker)]
│ │
├─ [App 1] [App 2] (애플리케이션) ├─ [App 1] [App 2] (컨테이너)
├─ [Guest OS] (무거움, 커널 포함) ├─ [Bin/Lib] (앱 실행에 필요한 파일만)
├─ [Hypervisor] (ESXi, KVM 등) ├─ [Docker Engine] (가벼움)
│ │
└─ [Host OS / Hardware] └─ [Host OS (Kernel 공유) / Hardware]
3. Docker 엔진 설치 로그 (Ubuntu 공식 저장소 활용)
우분투 기본 리포지토리가 아닌, Docker 공식 리포지토리를 등록해서 최신 버전을 설치하는 것이 정석임.
■ 사전 필수 패키지 설치 HTTPS를 통해 리포지토리를 안전하게 가져오기 위한 도구들.
Bash
sudo apt update
sudo apt install ca-certificates curl gnupg lsb-release -y
■ Docker 공식 GPG 키 등록 다운로드하는 패키지의 무결성을 검증하기 위한 키.
Bash
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
■ Docker 리포지토리 등록
Bash
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 엔진 설치 및 확인
Bash
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
# 서비스 상태 확인
sudo systemctl status docker
4. 사후 설정 (사용자 권한 부여)
매번 sudo docker라고 치기 귀찮으므로, 내 계정을 docker 그룹에 추가함. (보안상 주의가 필요하지만 개인 서버에서는 편의를 위해 흔히 사용함.)
Bash
# 내 계정을 docker 그룹에 추가
sudo usermod -aG docker $USER
# 설정 반영 (로그아웃 후 다시 로그인하거나 아래 명령 실행)
newgrp docker
5. Docker 컨테이너 실행 테스트 (HelloWorld)
가장 간단한 이미지인 hello-world를 띄워 정상 작동 확인.
Bash
docker run hello-world
[테스트 결과 확인] 터미널에 "Hello from Docker!" 메시지가 출력되면 성공. Docker가 자동으로 이미지를 다운로드(Pull)하고 컨테이너를 실행(Run)한 것임.
6. 트러블슈팅 및 메모 (Troubleshooting)
Q1. docker run 시 "permission denied" 에러 발생
- 원인: 계정을 docker 그룹에 추가한 후 세션이 갱신되지 않았기 때문임.
- 해결: newgrp docker 명령을 실행하거나, 터미널을 완전히 종료 후 다시 접속할 것. 최악의 경우 서버 재부팅.
Q2. Docker 컨테이너와 venv 파이썬의 차이점 정리
- venv: 호스트 OS의 파이썬을 빌려 쓰며, 라이브러리 폴더만 격리. 웹 서버(Nginx)나 DB(MSSQL) 같은 시스템 레벨의 의존성은 격리 못 함.
- Docker: 애플리케이션 실행에 필요한 작은 OS 환경(Alpine 등) 자체를 이미지에 포함하여 완벽히 격리. 웹 서버, DB 등 무엇이든 컨테이너화 가능.
7. 관련 기록 (Cross-References)
- [Linux 필수 패키지 관리(APT) 및 진단 도구 설치]: htop 등으로 Docker 엔진의 리소스 점유율 확인 시 참고.
- [Windows Server 2022 MSSQL Express 설치]: 나중에 이 MSSQL도 Docker 컨테이너로 띄워서 운영할 수 있음.
반응형
'Server Story....' 카테고리의 다른 글
| Docker-Compose: 복잡한 서버 설정을 코드 한 줄로 관리하기 (0) | 2026.04.01 |
|---|---|
| Ubuntu Server - Nginx 컨테이너 HTTPS(SSL) 적용 및 Let's Encrypt 자동 갱신 (0) | 2026.03.31 |
| Ubuntu 24.04 파이썬 가상환경(venv) 완벽 세팅 및 백그라운드 서비스 구축 기록 (0) | 2026.03.30 |
| Ubuntu Server - 필수 패키지 관리(APT) 및 진단 도구 설치 (0) | 2026.03.30 |
| Linux 입성: Ubuntu Server 24.04 LTS 설치 및 초기 SSH 설정 (0) | 2026.03.30 |