Chapter 10. Docker compose 활용

안녕하세요 벌써 챕터 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
✅ 동작 방식
- 사용자 요청 : 브라우저에서 http://192.168.56.100로 접속→ WordPress 컨테이너가 요청 받음.
- WordPress 처리 : PHP 코드가 실행되고 필요한 데이터를 DB에서 가져오기 위해 MySQL에 쿼리 요청
- MySQL 응답 : DB에서 데이터 조회 이후에 WordPress 컨테이너에 전달.
- 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는 주로 개발(Dev), 테스팅(Staging)환경에 최적화 되어있다.
- 리소스 관리 부족
- 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 파일로 한번에 컨테이너 여러개를 실행시킬 수 있고
관리하고 개발, 테스팅 환경에서는 유용하게 사용할 수 있을 것 같습니다.
감사합니다!