Windows

윈도우 11 홈에 도커로 워드프레스 설치 (데이터는 D 에 저장)

Ryan's Tech Note 2025. 5. 15. 20:24

 

https://saju.choeum.com/pos/front/sjuF0101.do?ref=s_BwgZAV1CS2tVJUAFBwEHCjMAAAAAbUJXUg

 

처음 사주 - 인생 7포인트

2026년 성공하는 시기·성향·연애운·금전운·10년 운까지 한눈에

saju.choeum.com

 


 

도커의 개념도 약했고, 윈도우 11 홈의 여러가지 제약 사항 때문에 데이터가 계속 C 드라이브에 생성되서, D 드라이브에 저장하도록 세팅하는데 삽질을 꽤 했는데 방법을 기록으로 남겨 놓는다. 워드프레스를 처음엔 성능을 위해 우분투에 설치하려 했는데, 관리 시간을 줄이기 위해 여러모로 윈도우가 더 낫겠다는 최종결론에 이르러 윈도우에 설치하기로 결정하였다.

 

윈도우 11 홈에서는 도커 실행시 Windows 컨테이너 실행 불가하고 Linux 컨테이너만 실행가능하다.

또한, Hyper-V 백엔드 사용 불가하고, WSL 2 백엔드만 사용 가능하다.

이게 다 뭔소린가 싶다면, 도커가 윈도우 호스트에서 각종 이미지를 실행하기 위해 OS 가상화가 필요한 것인데, 홈 버전에선 윈도우 기반 가상화가 안되고 Linux 기반 가상화만 된다는 것이다. 기능 제약이 있다.

 

그래서, Linux 기반 가상화를 위해 Microsoft에서 제공하는 WSL 2를 설치해야 한다. 그런데 WSL 2가 도커 설치파일에 포함되지 않은 이유는 WSL 2가 Windows의 핵심 시스템 구성요소이기 때문이다. 시스템 구성요소는 사용자 동의가 필요한 별도 설치가 원칙이다. 또한 Microsoft와 Docker는 각자 자기 제품의 업데이트와 관리를 독립적으로 하고 싶어한다. Microsoft는 WSL을, Docker는 Docker를 각자 책임지는 구조라서 별도로 설치하게 되어 있는 것이다. 이건 단순한 계약 관계가 아니라 기술적/구조적 이유가 더 크다.

 

그럼 도커 홈페이지에서 윈도우 최신 버전을 설치한 이후 WSL2 를 설치한다.

CMD 창에 다음 명령어를 입력한다.

 

wsl --install -d Ubuntu

 

이후, 다음과 같이 Ubuntu 버튼이 생성되는데 활성화한다. (안 보이는 경우 도커를 트레이에서 종료하고 재시작)

 

 

이후 D 드라이브에 도커 루트를 생성하고, wsl 폴더를 생성한 후 선택해서, 다음과 같이 설정해준다.

D:\docker 로 생성해도 되는데, 나의 경우 혹시라도 실수로 지우지 않도록 경각심을 주기 위해 docker.root 라고 붙여주었다.

 

 

참고로, 이 곳은 초기 설정 그대로 두고, 별도의 수정을 하지 않는다.

 

그리고, 다음과 같이 yaml 파일을 생성해준다.

 

.env 에는 비밀번호 설정 등이 들어가 있는데 yaml 에 직접 기입하지 않은 이유는, AI 등에 yaml 파일을 질의할 때 내 비밀번호 등이 업로드되서 학습되기 때문에 파일 밖으로 두고 읽어오게 한 것이다.

 

docker-compose.yaml

