Docker로 워드프레스 설치하고 사이트 열기 – 드디어 시작

Docker로 워드프레스 설치하고 사이트 열기 – 드디어 시작!

이제 진짜 핵심이다.
앞에서 준비한 웹서버와 데이터베이스(MySQL)에 이어,
이번 글에서는 워드프레스를 도커로 설치하고 실제 사이트를 열어본다.

단 몇 줄의 docker-compose 설정만으로
내 방에서 돌아가는 블로그 플랫폼이 완성된다.

📦 워드프레스 Docker 구성 전략 2가지

방법 1: 워드프레스 단독 실행 (MySQL 별도)

이전 글에서 MySQL을 이미 설치한 경우

장점단점
MySQL을 다른 앱과 공유 가능네트워크 설정 복잡
개별 관리 가능컨테이너 연결 수동 설정

방법 2: Docker Compose로 통합 관리 ⭐ 권장

워드프레스 + MySQL을 하나의 구성으로 관리

장점단점
한 번에 실행/중지MySQL이 워드프레스 전용
설정 간편
네트워크 자동 구성
백업/복원 쉬움

결론: Docker Compose 방식 강력 추천!

🎯 이번 실습 목표

  1. docker-compose.yml 파일 작성
  2. 워드프레스 + MySQL 한 번에 실행
  3. 브라우저에서 워드프레스 설치 마법사 완료
  4. 첫 글 작성 및 사이트 확인
  5. 데이터 영속성 확인

📁 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):

항목설명
imagemysql:8.0사용할 이미지
container_namewordpress-db컨테이너 이름 지정
restartalways자동 재시작 (서버 재부팅 시에도)
environmentMYSQL_*DB 초기화 환경 변수
volumesdb_data:/var/lib/mysql데이터 영속 저장
networkswordpress-network연결할 네트워크

wordpress 서비스:

항목설명
depends_ondbdb 서비스 먼저 시작
ports“8000:80”호스트:컨테이너 포트 매핑
WORDPRESS_DB_HOSTdb:3306DB 연결 주소 (서비스명 사용)
volumeswordpress_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

실행 과정:

  1. 네트워크 생성: wordpress-project_wordpress-network
  2. 볼륨 생성: db_data, wordpress_data
  3. MySQL 컨테이너 시작 (30초~1분 초기화)
  4. 워드프레스 컨테이너 시작

정상 출력 예시:

[+] 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설치 완료
✅ MySQL8.0, 데이터 영속성 확보
✅ 워드프레스최신 버전, 작동 중
✅ 첫 글작성 완료!

다음 단계

다음 글에서는 워드프레스를 본격적으로 꾸미는 방법을 다룬다:

  • 테마 선택 및 설정
  • 필수 플러그인 10가지
  • 보안 강화 설정
  • SEO 최적화 기초
  • 백업 자동화

이제 진짜 블로거가 된 기분이다. ✍️

댓글 남기기

댓글 남기기

광고 차단 알림

광고 클릭 제한을 초과하여 광고가 차단되었습니다.

단시간에 반복적인 광고 클릭은 시스템에 의해 감지되며, IP가 수집되어 사이트 관리자가 확인 가능합니다.