안녕하세요! 🚀 웹 개발자 또는 워드프레스 사용자를 꿈꾸는 여러분! 워드프레스 설치, 혹시 아직도 LAMP(Linux, Apache, MySQL, PHP)나 LEMP(Linux, Nginx, MySQL, PHP) 스택을 직접 구축하며 씨름하고 계신가요? 🛠️ 복잡한 의존성 문제, 버전 충돌, 그리고 매번 새로운 환경을 설정할 때마다 겪는 어려움은 이제 그만!
오늘은 이 모든 고민을 한 방에 날려줄 Docker Compose를 사용하여 워드프레스 개발 환경을 마법처럼 쉽고 빠르게 구축하는 방법을 상세하게 알려드리겠습니다. 이 글을 끝까지 읽으시면, 몇 줄의 코드만으로 완벽하게 독립된 워드프레스 개발 환경을 손쉽게 구축하고 관리할 수 있게 될 것입니다. ✨
💡 왜 Docker Compose로 워드프레스 환경을 구축해야 할까요?
워드프레스는 웹 서버(Apache 또는 Nginx), PHP, 그리고 데이터베이스(MySQL 또는 MariaDB)가 함께 작동해야 하는 복합적인 애플리케이션입니다. Docker Compose를 사용하면 다음과 같은 엄청난 이점들을 누릴 수 있습니다.
- ⚡️ 간편한 설정: 복잡한 수동 설치 과정 없이, 단일 설정 파일(
.yml
)로 모든 서비스를 정의하고 한 번에 실행할 수 있습니다. - 🌐 일관된 환경: 로컬 개발 환경, 스테이징, 프로덕션 환경이 동일하게 유지되어 “내 컴퓨터에서는 잘 되는데…” 와 같은 문제를 방지합니다.
- 🧱 격리 및 독립성: 각 서비스(워드프레스, 데이터베이스)가 독립적인 컨테이너에서 실행되어 서로 영향을 주지 않습니다.
- ♻️ 쉬운 재현성: 프로젝트를 다른 사람과 공유하거나 새로운 컴퓨터에서 작업할 때,
docker-compose.yml
파일만 있으면 동일한 환경을 즉시 재현할 수 있습니다. - 🔄 빠른 시작/중지: 개발 환경을 필요할 때 빠르게 띄우고, 필요 없을 때는 한 번의 명령어로 깔끔하게 종료할 수 있습니다.
📝 준비물
본격적인 시작에 앞서, 필요한 도구들을 미리 설치해주세요.
- Docker Desktop (Windows / macOS) 또는 Docker Engine (Linux):
- Docker 공식 웹사이트에서 운영체제에 맞는 버전을 다운로드하여 설치합니다.
- Docker Desktop 다운로드
- 텍스트 편집기: VS Code, Sublime Text, Atom 등 선호하는 텍스트 편집기.
- 터미널(Terminal) 또는 명령 프롬프트(Command Prompt): 기본적인 명령어 사용 능력.
🧠 핵심 개념 이해
워드프레스 환경을 구축하기 전에, Docker와 Docker Compose의 핵심 개념을 간략하게 짚고 넘어가겠습니다.
-
🐳 Docker (도커): 애플리케이션과 그 종속성을 컨테이너라는 독립된 단위로 패키징하는 플랫폼입니다. 컨테이너는 가상 머신보다 가볍고 빠르며, 어떤 환경에서든 동일하게 실행됩니다.
- 이미지(Image): 컨테이너를 생성하기 위한 설계도(템플릿)입니다. 워드프레스 이미지, MySQL 이미지 등이 있습니다.
- 컨테이너(Container): 이미지로부터 생성된 실제 실행 인스턴스입니다.
-
🏗️ Docker Compose (도커 컴포즈): 여러 개의 컨테이너를 하나의 애플리케이션으로 묶어 정의하고 실행하는 도구입니다. 복잡한 다중 컨테이너 애플리케이션(예: 워드프레스 + 데이터베이스)을 쉽게 관리할 수 있게 해줍니다.
docker-compose.yml
파일에 서비스들을 정의합니다. -
워드프레스의 구성 요소:
- 웹 서버 (PHP-FPM + Nginx / Apache): PHP 코드를 해석하고 웹 페이지를 제공합니다. Docker 이미지로 제공됩니다.
- 데이터베이스 (MySQL / MariaDB): 워드프레스의 모든 글, 설정, 사용자 정보 등을 저장합니다. Docker 이미지로 제공됩니다.
📄 docker-compose.yml
파일 분석: 워드프레스의 설계도
이제 워드프레스 환경을 정의할 docker-compose.yml
파일을 작성해봅시다. 이 파일은 워드프레스 애플리케이션의 모든 구성 요소를 명시하는 ‘설계도’와 같습니다.
version: '3.8' # Docker Compose 파일 형식 버전 지정
services: # 애플리케이션을 구성하는 서비스들을 정의합니다.
wordpress: # 워드프레스 웹사이트 서비스
image: wordpress:latest # 워드프레스 최신 버전 이미지를 사용합니다.
# wordpress:apache 또는 wordpress:fpm-alpine 등 특정 버전을 지정할 수도 있습니다.
ports:
- "80:80" # 호스트의 80번 포트를 컨테이너의 80번 포트에 연결합니다.
# 웹브라우저에서 http://localhost 로 접속할 수 있게 됩니다.
environment: # 워드프레스가 데이터베이스에 접속하기 위한 환경 변수들입니다.
WORDPRESS_DB_HOST: db:3306 # 데이터베이스 서비스의 이름(db)과 포트(3306)를 지정합니다.
# Docker Compose 네트워크 내에서는 서비스 이름으로 접근 가능합니다.
WORDPRESS_DB_USER: wordpress # 워드프레스가 사용할 데이터베이스 사용자 이름
WORDPRESS_DB_PASSWORD: supersecretpassword # 워드프레스가 사용할 데이터베이스 비밀번호
WORDPRESS_DB_NAME: wordpress_db # 워드프레스 데이터베이스 이름
volumes: # 데이터 지속성을 위한 볼륨 설정
- ./wordpress:/var/www/html # 호스트의 ./wordpress 디렉토리를 컨테이너의 /var/www/html에 마운트합니다.
# 워드프레스 코어, 테마, 플러그인, 업로드 파일 등이 이곳에 저장되어
# 컨테이너가 삭제되어도 데이터가 유지됩니다.
depends_on: # 이 서비스가 시작되기 전에 'db' 서비스가 먼저 시작되어야 함을 명시합니다.
- db
db: # 워드프레스 데이터를 저장할 MySQL 데이터베이스 서비스
image: mysql:5.7 # MySQL 5.7 버전 이미지를 사용합니다. (mariadb:latest도 좋은 선택입니다.)
environment: # MySQL 데이터베이스 설정 환경 변수
MYSQL_ROOT_PASSWORD: supersecretpassword # root 사용자의 비밀번호
MYSQL_DATABASE: wordpress_db # 워드프레스에서 사용할 데이터베이스 이름 (워드프레스 서비스와 동일해야 합니다)
MYSQL_USER: wordpress # 워드프레스에서 사용할 데이터베이스 사용자 이름 (워드프레스 서비스와 동일해야 합니다)
MYSQL_PASSWORD: supersecretpassword # 워드프레스에서 사용할 데이터베이스 비밀번호 (워드프레스 서비스와 동일해야 합니다)
volumes: # 데이터 지속성을 위한 볼륨 설정
- ./db:/var/lib/mysql # 호스트의 ./db 디렉토리를 컨테이너의 /var/lib/mysql에 마운트합니다.
# 데이터베이스 파일이 이곳에 저장되어 컨테이너가 삭제되어도 데이터가 유지됩니다.
phpmyadmin: # (선택 사항) 데이터베이스 관리를 위한 PhpMyAdmin 서비스
image: phpmyadmin/phpmyadmin # PhpMyAdmin 최신 버전 이미지를 사용합니다.
ports:
- "8080:80" # 호스트의 8080번 포트를 컨테이너의 80번 포트에 연결합니다.
# 웹브라우저에서 http://localhost:8080 로 접속하여 데이터베이스를 관리할 수 있습니다.
environment: # PhpMyAdmin 설정 환경 변수
PMA_HOST: db # PhpMyAdmin이 접속할 데이터베이스 호스트 (데이터베이스 서비스 이름)
MYSQL_ROOT_PASSWORD: supersecretpassword # root 사용자의 비밀번호 (db 서비스의 root 비밀번호와 동일해야 합니다)
depends_on:
- db # 이 서비스가 시작되기 전에 'db' 서비스가 먼저 시작되어야 함을 명시합니다.
# volumes: # (선택 사항) 명명된 볼륨을 사용할 경우 여기에 정의합니다.
# wordpress_data:
# db_data:
version: '3.8'
: Docker Compose 파일의 문법 버전을 정의합니다. 최신 버전을 사용하는 것이 좋습니다.services
: 이 섹션 아래에 우리가 실행할 개별 컨테이너(서비스)들을 정의합니다.wordpress
: 워드프레스 웹사이트 자체를 위한 서비스입니다.image
: 사용할 Docker 이미지와 태그를 지정합니다 (wordpress:latest
는 가장 최근 안정 버전).ports
: 호스트 머신의 포트와 컨테이너 내부의 포트를 연결합니다.호스트포트:컨테이너포트
형식입니다.environment
: 컨테이너 내부에서 사용할 환경 변수들을 설정합니다. 워드프레스가 데이터베이스에 연결하는 데 필요한 정보(WORDPRESS_DB_HOST
,WORDPRESS_DB_USER
,WORDPRESS_DB_PASSWORD
,WORDPRESS_DB_NAME
)를 여기서 정의합니다.WORDPRESS_DB_HOST
는db
서비스의 이름과 포트를 사용합니다.volumes
: 데이터 지속성을 위해 호스트 머신의 특정 디렉터리(./wordpress
)를 컨테이너 내부의 디렉터리(/var/www/html
)에 마운트합니다. 이렇게 하면 컨테이너가 삭제되거나 재생성되어도 워드프레스의 테마, 플러그인, 업로드 파일 등의 데이터는 그대로 유지됩니다.depends_on
: 이 서비스가db
서비스에 의존한다는 것을 명시합니다.db
서비스가 먼저 시작되어야wordpress
서비스가 정상적으로 작동할 수 있습니다.
db
: 워드프레스의 데이터베이스를 위한 서비스입니다.image
: MySQL 5.7 이미지를 사용합니다.mariadb:latest
를 사용해도 무방합니다.environment
: MySQL 데이터베이스의 초기 설정에 필요한 환경 변수들을 정의합니다.MYSQL_ROOT_PASSWORD
,MYSQL_DATABASE
,MYSQL_USER
,MYSQL_PASSWORD
는 워드프레스 서비스의 환경 변수와 일치해야 합니다.volumes
: 호스트의./db
디렉터리를 컨테이너의/var/lib/mysql
에 마운트하여 데이터베이스 파일의 지속성을 확보합니다.
phpmyadmin
(선택 사항): 웹 기반의 MySQL 데이터베이스 관리 도구입니다. 개발 과정에서 데이터베이스 내용을 직접 확인하고 수정할 때 매우 유용합니다.PMA_HOST
는db
서비스의 이름을 가리키도록 설정합니다.
🚀 실전! 워드프레스 컨테이너 실행하기
이제 docker-compose.yml
파일을 기반으로 워드프레스 환경을 구축하고 실행해봅시다.
1. 프로젝트 디렉토리 생성: 터미널을 열고 워드프레스 프로젝트를 위한 디렉토리를 생성합니다.
mkdir my-wordpress-app
cd my-wordpress-app
2. docker-compose.yml
파일 작성:
앞서 분석했던 docker-compose.yml
내용을 my-wordpress-app
디렉토리 안에 docker-compose.yml
이라는 이름으로 저장합니다.
# 예를 들어, VS Code를 사용한다면:
code docker-compose.yml
파일에 위에서 설명한 YAML 내용을 복사하여 붙여넣습니다.
3. Docker Compose 서비스 실행:
docker-compose.yml
파일이 있는 디렉토리에서 다음 명령어를 실행합니다.
docker compose up -d
docker compose up
:docker-compose.yml
파일에 정의된 모든 서비스를 빌드하고 실행합니다.-d
:detached
모드를 의미하며, 백그라운드에서 컨테이너들을 실행하여 터미널을 계속 사용할 수 있게 합니다.
처음 실행할 때는 필요한 Docker 이미지들을 다운로드받기 때문에 시간이 다소 걸릴 수 있습니다. 이미지 다운로드가 완료되고 컨테이너들이 성공적으로 시작되면 터미널에 다음과 유사한 메시지가 출력됩니다.
[+] Running 3/3
✔ Container my-wordpress-app-db-1 Started
✔ Container my-wordpress-app-wordpress-1 Started
✔ Container my-wordpress-app-phpmyadmin-1 Started
4. 워드프레스 설치 완료:
웹 브라우저를 열고 http://localhost
로 접속합니다. 🎉
워드프레스 초기 설정 화면이 나타날 것입니다. 평소 워드프레스를 설치하는 것과 동일하게 언어 선택, 사이트 제목, 사용자명, 비밀번호 등을 입력하고 설치를 완료합니다.
5. PhpMyAdmin 접속 (선택 사항):
데이터베이스를 직접 관리하고 싶다면, 웹 브라우저에서 http://localhost:8080
으로 접속합니다.
- 서버:
db
(또는my-wordpress-app-db-1
처럼 컨테이너 이름을 입력해도 됩니다) - 사용자명:
root
- 비밀번호:
supersecretpassword
(여러분이docker-compose.yml
에 설정한MYSQL_ROOT_PASSWORD
)
위 정보를 입력하고 로그인하면 데이터베이스를 시각적으로 관리할 수 있습니다.
6. 서비스 중지:
개발을 마치거나 더 이상 워드프레스 환경이 필요하지 않을 때는, docker-compose.yml
파일이 있는 디렉토리에서 다음 명령어를 실행하여 모든 서비스를 중지하고 컨테이너를 삭제할 수 있습니다.
docker compose down
이 명령어는 컨테이너와 기본 네트워크를 삭제하지만, ./wordpress
및 ./db
볼륨에 저장된 데이터는 그대로 유지됩니다.
7. 서비스 다시 시작:
다음에 다시 개발을 시작할 때는 docker compose up -d
명령어를 다시 실행하면 됩니다. 이미지가 로컬에 있으므로 훨씬 빠르게 시작됩니다. 데이터는 volumes
에 의해 유지되므로, 워드프레스 사이트는 이전에 설정했던 그대로 다시 나타날 것입니다.
🛠️ 문제 해결 팁
- 포트 충돌 (
Error: port is already allocated
등):ports
설정에서 호스트 포트(80:80
의 앞80
)를 다른 사용하지 않는 포트(예:8000:80
)로 변경해보세요.
- 컨테이너 시작 실패:
docker compose logs [서비스_이름]
명령어를 사용하여 특정 서비스의 로그를 확인하세요. 예를 들어,docker compose logs wordpress
또는docker compose logs db
를 통해 오류 메시지를 파악할 수 있습니다.
- 데이터베이스 연결 오류:
wordpress
서비스의WORDPRESS_DB_HOST
가db:3306
으로 올바르게 설정되었는지 확인하세요.wordpress
와db
서비스의 환경 변수(사용자명, 비밀번호, 데이터베이스 이름)가 정확히 일치하는지 다시 한번 확인하세요. 오타는 없는지, 대소문자를 구분하는지 확인해야 합니다.
- 권한 문제:
- 볼륨을 마운트할 때, 호스트 디렉토리의 권한 문제로 컨테이너가 파일에 접근하지 못하는 경우가 간혹 있습니다. Linux 환경에서는
sudo
를 사용하거나 디렉토리 권한을 확인해보세요.
- 볼륨을 마운트할 때, 호스트 디렉토리의 권한 문제로 컨테이너가 파일에 접근하지 못하는 경우가 간혹 있습니다. Linux 환경에서는
🌱 더 나아가기
-
.env
파일로 환경 변수 관리: 민감한 정보(비밀번호 등)를docker-compose.yml
파일에 직접 넣는 대신,.env
파일을 생성하여 관리할 수 있습니다.my-wordpress-app
디렉토리에.env
파일을 만들고 아래 내용을 작성합니다.MYSQL_ROOT_PASSWORD=your_secure_root_password WORDPRESS_DB_USER=wordpress_user WORDPRESS_DB_PASSWORD=your_secure_password WORDPRESS_DB_NAME=my_wordpress_db
그리고
docker-compose.yml
파일에서는$VARIABLE_NAME
형태로 참조합니다.# ... environment: WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_USER: ${WORDPRESS_DB_USER} WORDPRESS_DB_PASSWORD: ${WORDPRESS_DB_PASSWORD} WORDPRESS_DB_NAME: ${WORDPRESS_DB_NAME} # ...
이렇게 하면 민감한 정보가
.yml
파일에 노출되지 않으며, 개발/프로덕션 환경별로 다른 변수를 쉽게 적용할 수 있습니다..env
파일은.gitignore
에 추가하여 버전 관리에서 제외하는 것이 좋습니다. -
커스텀 테마/플러그인 적용:
./wordpress
볼륨으로 마운트된 디렉토리(/var/www/html
) 안에wp-content/themes
나wp-content/plugins
에 직접 파일을 넣으면, 워드프레스 관리자 페이지에서 자동으로 인식하고 활성화할 수 있습니다. -
SSL/HTTPS 적용: 실제 서비스 환경에서는 SSL(HTTPS)을 필수로 적용해야 합니다. 이를 위해 Nginx 프록시 컨테이너를 추가하여 Let’s Encrypt 등으로 인증서를 발급하고 워드프레스 컨테이너 앞에 두는 방법이 일반적입니다. (이 부분은 다음 단계에서 더 깊게 다룰 수 있습니다.)
🎉 결론
이제 Docker Compose를 사용하여 워드프레스 개발 환경을 구축하는 방법을 완전히 익히셨습니다! 컨테이너 기반의 개발은 워드프레스 환경 설정을 혁신적으로 단순화하고, 팀원 간의 협업을 용이하게 하며, 궁극적으로 개발 효율성을 크게 향상시킵니다.
이 가이드가 여러분의 워드프레스 개발 여정에 큰 도움이 되었기를 바랍니다. 이제 복잡한 설치 과정에 얽매이지 말고, 오직 워드프레스 개발 자체에만 집중하세요! 👨💻👩💻 궁금한 점이 있다면 언제든지 댓글로 질문해주세요! 행복한 코딩 되세요! ✨