services:
  # MariaDB 10.11 LTS 컨테이너 (워드프레스 권장 버전)
  db:
    image: mariadb:10.11
    container_name: wordpress_mariadb
    restart: always
    volumes:
      - nv_wordpress_database:/var/lib/mysql
      - nv_wordpress_mariadb_logs:/var/log/mysql # 로그 외부화
    environment:
      MYSQL_ROOT_PASSWORD: "${ROOT_PASSWORD}"
      MYSQL_DATABASE: "${DB_NAME}"
      MYSQL_USER: "${DB_USER}"
      MYSQL_PASSWORD: "${USER_PASSWORD}"
    networks:
      - wordpress_net
    command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    user: mysql # root가 아닌 mysql 사용자로 실행 (보안 강화)

  # 도커 허브 공식 WordPress 이미지
  wordpress:
    image: wordpress:latest
    container_name: wordpress_was
    depends_on:
      - db
    restart: always
    ports:
      - "80:80" # 8080 포트로 접속
    volumes:
      - nv_wordpress_html:/var/www/html
      - nv_wordpress_apache_logs:/var/log/apache2 # 아파치 로그 외부화
      - nv_wordpress_php_logs:/var/log/php # PHP 로그 외부화
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_NAME: "${DB_NAME}"
      WORDPRESS_DB_USER: "${DB_USER}"
      WORDPRESS_DB_PASSWORD: "${USER_PASSWORD}"
    networks:
      - wordpress_net
    user: www-data # root가 아닌 www-data 사용자로 실행 (보안 강화)

volumes:
  nv_wordpress_database:
  nv_wordpress_mariadb_logs:
  nv_wordpress_html:
  nv_wordpress_apache_logs:
  nv_wordpress_php_logs:

networks:
  wordpress_net:​
윈도우 11 홈에 도커로 워드프레스 설치 (데이터는 D 드라이브에 저장되도록)

 

.env

DB_NAME=<<사용할 DB명>>
DB_USER=<<사용할 사용자명>
ROOT_PASSWORD=<<사용할 mariadb root 비밀번호>>
USER_PASSWORD=<<사용할 mariadb 사용자계정 비밀번호>>

 

다음과 같이 생성한다.

 

이미지와 볼륨(named volumn) 이 생성되었다.

 

 

 

 

 

브라우저에서 정상 작동한다.

 


 

여기서 named volumn 을 사용한 이유는 다음과 같다.

(1) 이미지 내부에 데이터 저장 - 이미지를 버전 업데이트 할 때 데이터가 모두 삭제됨

(2) 이미지에 named volumn 으로 데이터 저장 - 이미지 업데이트 할 때 데이터도 유지되고, 마이그레이션도 편리함

(3) 이미지 외부에 데이터 저장 (윈도우 경로) - 윈도우로 운영하다 마이그레이션 할 때 복잡함

 

이미지와 볼륨을 C의 디폴트 경로가 아닌 D로 한 이유는, 운영체제와 데이터 드라이브를 분리하기 위한 목적도 있고, 데이터 백업을 쉽게 하기 위해서이다. C 디폴트 경로는 찾기도 힘들다. 가령 D:\docker.root 만 robocopy 로 일 1회 스케쥴러 설정을 해서 다른 드라이브로 복사하도록 설정해 놓으면 매일 백업을 간편하게 할 수 있고, nvme ssd가 갑자기 고장나더라도 이 폴더만 그대로 복사해서 실행시키면 되니 장애시간을 최소화 할 수 있다. HDD는 고장나더라도 데이터 복구업체에서 복구 시도라도 할 수 있지만 nvme 는 그 특성상 고장나면 데이터가 복구 불가능하게 모두 휘발된다. 그래서, 운영서버라면 이렇게 간편한 백업이 필수인 것이다.

 


 

이 문서가 도움이 되었다면 좋아요 댓글 부탁 드립니다. ^^

 

https://saju.choeum.com/pos/front/sjuF0101.do?ref=s_BwgZAV1CS2tVJUAFBwEHCjMAAAAAbUJXUg

 

처음 사주 - 인생 7포인트

2026년 성공하는 시기·성향·연애운·금전운·10년 운까지 한눈에

saju.choeum.com