반응형

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 설정은 **'무인 점포 시스템'**을 구축한 것과 같습니다. 이제 관리자가 일일이 명령어를 치지 않아도 서버가 알아서 서비스를 유지하고 복구합니다.
반응형
'Server Story....' 카테고리의 다른 글
| 리눅스 모니터링 심화: Prometheus & Grafana 컨테이너 구축 (0) | 2026.04.01 |
|---|---|
| 리눅스 보안 심화: Fail2Ban으로 무차별 대입 공격(Brute Force) 차단하기 (0) | 2026.04.01 |
| Ubuntu Server - Nginx 컨테이너 HTTPS(SSL) 적용 및 Let's Encrypt 자동 갱신 (0) | 2026.03.31 |
| Ubuntu Server - Docker 설치 및 컨테이너 기초 환경 구축 (0) | 2026.03.31 |
| Ubuntu 24.04 파이썬 가상환경(venv) 완벽 세팅 및 백그라운드 서비스 구축 기록 (0) | 2026.03.30 |