Docker / Podman
이 문서에서는 Ubuntu 26.04에 Docker 및 Podman 컨테이너 기술을 설치하고 사용하는 방법을 다룹니다.
Docker CE 설치
이전 버전 제거
sudo apt remove docker docker-engine docker.io containerd runc 2>/dev/nullDocker CE 설치
# Install dependencies
sudo apt update
sudo apt install ca-certificates curl gnupg -y
# Add Docker official GPG key
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
# Add Docker repository
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# Install Docker
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -ysudo 없이 Docker 사용
# Add current user to the docker group
sudo usermod -aG docker $USER
# Apply group changes (or log out and back in)
newgrp docker설치 확인
docker --version
docker compose version
docker run hello-worldDocker 미러 구성(중국)
/etc/docker/daemon.json 편집:
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<EOF
{
"registry-mirrors": [
"https://docker.1ms.run",
"https://docker.xuanyuan.me"
]
}
EOF
# Restart Docker
sudo systemctl daemon-reload
sudo systemctl restart dockerDocker 기본 사항
이미지 작업
# Pull an image
docker pull ubuntu:26.04
docker pull nginx:latest
# List local images
docker images
# Remove an image
docker rmi nginx:latest
# Build an image
docker build -t myapp:latest .
# Clean up unused images
docker image prune -a컨테이너 운영
# Run a container
docker run -d --name mynginx -p 8080:80 nginx
# List running containers
docker ps
# List all containers
docker ps -a
# Enter a container
docker exec -it mynginx bash
# View container logs
docker logs -f mynginx
# Stop and remove a container
docker stop mynginx
docker rm mynginx
# Clean up all stopped containers
docker container prune볼륨
# Create a volume
docker volume create mydata
# Mount a volume
docker run -d -v mydata:/data --name mycontainer ubuntu
# Mount a host directory
docker run -d -v /home/user/data:/data --name mycontainer ubuntu
# List volumes
docker volume ls
docker volume inspect mydataDocker 작성
Docker Compose는 다중 컨테이너 애플리케이션을 정의하고 실행하는 데 사용됩니다.
예: 웹앱 + 데이터베이스
compose.yaml 생성:
services:
web:
image: nginx:latest
ports:
- "8080:80"
volumes:
- ./html:/usr/share/nginx/html
depends_on:
- db
db:
image: postgres:18
environment:
POSTGRES_DB: mydb
POSTGRES_USER: admin
POSTGRES_PASSWORD: secret
volumes:
- pgdata:/var/lib/postgresql/data
ports:
- "5432:5432"
redis:
image: redis:7-alpine
ports:
- "6379:6379"
volumes:
pgdata:일반적인 작성 명령
# Start all services
docker compose up -d
# Check service status
docker compose ps
# View logs
docker compose logs -f web
# Stop all services
docker compose down
# Stop and remove volumes
docker compose down -v
# Rebuild and start
docker compose up -d --buildDocker파일 쓰기
일반적인 다단계 빌드 예:
# Build stage
FROM node:22-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
# Runtime stage
FROM node:22-alpine
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
EXPOSE 3000
CMD ["node", "dist/index.js"]Podman: Docker의 대안
Podman은 Docker CLI와 호환되는 데몬 없는 컨테이너 엔진입니다.
Podman 설치
sudo apt install podman -y설치를 확인합니다.
podman --version
podman infoPodman 기본 사항
Podman 명령은 Docker과 거의 동일합니다.
# Pull and run a container
podman pull docker.io/library/nginx
podman run -d --name mynginx -p 8080:80 nginx
# List containers
podman ps
# Stop and remove
podman stop mynginx
podman rm mynginxPodman과 Docker의 차이점
- 데몬 없음: Podman에는 백그라운드 데몬 프로세스가 필요하지 않습니다.
- 루트리스: Podman은 기본적으로 일반 사용자로 컨테이너를 실행하여 더 나은 보안을 제공합니다.
- Pod 지원: Podman은 기본적으로 Pod 개념을 지원합니다(Kubernetes Pod와 유사).
- 호환성: Docker 명령의 대부분은 Podman로 직접 대체될 수 있습니다.
Docker 호환성 별칭 설정
echo 'alias docker=podman' >> ~/.bashrc
source ~/.bashrcPodman 작성
# Install podman-compose (prefer apt or pipx to avoid the PEP 668 restriction)
sudo apt install -y podman-compose
# Or: sudo apt install -y pipx && pipx install podman-compose
# Usage is the same as docker compose
podman-compose up -d
podman-compose downDocker 시스템 유지 관리
# Check disk usage
docker system df
# Full cleanup (use with caution)
docker system prune -a --volumes
# Check Docker service status
sudo systemctl status dockerDocker과 Podman은 각각 장점이 있습니다. Docker는 더 성숙한 생태계를 가지고 있는 반면, Podman은 더 나은 보안을 제공하고 데몬이 필요하지 않습니다. 필요에 따라 선택하세요.
FAQ
Docker 또는 Podman을 선택해야 합니까?
초보자이거나 팀과 협력해야 하는 경우 더 성숙한 생태계, 풍부한 문서 및 광범위한 커뮤니티 지원을 제공하는 Docker을 권장합니다. 보안을 우선시하거나 루트 권한이 없는 환경에서 작업하는 경우 데몬이 필요하지 않고 기본적으로 루트가 아닌 사용자로 실행되므로 Podman이 더 나은 선택입니다.
Docker의 Snap 버전을 사용할 수 있나요?
Ubuntu 저장소의 docker.io 패키지와 Docker의 Snap 버전을 사용할 수 있지만 일반적으로 공식 Docker CE 버전보다 뒤떨어지고 호환성 문제가 있을 수 있습니다. 최신 버전과 최상의 호환성을 위해 이 문서에 설명된 대로 공식 Docker 저장소에서 Docker CE를 설치하는 것이 좋습니다.
Docker을 사용하려면 sudo가 필요합니까?
기본적으로 Docker 명령을 실행하려면 sudo 권한이 필요합니다. docker 그룹에 사용자를 추가한 후 sudo 없이 Docker을 사용할 수 있습니다(sudo usermod -aG docker $USER을 실행한 다음 로그아웃했다가 다시 로그인). docker 그룹에 속한다는 것은 루트 권한을 갖는 것과 동일하므로 다중 사용자 환경에서는 주의해야 합니다.
관련 기사
- Docker Compose Service Orchestration - 서버 환경에서 Docker Compose를 사용하여 다중 컨테이너 애플리케이션 배포
- 가상 머신 및 컨테이너 — VM과 컨테이너 기술을 비교하여 각각의 사용 사례 이해