일본 서버호스팅에 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으로 문의해 주세요.