토. 8월 9th, 2025

안녕하세요! 🚀 웹 개발자 또는 워드프레스 사용자를 꿈꾸는 여러분! 워드프레스 설치, 혹시 아직도 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):
  • 텍스트 편집기: 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_HOSTdb 서비스의 이름과 포트를 사용합니다.
      • 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_HOSTdb 서비스의 이름을 가리키도록 설정합니다.

🚀 실전! 워드프레스 컨테이너 실행하기

이제 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_HOSTdb:3306으로 올바르게 설정되었는지 확인하세요.
    • wordpressdb 서비스의 환경 변수(사용자명, 비밀번호, 데이터베이스 이름)가 정확히 일치하는지 다시 한번 확인하세요. 오타는 없는지, 대소문자를 구분하는지 확인해야 합니다.
  • 권한 문제:
    • 볼륨을 마운트할 때, 호스트 디렉토리의 권한 문제로 컨테이너가 파일에 접근하지 못하는 경우가 간혹 있습니다. Linux 환경에서는 sudo를 사용하거나 디렉토리 권한을 확인해보세요.

🌱 더 나아가기

  • .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/themeswp-content/plugins에 직접 파일을 넣으면, 워드프레스 관리자 페이지에서 자동으로 인식하고 활성화할 수 있습니다.

  • SSL/HTTPS 적용: 실제 서비스 환경에서는 SSL(HTTPS)을 필수로 적용해야 합니다. 이를 위해 Nginx 프록시 컨테이너를 추가하여 Let’s Encrypt 등으로 인증서를 발급하고 워드프레스 컨테이너 앞에 두는 방법이 일반적입니다. (이 부분은 다음 단계에서 더 깊게 다룰 수 있습니다.)


🎉 결론

이제 Docker Compose를 사용하여 워드프레스 개발 환경을 구축하는 방법을 완전히 익히셨습니다! 컨테이너 기반의 개발은 워드프레스 환경 설정을 혁신적으로 단순화하고, 팀원 간의 협업을 용이하게 하며, 궁극적으로 개발 효율성을 크게 향상시킵니다.

이 가이드가 여러분의 워드프레스 개발 여정에 큰 도움이 되었기를 바랍니다. 이제 복잡한 설치 과정에 얽매이지 말고, 오직 워드프레스 개발 자체에만 집중하세요! 👨‍💻👩‍💻 궁금한 점이 있다면 언제든지 댓글로 질문해주세요! 행복한 코딩 되세요! ✨

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다