Docker를 이용하면 복잡한 웹 서버나 데이터베이스 설정 과정 없이 명령어 몇 줄로 워드프레스(WordPress) 환경을 구축할 수 있습니다. 독립된 컨테이너 환경에서 실행되므로 시스템 충돌 위험이 적고, 추후 백업이나 삭제도 간편하다는 장점이 있습니다.
준비 사항
이 작업을 진행하기 앞서 시스템에 몇 가지 도구가 설치되어 있어야 합니다. 터미널을 열어 아래 항목들이 준비되었는지 확인하세요.
- Docker Engine 및 Docker Compose가 설치된 운영체제 (macOS, Linux, Windows WSL2 환경 모두 가능)
- 터미널(Terminal) 또는 명령 프롬프트 사용 권한
- 에디터 프로그램 (설정 파일 편집용)
작업 디렉토리 생성 및 설정 파일 준비
관련 글: MySQL 데이터베이스 구성
관련 글: 도커 컴포즈 파일 작성
워드프레스 컨테이너와 데이터베이스는 각각 독립된 공간을 사용하지만, 데이터 유지를 위해 로컬 디렉토리와 연결(볼륨 마운트)해야 합니다. 프로젝트를 관리할 폴더를 만들고 도커 컴포즈 파일을 작성합니다.
작업할 디렉토리를 생성하고 이동하는 명령입니다.
script.shBASH
mkdir my-wordpress
cd my-wordpress
디렉토리 내부에서 docker-compose.yml 파일을 생성하고 아래 내용을 입력합니다. 이 설정은 워드프레스 구동에 필요한 공식 워드프레스 이미지와 데이터 저장을 위한 MySQL(또는 MariaDB) 이미지를 함께 묶어줍니다.
config.ymlYAML
version: '3.8'
services:
db:
image: mysql:8.0
container_name: wp_db
restart: always
environment:
MYSQL_DATABASE: wordpress
MYSQL_USER: wp_user
MYSQL_PASSWORD: wp_password
MYSQL_ROOT_PASSWORD: root_password
volumes:
- db_data:/var/lib/mysql
wordpress:
image: wordpress:latest
container_name: wp_app
restart: always
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_NAME: wordpress
WORDPRESS_DB_USER: wp_user
WORDPRESS_DB_PASSWORD: wp_password
volumes:
- wp_files:/var/html/www
volumes:
db_data:
wp_files:
컨테이너 실행
작성한 설정을 바탕으로 백그라운드에서 컨테이너를 내려받고 실행합니다. 네트워크 환경에 따라 이미지를 다운로드하는 데 몇 분 정도 소요될 수 있습니다.
script.shBASH
docker compose up -d
명령어가 정상적으로 실행되면 데이터베이스와 워드프레스 서버가 차례대로 생성됩니다. 현재 실행 상태는 아래 명령으로 점검할 수 있습니다.
script.shBASH
docker compose ps
출력 결과에서 wp_db와 wp_app 두 컨테이너의 상태가 ‘Up’으로 표시되는지 확인하세요.
컨테이너 실행
도커 컴파일(Docker Compose) 설정을 마쳤다면, 이제 정의된 설정 파일을 바탕으로 실제 컨테이너를 백그라운드에서 구동할 차례입니다. 터미널에서 아래 명령어를 입력하여 데이터베이스와 워드프레스 애플리케이션 컨테이너를 동시에 생성하고 실행합니다.
script.shBASH
docker compose up -d
여기서 -d 옵션은 Detached 모드를 의미하며, 컨테이너를 백그라운드에서 실행하여 터미널을 계속 자유롭게 사용할 수 있도록 만들어 줍니다. 명령어를 처음 실행하는 경우, 도커 이미지가 로컬에 없기 때문에 공식 마리아디비(MariaDB)와 워드프레스(WordPress) 이미지를 원격 저장소에서 자동으로 다운로드하는 과정이 먼저 진행됩니다. 다운로드가 완료되면 컨테이너가 차례대로 초기화됩니다.
명령어가 정상적으로 실행되면 데이터베이스와 워드프레스 서버가 차례대로 생성됩니다. 현재 실행 상태는 아래 명령으로 점검할 수 있습니다.
script.shBASH
docker compose ps
출력 결과에서 wp_db와 wp_app 두 컨테이너의 상태가 ‘Up’으로 표시되는지 확인하세요.
컨테이너 상세 실행과 로그 모니터링
도커 컴포즈 설정 파일을 작성한 뒤, 실제 컨테이너를 백그라운드 환경에서 구동하려면 백그라운드 실행 옵션이 포함된 명령어를 사용해야 합니다. 터미널에서 작업 디렉토리로 이동한 뒤 아래 명령을 실행합니다.
script.shBASH
docker compose up -d
명령어 뒤에 붙은 -d(detached) 옵션은 컨테이너를 터미널 창과 분리하여 백그라운드 프로세스로 실행시키는 역할을 합니다. 이 옵션을 사용해야 컨테이너가 실행되는 동안에도 현재 터미널 창을 계속해서 다른 명령에 활용할 수 있습니다.
명령어가 정상적으로 실행되면 데이터베이스와 워드프레스 서버가 차례대로 생성됩니다. 현재 실행 상태는 아래 명령으로 점검할 수 있습니다.
script.shBASH
docker compose ps
출력 결과에서 wp_db와 wp_app 두 컨테이너의 상태가 ‘Up’으로 표시되는지 확인하세요.
실행 과정에서 문제가 발생했을 때 대처법
컨테이너가 ‘Up’ 상태로 유지되지 않고 곧바로 종료되거나 오류가 발생할 때는 로그를 확인하여 원인을 파악해야 합니다. 전체 컨테이너의 실시간 로그를 확인하려면 다음 명령을 입력합니다.
script.shBASH
docker compose logs -f
특정 서비스(예: 데이터베이스 또는 워드프레스 앱)의 로그만 골라서 확인하고 싶다면 서비스 이름을 뒤에 명시하면 됩니다.
script.shBASH
# 데이터베이스 컨테이너 로그만 확인
docker compose logs -f wp_db
# 워드프레스 앱 컨테이너 로그만 확인
docker compose logs -f wp_app
대부분의 초기 구동 오류는 데이터베이스가 완전히 준비되기 전에 워드프레스가 접속을 시도하여 발생합니다. docker-compose.yml 파일 내에 헬스체크(healthcheck) 조건이 설정되어 있다면 도커가 알아서 순서를 조율하지만, 시스템 환경에 따라 데이터베이스 초기화에 시간이 더 걸릴 수 있습니다. 로그를 통해 데이터베이스 연결 대기 메시지가 정상적으로 흘러가는지 확인하는 것이 좋습니다.
실행 과정에서 문제가 발생했을 때 대처법
도커를 이용해 워드프레스를 구축하다 보면 설정 파일에 오타가 있거나 시스템 자원이 부족해 컨테이너가 정상적으로 실행되지 않는 상황을 마주할 수 있습니다. 문제가 발생했을 때 터미널 화면에 나타나는 오류 메시지만으로는 원인을 파악하기 어려울 때가 많으므로, 단계별로 대처하는 방법을 알아두면 빠른 해결에 도움이 됩니다.
1. 컨테이너 상태와 종료 코드 확인하기
먼저 현재 구동 중인 컨테이너들이 백그라운드에서 잘 유지되고 있는지, 혹은 실행 직후 곧바로 종료되었는지 확인해야 합니다. 아래 명령어로 전체 컨테이너의 상태를 점검할 수 있습니다.
script.shBASH
docker compose ps -a
이 명령어의 출력 결과에서 STATUS 열을 확인했을 때 Exited (1) 또는 Restarting과 같은 상태가 반복된다면 설정에 문제가 있는 것입니다. 특히 Restarting 상태는 컨테이너 내부의 애플리케이션이 오류로 인해 계속 죽고 다시 살아나는 현상으로, 정확한 원인은 로그를 통해 분석해야 합니다.
2. 데이터베이스 연결 오류 및 헬스체크 대처
로그를 확인했을 때 가장 흔하게 마주하는 문제는 워드프레스 컨테이너가 데이터베이스에 접속하지 못하고 재시작되는 현상입니다. 앞서 언급한 대로 데이터베이스가 완전히 초기화되어 외부 접속을 받을 준비가 되기 전에 워드프레스가 먼저 연결을 시도하면 발생합니다.
만약 로그에 데이터베이스 거부 관련 에러가 지속해서 찍힌다면, 컨테이너를 완전히 내렸다가 데이터베이스 볼륨을 초기화한 후 다시 실행하는 방법이 가장 확실합니다. 아래 명령어로 기존 컨테이너와 네트워크를 깔끔하게 정리할 수 있습니다.
script.shBASH
docker compose down
만약 데이터베이스에 저장된 기존 데이터를 모두 유지한 채 재시작하고 싶다면, 볼륨을 삭제하는 -v 옵션 없이 컨테이너만 내렸다가 다시 올립니다.
script.shBASH
docker compose up -d
3. 포트 충돌 문제 해결하기
docker compose up -d 명령어를 실행했을 때 port is already allocated와 같은 에러 문구가 발생한다면, 이미 호스트 컴퓨터의 특정 포트를 다른 프로그램이 사용하고 있는 상태입니다.
워드프레스 설정 파일(docker-compose.yml)에서 웹서버가 바인딩하는 포트를 다른 번호로 변경하여 충돌을 피할 수 있습니다. 예를 들어 8080 포트가 이미 사용 중이라면 9000 포트 등으로 수정합니다.
config.ymlYAML
services:
wp_app:
ports:
- "9000:80"
설정 파일을 수정한 후에는 반드시 아래 명령어를 입력하여 변경된 설정이 적용되도록 컨테이너를 재구동해야 합니다.
script.shBASH
docker compose up -d --force-recreate
설치 확인 및 초기 설정
웹 브라우저를 열고 주소창에 http://localhost:8080을 입력합니다. 정상적인 상태라면 워드프레스 언어 선택 화면이 나타납니다.
- 사용할 언어를 선택하고 ‘계속’ 버튼을 누릅니다.
- 사이트 제목, 관리자 계정 이름, 비밀번호, 이메일 주소를 입력합니다.
- ‘워드프레스 설치’를 클릭하면 초기화 작업이 완료됩니다.
설치 완료 후 로그인 페이지에서 방금 설정한 관리자 계정으로 접속하여 대시보드가 정상 노출되는지 확인합니다.
자주 발생하는 문제와 해결
포트 충돌이나 데이터베이스 연결 지연으로 인해 접속이 안 될 때가 있습니다. 상황별 대처법은 다음과 같습니다.
- 포트 8080이 이미 사용 중인 경우:
docker-compose.yml파일의 포트 매핑 설정에서 왼쪽 숫자를 다른 번호(예:9000:80)로 변경한 뒤docker compose down후 다시docker compose up -d를 실행합니다. - 데이터베이스 연결 오류 발생: 워드프레스 컨테이너가 데이터베이스보다 먼저 시작되면 일시적인 연결 오류가 날 수 있습니다. 이 경우 1~2분 정도 기다린 후 브라우저를 새로고침하면 정상 작동합니다.
데이터 관리와 주의사항
도커로 구축한 워드프레스의 데이터를 안전하게 관리하려면 볼륨 설정을 이해해야 합니다. 컨테이너를 단순히 삭제(docker compose down)하는 것은 볼륨에 저장된 데이터에 영향을 주지 않지만, 볼륨까지 함께 삭제하는 명령어(docker compose down -v)를 입력하면 작성한 글과 업로드한 미디어가 모두 소실되므로 주의가 필요합니다.
서버를 완전히 초기화하거나 다른 환경으로 옮기려면 db_data와 wp_files 볼륨 디렉토리를 백업해 두어야 합니다.
실제 서비스 운영을 위한 다음 단계
도커를 활용하면 복잡한 의존성 설치 과정 없이 독립된 워드프레스 환경을 빠르게 구축할 수 있습니다. 로컬 환경에서 충분한 테스트를 마쳤다면, 이제 실제 서비스를 운영하기 위한 클라우드 서버 배포와 리버스 프록시 연동을 준비할 차례입니다.
도커 컴포즈 설정 예시
실서비스 운영 시에는 데이터 지속성을 위해 볼륨 설정과 데이터베이스 보안을 철저히 관리해야 합니다. 아래는 실제 운영 환경에서 참고할 수 있는 기본 docker-compose.yml 설정 예시입니다.
config.ymlYAML
version: '3.8'
services:
db:
image: mysql:8.0
container_name: wp_mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: secure_root_password
MYSQL_DATABASE: wordpress
MYSQL_USER: wp_user
MYSQL_PASSWORD: secure_password
volumes:
- db_data:/var/lib/mysql
wordpress:
image: wordpress:latest
container_name: wp_app
restart: always
ports:
- "80:80"
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wp_user
WORDPRESS_DB_PASSWORD: secure_password
WORDPRESS_DB_NAME: wordpress
volumes:
- wp_data:/var/www/html
volumes:
db_data:
wp_data:
데이터 백업과 유지보수
컨테이너 환경에서 서비스를 운영할 때는 정기적인 볼륨 백업 루틴을 마련하는 것이 무엇보다 중요합니다. MySQL 데이터가 저장되는 볼륨과 워드프레스 파일이 담긴 볼륨을 주기적으로 백업해 두어야 예기치 않은 시스템 중단이나 장애 상황에서도 데이터를 안전하게 보호할 수 있습니다.
참고자료
localhost — 도커 컴포즈로 워드프레스를 실행한 뒤 브라우저를 통해 초기 설치 및 대시보드 접속을 확인하는 주소로 참고
