일본 서버호스팅에 Docker를 활용하면 서비스 배포와 관리가 훨씬 편리해집니다. 컨테이너를 사용하면 개발 환경과 프로덕션 환경의 차이를 최소화하고, 여러 서비스를 하나의 서버에서 격리해 운영할 수 있습니다.
Docker가 일본 서버 운영에 유리한 이유
- 빠른 배포: 이미지 기반 배포로 서비스 교체 시간 단축
- 환경 격리: 여러 서비스가 하나의 서버에서 충돌 없이 공존
- 롤백 용이: 이전 버전 이미지로 즉시 복구
- 리소스 효율: VM보다 가볍게 격리된 환경 제공
1단계: Docker 설치 (Ubuntu 22.04)
# 의존성 설치
apt install ca-certificates curl gnupg -y
# Docker GPG 키 추가
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
gpg --dearmor -o /etc/apt/keyrings/docker.gpg
# Docker 저장소 추가
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | \
tee /etc/apt/sources.list.d/docker.list
# Docker 설치
apt update
apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin -y
# 버전 확인
docker --version
docker compose version
일반 사용자에게 Docker 권한 부여:
usermod -aG docker $USER
2단계: Docker Compose 기본 구성
웹 서비스의 전형적인 구성(Nginx + App + DB + Redis)을 Docker Compose로 정의합니다.
# docker-compose.yml
version: '3.8'
services:
nginx:
image: nginx:alpine
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d
- ./certbot/www:/var/www/certbot
- ./certbot/conf:/etc/letsencrypt
depends_on:
- app
restart: always
app:
build: ./app
environment:
- NODE_ENV=production
- DB_HOST=db
- REDIS_HOST=redis
depends_on:
- db
- redis
restart: always
db:
image: mariadb:10.11
environment:
MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
MYSQL_DATABASE: ${DB_NAME}
MYSQL_USER: ${DB_USER}
MYSQL_PASSWORD: ${DB_PASSWORD}
volumes:
- db_data:/var/lib/mysql
restart: always
redis:
image: redis:7-alpine
restart: always
volumes:
db_data:
환경 변수는 .env 파일에 관리:
DB_ROOT_PASSWORD=강력한패스워드
DB_NAME=myapp
DB_USER=myuser
DB_PASSWORD=사용자패스워드
3단계: 서비스 시작 및 관리
# 백그라운드 실행
docker compose up -d
# 로그 확인
docker compose logs -f
# 서비스 상태
docker compose ps
# 서비스 재시작
docker compose restart app
# 서비스 중지
docker compose down
4단계: SSL 인증서 자동화 (Certbot + Docker)
# docker-compose.yml에 추가
certbot:
image: certbot/certbot
volumes:
- ./certbot/www:/var/www/certbot
- ./certbot/conf:/etc/letsencrypt
entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew; sleep 12h & wait $${!}; done;'"
최초 인증서 발급:
docker compose run --rm certbot certonly --webroot \
-w /var/www/certbot \
-d yourdomain.com
5단계: 컨테이너 이미지 업데이트 (무중단 배포)
# 새 이미지 빌드
docker compose build app
# 롤링 업데이트
docker compose up -d --no-deps app
일본 서버 Docker 운영 팁
로그 크기 제한
services:
app:
logging:
driver: "json-file"
options:
max-size: "100m"
max-file: "3"
자동 재시작
restart: always 설정으로 컨테이너가 크래시되거나 서버가 재부팅되어도 자동으로 시작됩니다.
볼륨 백업
# 데이터베이스 볼륨 백업
docker exec db mysqldump -u root -p myapp | gzip > backup_$(date +%Y%m%d).sql.gz
마치며
일본 서버에 Docker 환경을 구축하면 서비스 관리가 단순해지고 배포 속도가 빨라집니다. Docker 설치 및 설정에 어려움이 있으시면 TCP-80.NET 텔레그램 @tcp80net으로 문의해 주세요.