Cloud Architect/Docker

Chapter 10. Docker compose 활용

"Everything about infra" 2025. 12. 3. 20:19

안녕하세요 벌써 챕터 10장입니다.

오늘은 WEB을 쉽게 커스터마이징 해서 사용할 수 있는

'WordPress' 라는 도구가 있는데요

 

이 도구를 직접 사용하진 않을거고, 이 wordpress + db를 사용하여 2-tier 구성을 해볼 예정입니다.

물론! 기본적 방법 + docker compse를 이용하는 방법 두가지요!

WordPress + DB 구성 설명

2-tier 구조란?

 

먼저 2-tier 아키텍처는 웹 애플리케이션을 두 개의 계층으로 나누어 구성하는 방식입니다.

즉, Frontend(웹 서버)와 Backend(DB 서버) 두 계층으로 나누는 구조.

 

Tier 1: Web/Application Layer

  • WordPress가 실행되는 계층입니다.
  • PHP 기반으로 동작하며, 사용자 요청을 처리하고 HTML을 렌더링합니다.
  • DB와 연결해 콘텐츠를 가져오고, 사용자에게 보여줍니다.
  • 컨테이너 예: wordpress:5.7

Tier 2: Database Layer

  • MySQL이 실행되는 계층입니다.
  • WordPress의 모든 데이터(게시글, 사용자 정보, 설정 등)를 저장합니다.
  • 컨테이너 예: mysql:8.0

 동작 방식

  1. 사용자 요청 : 브라우저에서 http://192.168.56.100로 접속→ WordPress 컨테이너가 요청 받음.
  2. WordPress 처리 : PHP 코드가 실행되고 필요한 데이터를 DB에서 가져오기 위해 MySQL에 쿼리 요청
  3. MySQL 응답 : DB에서 데이터 조회 이후에 WordPress 컨테이너에 전달.
  4. WordPress 렌더링 : 받은 데이터를 HTML로 전환하여 사용자에게 응답해줌.

Docker CLI로 컨테이너 빌드

1) MySQL 컨테이너 생성

  • 컨테이너 생성 시 환경변수를 사용하여 DB에 접근할 수 있도록 username, password, db name 등 설정.
docker run -itd --name mysql_app \
  -v ssunghwan-data:/var/lib/mysql \
  --restart=always \
  -p 3306:3306 \
  --net mydb-net \
  -e MYSQL_ROOT_PASSWORD='password123#' \
  -e MYSQL_DATABASE=mydb \
  -e MYSQL_USER=ssunghwan \
  -e MYSQL_PASSWORD='password123#' \
  mysql:8.0

 

2) WordPress 컨테이너 생성

  • 브라우저에서 웹에 접근 시 DB에 대한 정보를 읽어오지 못하면(연동이 안되있으면) 에러가 뜨므로 DB정보 입력.
docker run -itd --name wp_app \
  -v ssunghwan-data:/var/www/html \
  -v $(pwd)/myweb-log:/var/log \
  --restart=always \
  -p 8082:80 \
  --net mydb-net \
  -e WORDPRESS_DB_HOST=mysql_app:3306 \
  -e WORDPRESS_DB_NAME=mydb \
  -e WORDPRESS_DB_USER=ssunghwan \
  -e WORDPRESS_DB_PASSWORD='password123#' \
  --link mysql_app:mysql \
  wordpress:5.7

 

3) 컨테이너가 잘 생성되었는지 확인

 

4) 데이터 베이스 접근해보기

 


WordPress 설정 & DB 확인

1) 초기 화면 설정

  • 웹 브라우저에서 서버IP:8082 입력 시 하기와 같은 화면이 뜨고, 설정해주면 됩니다.

 

2) WordPress 로그인 시 관리자 화면이 하기와 같이 표기된다.

 

3) 설정 후 데이터베이스 테이블 확인

 


Docker compose 활용

docker compose 란?

1) docker compose는 기본적으로 docker 엔진을 설치할때 기본적으로 설치된다.
2) 'docker compose version'을 입력할 시 설치된 버전이 명시되어 출력이됩니다.

 

docker compose는 여러 컨테이너를 하나의 스택으로 정의하고 관리할 수 있는 도구입니다!

