Docker로 워드프레스를 구축하면 PHP·웹서버·데이터베이스를 직접 설치하지 않고도 명령어 몇 줄로 워드프레스 환경을 띄울 수 있다. 워드프레스는 단독으로 동작하지 않고 MySQL 또는 MariaDB 같은 데이터베이스가 반드시 필요한데, Docker를 쓰면 워드프레스 컨테이너와 DB 컨테이너를 같은 네트워크로 묶어 한 번에 연동할 수 있다. 이 글에서는 준비(Docker 설치) → docker run 방식 → docker compose 방식 → 접속·초기 설정 → 볼륨·관리 → 정리 순서로 Docker 워드프레스 구축 과정을 정리한다.
목차
준비: Docker 설치
먼저 Docker가 설치돼 있어야 한다. 윈도우·macOS는 Docker Desktop을 설치하면 되고, 윈도우에서는 Docker Desktop이 WSL2(Windows Subsystem for Linux 2)를 백엔드로 사용하므로 WSL2를 함께 활성화한다. 리눅스 서버라면 배포판의 패키지로 Docker Engine을 설치한다.
설치가 끝났다면 명령 프롬프트(또는 PowerShell·터미널)에서 버전을 확인한다. 아래처럼 버전이 출력되면 정상적으로 설치된 것이다. docker compose(공백 구분)는 Docker에 기본 포함된 Compose v2 플러그인으로, 예전의 docker-compose(하이픈) 단독 실행 파일을 대체한다.
# Docker / Compose 설치 확인
docker --version
docker compose version
# 출력 예시
Docker version 27.x.x, build ...
Docker Compose version v2.x.x
방법 1. docker run으로 구축하기
가장 기본이 되는 방식이다. 워드프레스 컨테이너와 DB 컨테이너를 같은 Docker 네트워크에 올려야 두 컨테이너가 서로 통신한다. 순서는 네트워크 생성 → DB 컨테이너 실행 → 워드프레스 컨테이너 실행이다.
1단계. 전용 네트워크 생성
docker network create wordpress-net
2단계. 데이터베이스(MySQL) 컨테이너 실행
DB로는 MySQL 또는 MariaDB를 쓸 수 있다. 아래는 MySQL 기준이며, 환경변수로 데이터베이스 이름·사용자·비밀번호를 지정한다. 각 옵션의 의미는 다음과 같다.
| 옵션 | 의미 |
|---|---|
| –name | 컨테이너 이름 |
| –network | 연결할 Docker 네트워크 |
| -d | 백그라운드(detached) 실행 |
| -e MYSQL_ROOT_PASSWORD | DB 루트 비밀번호 |
| -e MYSQL_DATABASE | 생성할 데이터베이스 이름 |
| -e MYSQL_USER | 워드프레스가 쓸 DB 사용자 |
| -e MYSQL_PASSWORD | DB 사용자 비밀번호 |
docker run --name wp-db -d
--network wordpress-net
-e MYSQL_ROOT_PASSWORD=rootpass
-e MYSQL_DATABASE=wordpress
-e MYSQL_USER=wpuser
-e MYSQL_PASSWORD=wppass
-v wp-db-data:/var/lib/mysql
mysql:8.0
MariaDB를 쓰고 싶다면 마지막 줄의 mysql:8.0을 mariadb:latest로 바꾸면 된다. 환경변수 이름(MYSQL_*)은 MariaDB 이미지에서도 동일하게 동작한다.
3단계. 워드프레스 컨테이너 실행
워드프레스 컨테이너에는 DB 접속 정보를 환경변수로 넘긴다. 핵심은 WORDPRESS_DB_HOST를 DB 컨테이너 이름(wp-db)으로 지정하는 것이다. 같은 네트워크 안에서는 컨테이너 이름이 호스트명 역할을 한다. -p 8080:80은 호스트의 8080 포트를 컨테이너의 80 포트로 연결한다.
docker run --name wp-app -d
--network wordpress-net
-p 8080:80
-e WORDPRESS_DB_HOST=wp-db
-e WORDPRESS_DB_NAME=wordpress
-e WORDPRESS_DB_USER=wpuser
-e WORDPRESS_DB_PASSWORD=wppass
-v wp-app-data:/var/www/html
wordpress:latest
두 컨테이너가 정상적으로 떴는지 확인한다.
docker ps
# 출력 예시 (STATUS가 Up이면 정상)
CONTAINER ID IMAGE STATUS PORTS NAMES
a1b2c3d4e5f6 wordpress:latest Up 10 seconds 0.0.0.0:8080->80/tcp wp-app
f6e5d4c3b2a1 mysql:8.0 Up 30 seconds 3306/tcp wp-db
방법 2. docker compose로 구축하기
컨테이너를 하나씩 docker run으로 띄우는 대신, docker-compose.yml 파일 하나에 DB와 워드프레스를 함께 정의하면 명령어 한 줄로 전체 스택을 올리고 내릴 수 있다. 재현성과 관리 측면에서 실무에서는 이 방식을 더 많이 쓴다.
작업 폴더에 docker-compose.yml 파일을 만들고 아래 내용을 작성한다. 이 예시는 워드프레스 공식 이미지 문서의 구성을 따른다. 참고로 Compose v2부터는 맨 위의 version: 키가 더 이상 필요하지 않다.
services:
db:
image: mysql:8.0
restart: always
environment:
MYSQL_DATABASE: wordpress
MYSQL_USER: wpuser
MYSQL_PASSWORD: wppass
MYSQL_RANDOM_ROOT_PASSWORD: '1'
volumes:
- db-data:/var/lib/mysql
wordpress:
image: wordpress:latest
restart: always
depends_on:
- db
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: wpuser
WORDPRESS_DB_PASSWORD: wppass
WORDPRESS_DB_NAME: wordpress
volumes:
- wp-data:/var/www/html
volumes:
db-data:
wp-data:
각 항목의 역할을 정리하면 다음과 같다.
| 키 | 역할 |
|---|---|
| services | 실행할 컨테이너(db, wordpress)들을 정의 |
| image | 사용할 도커 이미지 |
| environment | DB 이름·사용자·비밀번호 등 환경변수 |
| ports | 호스트:컨테이너 포트 매핑(8080→80) |
| volumes | 데이터를 호스트 볼륨에 영속 저장 |
| depends_on | db가 먼저 뜨도록 시작 순서 지정 |
| restart | 컨테이너가 죽으면 자동 재시작 |
참고로 Compose는 services 안의 컨테이너들을 위한 네트워크를 자동으로 만들어 주므로, docker run 방식과 달리 네트워크를 따로 생성하지 않아도 db라는 서비스 이름으로 바로 접속된다. 파일을 저장했으면 같은 폴더에서 아래 명령으로 전체 스택을 실행한다.
# 백그라운드로 전체 스택 실행
docker compose up -d
# 실행 상태 확인
docker compose ps
# 로그 확인
docker compose logs -f wordpress
접속 및 워드프레스 초기 설정
컨테이너가 모두 떴다면 브라우저에서 http://localhost:8080으로 접속한다. 정상적으로 동작하면 워드프레스 설치 마법사(언어 선택 화면)가 나타난다.
- 언어 선택 — 한국어를 선택하고 계속.
- 사이트 정보 입력 — 사이트 제목, 관리자 아이디·비밀번호, 이메일을 입력한다. 이 비밀번호는 DB 비밀번호와 별개인 워드프레스 관리자 계정 비밀번호다.
- 설치 완료 — 입력 후 워드프레스 설치를 누르면 설치가 끝나고,
http://localhost:8080/wp-admin에서 관리자 화면에 로그인할 수 있다.
만약 “데이터베이스 연결 오류”가 뜬다면 WORDPRESS_DB_HOST 값이 DB 컨테이너(또는 서비스) 이름과 일치하는지, 사용자·비밀번호가 DB 컨테이너에 설정한 값과 같은지 다시 확인한다.
볼륨(데이터 영속화)과 컨테이너 관리
컨테이너는 삭제하면 내부 데이터도 함께 사라진다. 그래서 위 예시에서는 -v 옵션과 Compose의 volumes로 DB 데이터(/var/lib/mysql)와 워드프레스 파일(/var/www/html)을 도커 볼륨에 영속화했다. 볼륨에 저장해 두면 컨테이너를 지웠다 다시 만들어도 글·미디어·설정이 그대로 유지된다.
# 볼륨 목록 확인
docker volume ls
# 컨테이너 중지 / 시작 (docker run으로 띄운 경우)
docker stop wp-app wp-db
docker start wp-db wp-app
# Compose 스택 전체 제어
docker compose stop # 중지(볼륨 유지)
docker compose start # 다시 시작
docker compose down # 컨테이너·네트워크 제거(볼륨은 유지)
주의할 점은 docker compose down -v처럼 -v 플래그를 붙이면 볼륨까지 삭제되어 데이터가 모두 사라진다는 것이다. 데이터를 지우려는 의도가 아니라면 -v 없이 실행한다.
주의사항과 자주 묻는 질문
docker-compose와 docker compose의 차이
예전 자료에는 하이픈이 들어간 docker-compose(v1, 파이썬 단독 실행 파일) 명령이 많이 보인다. 이 v1은 2023년 7월 지원이 종료됐고, 현재는 Docker CLI에 통합된 Compose v2(공백 구분 docker compose)가 표준이다. 새로 구축한다면 docker compose를 사용하는 것이 좋다.
MySQL과 MariaDB 중 무엇을 써야 하나?
둘 다 워드프레스 공식 이미지와 잘 동작한다. MariaDB는 MySQL에서 갈라져 나온 호환 데이터베이스로, 환경변수(MYSQL_*)도 동일하게 쓴다. 둘 중 익숙한 쪽을 선택하면 된다.
포트 8080을 바꾸려면?
이미 8080 포트를 다른 프로그램이 쓰고 있다면 매핑 앞쪽 숫자만 바꾸면 된다. 예를 들어 -p 8090:80 또는 Compose의 "8090:80"으로 지정하면 http://localhost:8090으로 접속한다. 콜론 뒤의 80(컨테이너 내부 포트)은 바꾸지 않는다.
정리
지금까지 Docker로 워드프레스를 구축하는 두 가지 방법을 정리했다. 빠르게 실험할 때는 docker run으로 네트워크·DB·워드프레스 컨테이너를 차례로 올리고, 재현성과 관리가 중요하면 docker-compose.yml 한 파일로 묶어 docker compose up -d 한 줄로 띄우는 것이 편하다. 핵심은 ① 워드프레스에는 MySQL/MariaDB가 필요하고 ② 두 컨테이너가 같은 네트워크에서 서로를 이름으로 찾으며 ③ 데이터는 볼륨에 영속화해야 한다는 점이다. 한 번 구성해 두면 이후 다른 환경에서도 같은 설정을 그대로 재사용할 수 있다.



💬 댓글 0