Docker로 워드프레스 설치하고 사이트 열기 – 드디어 시작!
이제 진짜 핵심이다.
앞에서 준비한 웹서버와 데이터베이스(MySQL)에 이어,
이번 글에서는 워드프레스를 도커로 설치하고 실제 사이트를 열어본다.
단 몇 줄의 docker-compose 설정만으로
내 방에서 돌아가는 블로그 플랫폼이 완성된다.
📦 워드프레스 Docker 구성 전략 2가지
방법 1: 워드프레스 단독 실행 (MySQL 별도)
이전 글에서 MySQL을 이미 설치한 경우
| 장점 | 단점 |
|---|---|
| MySQL을 다른 앱과 공유 가능 | 네트워크 설정 복잡 |
| 개별 관리 가능 | 컨테이너 연결 수동 설정 |
방법 2: Docker Compose로 통합 관리 ⭐ 권장
워드프레스 + MySQL을 하나의 구성으로 관리
| 장점 | 단점 |
|---|---|
| 한 번에 실행/중지 | MySQL이 워드프레스 전용 |
| 설정 간편 | – |
| 네트워크 자동 구성 | – |
| 백업/복원 쉬움 | – |
결론: Docker Compose 방식 강력 추천!
🎯 이번 실습 목표
- docker-compose.yml 파일 작성
- 워드프레스 + MySQL 한 번에 실행
- 브라우저에서 워드프레스 설치 마법사 완료
- 첫 글 작성 및 사이트 확인
- 데이터 영속성 확인
📁 Step 1: 프로젝트 디렉토리 구조 만들기
# 홈 디렉토리에 프로젝트 폴더 생성
cd ~
mkdir -p wordpress-project/{data,config,backup}
cd wordpress-project
# 구조 확인
tree # 또는 ls -R
예상 구조:
~/wordpress-project/
├── docker-compose.yml
├── data/ # 볼륨 데이터 (자동 생성)
├── config/ # 설정 파일
└── backup/ # 백업 저장
📝 Step 2: docker-compose.yml 작성
기본 버전 (개발/테스트용)
# docker-compose.yml 파일 생성
nano docker-compose.yml
내용:
version: '3.8'
services:
# MySQL 데이터베이스
db:
image: mysql:8.0
container_name: wordpress-db
restart: always
environment:
MYSQL_ROOT_PASSWORD: SecureRootPass2025!
MYSQL_DATABASE: wordpress
MYSQL_USER: wpuser
MYSQL_PASSWORD: WpUserPass2025!
volumes:
- db_data:/var/lib/mysql
networks:
- wordpress-network
# 워드프레스 웹 애플리케이션
wordpress:
depends_on:
- db
image: wordpress:latest
container_name: wordpress-app
restart: always
ports:
- "8000:80"
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_NAME: wordpress
WORDPRESS_DB_USER: wpuser
WORDPRESS_DB_PASSWORD: WpUserPass2025!
volumes:
- wordpress_data:/var/www/html
networks:
- wordpress-network
# 볼륨 정의 (데이터 영속성)
volumes:
db_data:
wordpress_data:
# 네트워크 정의 (컨테이너 간 통신)
networks:
wordpress-network:
driver: bridge
docker-compose.yml 구조 상세 설명
1. 버전 선언
version: '3.8'
Docker Compose 파일 형식 버전 (3.8은 최신 안정 버전)
2. services – 컨테이너 정의
db 서비스 (MySQL):
| 항목 | 값 | 설명 |
|---|---|---|
image | mysql:8.0 | 사용할 이미지 |
container_name | wordpress-db | 컨테이너 이름 지정 |
restart | always | 자동 재시작 (서버 재부팅 시에도) |
environment | MYSQL_* | DB 초기화 환경 변수 |
volumes | db_data:/var/lib/mysql | 데이터 영속 저장 |
networks | wordpress-network | 연결할 네트워크 |
wordpress 서비스:
| 항목 | 값 | 설명 |
|---|---|---|
depends_on | db | db 서비스 먼저 시작 |
ports | “8000:80” | 호스트:컨테이너 포트 매핑 |
WORDPRESS_DB_HOST | db:3306 | DB 연결 주소 (서비스명 사용) |
volumes | wordpress_data:/var/www/html | 워드프레스 파일 저장 |
3. volumes – 데이터 영속성
volumes:
db_data: # MySQL 데이터
wordpress_data: # 워드프레스 파일 (테마, 플러그인, 업로드)
4. networks – 컨테이너 통신
networks:
wordpress-network:
driver: bridge # 브리지 네트워크 (기본값)
프로덕션 버전 (실제 운영용)
version: '3.8'
services:
db:
image: mysql:8.0
container_name: wordpress-db
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
MYSQL_DATABASE: ${DB_NAME}
MYSQL_USER: ${DB_USER}
MYSQL_PASSWORD: ${DB_PASSWORD}
volumes:
- db_data:/var/lib/mysql
- ./config/my.cnf:/etc/mysql/conf.d/custom.cnf:ro
command: '--default-authentication-plugin=mysql_native_password'
networks:
- wordpress-network
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 30s
timeout: 10s
retries: 5
wordpress:
depends_on:
db:
condition: service_healthy
image: wordpress:6-php8.2-apache
container_name: wordpress-app
restart: unless-stopped
ports:
- "8000:80"
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_NAME: ${DB_NAME}
WORDPRESS_DB_USER: ${DB_USER}
WORDPRESS_DB_PASSWORD: ${DB_PASSWORD}
WORDPRESS_TABLE_PREFIX: wp_
WORDPRESS_DEBUG: 0
volumes:
- wordpress_data:/var/www/html
- ./config/uploads.ini:/usr/local/etc/php/conf.d/uploads.ini:ro
networks:
- wordpress-network
volumes:
db_data:
driver: local
wordpress_data:
driver: local
networks:
wordpress-network:
driver: bridge
.env 파일 생성 (비밀번호 분리):
# .env 파일
DB_ROOT_PASSWORD=VerySecureRootPass2025!@#
DB_NAME=wordpress
DB_USER=wpuser
DB_PASSWORD=SecureWpPass2025!@#
🚀 Step 3: 컨테이너 실행
실행 명령어
# 프로젝트 디렉토리에서
cd ~/wordpress-project
# 백그라운드 실행
docker compose up -d
# 또는 로그 보면서 실행 (처음 실행 시 권장)
docker compose up
실행 과정:
- 네트워크 생성:
wordpress-project_wordpress-network - 볼륨 생성:
db_data,wordpress_data - MySQL 컨테이너 시작 (30초~1분 초기화)
- 워드프레스 컨테이너 시작
정상 출력 예시:
[+] Running 4/4
✔ Network wordpress-project_wordpress-network Created
✔ Volume "wordpress-project_db_data" Created
✔ Volume "wordpress-project_wordpress_data" Created
✔ Container wordpress-db Started
✔ Container wordpress-app Started
실행 확인
# 컨테이너 상태 확인
docker compose ps
# 또는
docker ps
정상 출력:
NAME IMAGE STATUS PORTS
wordpress-db mysql:8.0 Up 2 minutes 3306/tcp
wordpress-app wordpress:latest Up 1 minute 0.0.0.0:8000->80/tcp
로그 확인
# 전체 로그
docker compose logs
# 실시간 로그
docker compose logs -f
# 특정 서비스만
docker compose logs wordpress
docker compose logs db
# 최근 50줄
docker compose logs --tail=50
🌐 Step 4: 브라우저에서 워드프레스 접속
접속 URL
- 로컬:
http://localhost:8000 - 같은 네트워크:
http://192.168.0.100:8000(서버 IP)
워드프레스 설치 마법사
1단계: 언어 선택
[ 한국어 ]
Continue
2단계: 사이트 정보 입력
| 항목 | 입력 예시 | 설명 |
|---|---|---|
| 사이트 제목 | 내 홈서버 블로그 | 나중에 변경 가능 |
| 사용자명 | admin (비추천), myadmin (권장) | 로그인 ID |
| 비밀번호 | 강력한 비밀번호 생성 | 자동 생성된 것 사용 권장 |
| 이메일 | [email protected] | 알림 수신용 |
| 검색 엔진 노출 | ☑ 체크 해제 (테스트 중) | 나중에 활성화 |
3단계: WordPress 설치 클릭
4단계: 로그인
http://localhost:8000/wp-admin
사용자명: myadmin
비밀번호: (설정한 비밀번호)
✅ 관리자 대시보드 보이면 성공!
🎉 축하합니다! 내 홈서버에서 워드프레스가 작동 중입니다!
✍️ Step 5: 첫 글 작성 및 사이트 확인
1. 첫 글 작성
대시보드 → 글 → 새 글 추가
제목: 내 홈서버에서 첫 글!
내용: Docker로 만든 워드프레스에서 글을 쓰고 있습니다.
[ 공개 ] 클릭
2. 사이트 방문
http://localhost:8000
방금 쓴 글이 표시됨!
3. 퍼머링크 설정 (권장)
설정 → 고유주소
[ 글 이름 ] 선택
예: https://example.com/sample-post/
[ 변경사항 저장 ]
💾 Step 6: 데이터 영속성 테스트
테스트 시나리오
# 1. 글 작성 (위에서 완료)
# 2. 컨테이너 전체 중지 및 삭제
docker compose down
# 3. 다시 실행
docker compose up -d
# 4. 브라우저에서 확인
http://localhost:8000
# → 작성한 글이 그대로 있음! ✅
이유: 볼륨에 데이터가 저장되어 있기 때문
볼륨 확인
# 볼륨 목록
docker volume ls
# 상세 정보
docker volume inspect wordpress-project_wordpress_data
docker volume inspect wordpress-project_db_data
🔧 Step 7: Docker Compose 주요 명령어
기본 명령어
# 시작 (백그라운드)
docker compose up -d
# 중지 (컨테이너만 중지, 데이터 유지)
docker compose stop
# 재시작
docker compose restart
# 중지 + 삭제 (데이터는 유지)
docker compose down
# 완전 삭제 (데이터까지 삭제!) ⚠️
docker compose down -v
관리 명령어
# 상태 확인
docker compose ps
# 로그 보기
docker compose logs -f
# 특정 서비스만 재시작
docker compose restart wordpress
# 리소스 사용량
docker compose top
# 설정 파일 검증
docker compose config
업데이트
# 이미지 업데이트
docker compose pull
# 중지 → 삭제 → 재생성
docker compose down
docker compose up -d --build
⚙️ Step 8: 추가 설정 및 최적화
1. 업로드 파일 크기 제한 변경
# config/uploads.ini 파일 생성
mkdir -p config
cat > config/uploads.ini << 'EOF'
file_uploads = On
upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 600
EOF
# docker-compose.yml에 볼륨 추가 (위 프로덕션 버전 참고)
# 재시작
docker compose restart wordpress
2. MySQL 설정 최적화
# config/my.cnf 파일 생성
cat > config/my.cnf << 'EOF'
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
max_connections=50
innodb_buffer_pool_size=512M
EOF
# docker-compose.yml에 반영 후 재시작
docker compose restart db
3. 자동 백업 스크립트
# backup.sh 파일 생성
cat > backup.sh << 'EOF'
#!/bin/bash
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR=~/wordpress-project/backup
# DB 백업
docker compose exec -T db mysqldump -u root -pSecureRootPass2025! wordpress \
> $BACKUP_DIR/db_backup_$DATE.sql
# 워드프레스 파일 백업
docker run --rm \
-v wordpress-project_wordpress_data:/data \
-v $BACKUP_DIR:/backup \
alpine tar czf /backup/wp_files_$DATE.tar.gz /data
echo "Backup completed: $DATE"
EOF
chmod +x backup.sh
# 실행 테스트
./backup.sh
🚨 자주 발생하는 문제 해결
문제 1: "Error establishing database connection"
원인: MySQL 초기화 중 또는 연결 정보 오류
해결:
# 1. 로그 확인
docker compose logs db
# 2. MySQL "ready for connections" 확인될 때까지 대기 (30초~1분)
# 3. 환경 변수 확인
docker compose config
# 4. 재시작
docker compose restart
문제 2: 포트 8000 접속 안 됨
# 방화벽 확인
sudo ufw status
sudo ufw allow 8000
# 포트 사용 확인
sudo lsof -i :8000
# 다른 포트로 변경
# docker-compose.yml에서 "8000:80" → "8080:80"
문제 3: 볼륨 권한 문제
# 볼륨 소유자 확인
docker compose exec wordpress ls -la /var/www/html
# 권한 수정 (컨테이너 내부에서)
docker compose exec wordpress chown -R www-data:www-data /var/www/html
문제 4: 완전 초기화하고 싶을 때
# 주의: 모든 데이터 삭제됨!
docker compose down -v
docker volume rm wordpress-project_db_data
docker volume rm wordpress-project_wordpress_data
# 재시작
docker compose up -d
📝 정리하며
이번 글에서 배운 내용:
핵심 요약
- docker-compose.yml로 워드프레스 + MySQL 통합 관리
- 한 번의 명령어로 전체 시스템 실행:
docker compose up -d - 브라우저에서 워드프레스 설치 마법사 완료
- 볼륨으로 데이터 영속성 보장
- 첫 글 작성 및 사이트 확인
완성된 구성
| 구성요소 | 상태 |
|---|---|
| ✅ 리눅스 서버 | Ubuntu 22.04 LTS |
| ✅ Docker | 설치 완료 |
| ✅ MySQL | 8.0, 데이터 영속성 확보 |
| ✅ 워드프레스 | 최신 버전, 작동 중 |
| ✅ 첫 글 | 작성 완료! |
다음 단계
다음 글에서는 워드프레스를 본격적으로 꾸미는 방법을 다룬다:
- 테마 선택 및 설정
- 필수 플러그인 10가지
- 보안 강화 설정
- SEO 최적화 기초
- 백업 자동화
이제 진짜 블로거가 된 기분이다. ✍️
댓글 남기기