본문 바로가기

Server Story....

Docker-Compose: 복잡한 서버 설정을 코드 한 줄로 관리하기

반응형

복잡한 서버 설정을 코드 한 줄로 관리


1. 도입 및 배경

  • 지금까지 docker run 명령어를 일일이 입력하며 Nginx나 Certbot을 띄웠음.
  • 명령어가 길어질수록 오타 위험이 크고, 서버 재부팅 시 수동으로 다시 올리는 번거로움이 발생함.
  • Docker-Compose는 여러 컨테이너(웹 서버, DB, 자동화 에이전트 등)의 설정을 yaml 파일 하나에 정의하여 **'인프라의 코드화(IaC)'**를 실현함.

2. 가상 시나리오: 다중 컨테이너 운영 구조도

우리가 구축할 시스템은 단순히 웹 서버 하나가 아닙니다. 아래와 같이 유기적으로 연결된 구조를 갖게 됩니다.

  • Nginx: 외부 손님을 맞는 대문 (SSL 보안 적용)
  • Blogger Agent: 사용자님이 만든 파이썬 기반 자동 포스팅 엔진
  • Redis/DB: 포스팅 상태나 데이터를 임시 저장하는 창고

3. 실전 설정: docker-compose.yml 작성 로그

서버 운영상의 편의를 위해 모든 설정을 한곳에 모았습니다.

YAML
 
version: '3.8'

services:
  # 1. 웹 서버 (Nginx)
  proxy:
    image: nginx:latest
    container_name: nginx_service
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx/conf:/etc/nginx/conf.d
      - ./certbot/conf:/etc/letsencrypt
    restart: always

  # 2. 자동화 에이전트 (Python)
  blogger-agent:
    build: ./agent_code
    container_name: blogger_bot
    env_file: .env  # API 키 등 보안 데이터 격리
    depends_on:
      - proxy
    restart: on-failure

4. 운영상의 문제와 해결 (Troubleshooting)

■ 문제 1: 서버 재부팅 후 컨테이너가 안 뜸

  • 증상: 리눅스 서버가 업데이트 등으로 재시작되면 수동으로 docker run을 다시 해야 함.
  • 해결: Compose 파일에 restart: always 옵션을 부여하여 도커 데몬이 실행될 때 자동으로 컨테이너를 복구하도록 설정.

■ 문제 2: 컨테이너 간 통신 불량

  • 증상: 에이전트가 Nginx를 통해 외부로 나가려 할 때 주소를 못 찾음.
  • 해결: Docker-Compose는 내부적으로 **'기본 네트워크'**를 생성함. 컨테이너 이름을 호스트 이름처럼 사용하여 내부 통신 가능(예: http://proxy).

5. 실전 명령어 치트시트 (Cheat Sheet)

이제 길고 긴 docker run 대신 이 3가지만 기억하면 됩니다.

명령어 역할 비고
docker-compose up -d 모든 서비스 백그라운드 실행 설정을 읽어 한 번에 기동
docker-compose logs -f 전체 서비스 로그 실시간 모니터링 에러 진단의 핵심
docker-compose down 모든 서비스 정지 및 네트워크 삭제 깔끔한 정리

💡 리눅스 서버 운영자의 한마디

오늘 우리가 네이버와 구글에 블로그를 등록한 행위가 **'영업 개시'**라면, Docker-Compose 설정은 **'무인 점포 시스템'**을 구축한 것과 같습니다. 이제 관리자가 일일이 명령어를 치지 않아도 서버가 알아서 서비스를 유지하고 복구합니다.

반응형