방금 처럼 Docker CLI로 wordpress + db 구성을 구현할때 compose 라는 도구로 유용하게 구현이 가능합니다.

 

📌 목적

  • 여러 Docker Container를 하나의 YAML 파일로 정의하고 'docker-compose up' 명령으로 한번에 실행.

📌 장점

  • 서비스 간 네트워크 자동 생성
    • 서비스 이름으로 컨테이너 간 DNS 서비스 이름으로 접근 가능 → IP 관리 불필요.
  • 환경변수, 포트맵핑, 볼륨 등을 YAML로 관리 → 유지보수 Good
  • 동일한 스택을 다른 서버에서도 쉽게 배포가 가능하다 → 재사용성 Good
  • 'docker-compose scale wordpress=3' 명령 등으로, 컨테이너 확장 가능 확장성 Good

📌 단점

  • 단일 호스트 제한.
    • 기본적으로 Compose는 단일 서버에서만 동작한다.
    • 즉, 멀티 노드 클러스터(Kubernetes 수준의 오케스트레이션)는 지원하지 않는다.
    • 대규모 서비스 확장에서는 적합하지 않다.
  • Production 환경에서의 제약
    • Compose는 주로 개발(Dev), 테스팅(Staging)환경에 최적화 되어있다.
      • 개발자는 여러 컨테이너(DB, WEB, Cache 등)를 자주 띄워야 한다 → 빠른 구성
      • 동일한 YAML로 팀원들과 공유하여 같은 환경에서 쉽게 재현 → 빠른 재현
      • Swarm은 Compose에 비해 설정이 복잡하고 리소스가 크다 → 경량성.
    • Production 에서는 주로 Docker Swarm을 많이 사용한다.
  • 리소스 관리 부족
    • Compose는 CPU, Memory 등 제한 설정을 할 수 있지만 자동 스케일링 및 고가용성은 지원하지 않는다.

이러한 단점들을 보완한게 나중에는 Kubernetes가 등장하겠죠 ?^^


 

 docker compose 띄워보기

 

1) YAML 파일 작성

  • 파일 명은 docker-compose.yml로 작성한다.
services:
  mydb:
    image: mysql:8.0
    container_name: mysql_app_new
    volumes:
      - ssunghwan-backend:/var/lib/mysql
    restart: always
    ports:
      - "3306:3306"
    networks:
      - backend-net
    environment:
      MYSQL_ROOT_PASSWORD: password123#
      MYSQL_DATABASE: mydb
      MYSQL_USER: ssunghwan
      MYSQL_PASSWORD: password123#
  myweb:
    depends_on:
      - mydb
    image: wordpress:5.7
    container_name: wp_app_new
    ports:
      - "8082:80"
    # backend-net으로 mydb 서비스와 동일 네트워크로 지정하고,
    # 외부 연결을 위한 네트워크를 위해 fronetend-net 지정을 가정한다.
    networks:
      - backend-net
      - frontend-net
    volumes:
      - ssunghwan-frontend:/var/www/html
      - ./mycompose-log:/var/log \
    restart: always
    environment:
      WORDPRESS_DB_HOST: mysql_app_new:3306
      WORDPRESS_DB_USER: ssunghwan
      WORDPRESS_DB_PASSWORD: password123#
      WORDPRESS_DB_NAME: mydb

# 도커 컴포즈 애플리케이션이 사용할 네트워크 생성. docker network create와 동일하다.
networks:
  frontend-net: {}
  backend-net: {}

# 도커 컴포즈 애플리케이션이 사용할 볼륨 생성. docker volume create와 동일하다.
volumes:
  ssunghwan-frontend: {}
  ssunghwan-backend: {}

 

2) docker compose 실행

  • 처음 실습하시는 분들은 포그라운드 형태로 실행하여 로그를 같이 확인하세요. 'docker compose up'
  • 아래와 같이 실행되는 로그들을 확인할 수 있으며, 백그라운드로 실행 시 'docker compse up -d'

 

3) docker compose process 확인

 

4) 워드프레스 관리자 페이지 설정

 

5) 데이터 베이스 확인


 

확실히 docker compose를 활용해서 yaml 파일로 한번에 컨테이너 여러개를 실행시킬 수 있고

관리하고 개발, 테스팅 환경에서는 유용하게 사용할 수 있을 것 같습니다.

 

감사합니다!