본문 바로가기

Server Story....

Ubuntu Server - Docker 설치 및 컨테이너 기초 환경 구축

반응형

구현 가상 이미지

 


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 컨테이너로 띄워서 운영할 수 있음.
반응형