IT기술/도커 (docker)

Docker WordPress와 MySQL 연동 완벽 가이드: 컨테이너 기반 웹사이트 구축

후스파 2025. 7. 6. 07:33
반응형

이번 포스팅에서는 도커를 사용하여 워드프레스와 MySQL 컨테이너를 연동하는 방법을 상세히 알아보겠습니다. 이 과정은 웹사이트를 구축하는 데 필수적인 단계이며, 도커의 장점을 최대한 활용할 수 있습니다.


네트워크 생성

워드프레스와 MySQL 컨테이너가 서로 통신할 수 있도록 가상 네트워크를 생성해야 합니다. 다음은 네트워크를 생성하는 과정입니다:

# 현재 네트워크 목록 확인
docker network ls

출력 예시:

NETWORK ID     NAME      DRIVER    SCOPE
484e0612cb97   bridge    bridge    local
c30ea96f3f05   host      host      local
f425b0135de3   none      null      local
# 새로운 네트워크 생성
docker network create wordpress_net1

네트워크 생성 후 목록 재확인:

docker network ls

출력 결과:

NETWORK ID     NAME             DRIVER    SCOPE
484e0612cb97   bridge           bridge    local
c30ea96f3f05   host             host      local
f425b0135de3   none             null      local
e1c93726601d   wordpress_net1   bridge    local

여기서 wordpress_net1이라는 새로운 네트워크가 생성된 것을 확인할 수 있습니다.


MySQL 컨테이너 생성 및 실행

워드프레스에서 사용할 MySQL 컨테이너를 생성하고 실행합니다. MySQL의 버전은 8.4로 지정하여 mysql_native_password를 설정합니다:

docker run --name mysql001 -dit --net=wordpress_net1 -p 33060:3306 \
-e MYSQL_ROOT_PASSWORD=admin123 \
-e MYSQL_DATABASE=wordpressdb \
-e MYSQL_USER=wordpress \
-e MYSQL_PASSWORD=wordpresspw mysql:8.4 \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_unicode_ci \
--mysql_native_password=ON

실행 결과:

Unable to find image 'mysql:8.4' locally
8.4: Pulling from library/mysql
f7fa64c7935f: Already exists 
81ebfd74dcb5: Already exists 
d08c5512fe2f: Already exists 
0fe89fd72816: Already exists 
fc3cf76a534a: Already exists 
fa2668a8281b: Pull complete 
5bd440e2669c: Pull complete 
81b6a9cf642c: Pull complete 
e521efae22b3: Pull complete 
babc7aaaa095: Pull complete 
Digest: sha256:1d967fb75a64dc3c2894c69285becfc2304ae0c3c4f4c715c297f3c12d60b01c
Status: Downloaded newer image for mysql:8.4

이 명령어를 실행하면 MySQL 이미지가 로컬에 없을 경우 자동으로 다운로드가 시작됩니다. 다운로드가 완료되면 MySQL 컨테이너가 실행됩니다.

MySQL 컨테이너 옵션 상세 설명

--name mysql001컨테이너 이름 지정
--net=wordpress_net1생성한 네트워크에 연결
-p 33060:3306호스트 포트 33060을 컨테이너 포트 3306에 매핑
-e MYSQL_ROOT_PASSWORDMySQL 루트 사용자 비밀번호 설정
-e MYSQL_DATABASE초기 데이터베이스 생성
-e MYSQL_USER일반 사용자 계정 생성
-e MYSQL_PASSWORD일반 사용자 비밀번호 설정

워드프레스 컨테이너 생성 및 실행

이제 워드프레스 컨테이너를 생성하고 실행해보겠습니다. MySQL 컨테이너와 연동하기 위해 필요한 환경 변수를 설정합니다:

docker run --name wordpress001 -dit --net=wordpress_net1 -p 8088:80 \
-e WORDPRESS_DB_HOST=mysql001 \
-e WORDPRESS_DB_NAME=wordpressdb \
-e WORDPRESS_DB_USER=wordpress \
-e WORDPRESS_DB_PASSWORD=wordpresspw wordpress

실행 결과:

Unable to find image 'wordpress:latest' locally
latest: Pulling from library/wordpress
7ce705000c39: Already exists 
48015c6e07fa: Pull complete 
69f6eaa105a9: Pull complete 
4e3f24c5a85b: Pull complete 
37b226d860af: Pull complete 
4cc75481d6ff: Pull complete 
596177a782ea: Pull complete 
7f5ab0905a27: Pull complete 
de4185ddd634: Pull complete 
6ce3fb9c7e91: Pull complete 
2d5674fe59ce: Pull complete 
0a581af15f84: Pull complete 
c2df47e565b9: Pull complete 
4f4fb700ef54: Pull complete 
8035c449c85f: Pull complete 
9f5deabc6298: Pull complete 
ac68beb5607b: Pull complete 
f8c951fb3bc4: Pull complete 
caf4c9991abf: Pull complete 
c1416a809e9f: Pull complete 
5628e8dca1ea: Pull complete 
cc1b04a38780: Pull complete 
Digest: sha256:b60e01ce06202c836b46d54cb3eceba3a6f30950491e6805ce17d840ff6943c0
Status: Downloaded newer image for wordpress:latest

워드프레스 이미지도 마찬가지로 로컬에 없을 경우 다운로드가 진행됩니다. 다운로드가 완료되면 워드프레스 컨테이너가 실행됩니다.

워드프레스 컨테이너 환경 변수 설명

WORDPRESS_DB_HOSTMySQL 컨테이너 이름 (mysql001)
WORDPRESS_DB_NAME연결할 데이터베이스 이름
WORDPRESS_DB_USER데이터베이스 사용자 이름
WORDPRESS_DB_PASSWORD데이터베이스 사용자 비밀번호

컨테이너 상태 확인

현재 실행 중인 컨테이너의 상태를 확인해보겠습니다:

docker ps -a

출력 예시:

CONTAINER ID   IMAGE        COMMAND                   CREATED          STATUS        PORTS                                NAMES
8f37d6109be9   wordpress    "docker-entrypoint.s…"   57 seconds ago   Up 55 seconds 0.0.0.0:8088->80/tcp                 wordpress001
b0de500f2fe1   mysql:8.4    "docker-entrypoint.s…"   6 minutes ago    Up 6 minutes  33060/tcp, 0.0.0.0:33060->3306/tcp   mysql001

여기서 두 개의 컨테이너가 정상적으로 실행 중임을 확인할 수 있습니다. 각각의 컨테이너 이름과 상태, 포트 정보도 함께 확인할 수 있습니다.

컨테이너 로그 확인

# 워드프레스 컨테이너 로그 확인
docker logs wordpress001

# MySQL 컨테이너 로그 확인
docker logs mysql001

# 실시간 로그 모니터링
docker logs -f wordpress001

웹페이지 확인

컨테이너가 정상적으로 실행되고 있다면, 웹 브라우저에서 http://localhost:8088로 접속하여 워드프레스 설치 페이지를 확인할 수 있습니다. 설치 과정을 따라 진행하면 워드프레스를 사용할 준비가 완료됩니다.

워드프레스 초기 설정 과정

  1. 언어 선택: 한국어 또는 원하는 언어 선택
  2. 데이터베이스 연결 정보 확인: 자동으로 설정됨
  3. 사이트 정보 입력:
    • 사이트 제목
    • 관리자 사용자명
    • 관리자 비밀번호
    • 관리자 이메일
  4. 설치 완료 및 로그인

사용하지 않는 자원 정리

마지막으로 사용하지 않는 컨테이너, 이미지, 네트워크를 정리하는 방법을 알아보겠습니다. 컨테이너와 이미지를 삭제할 때는 stop과 rm 명령어를 사용합니다.

네트워크 정리

네트워크를 정리할 때는 다음 명령어를 사용할 수 있습니다:

docker network prune

실행 결과:

WARNING! This will remove all custom networks not used by at least one container.
Are you sure you want to continue? [y/N] y
Deleted Networks:
wordpress_net1

이 명령어는 사용하지 않는 네트워크를 삭제합니다. 삭제하기 전에 확인 메시지가 나오므로, y를 입력하여 삭제를 진행합니다.

컨테이너 및 이미지 정리

# 컨테이너 중지 및 삭제
docker stop wordpress001 mysql001
docker rm wordpress001 mysql001

# 사용하지 않는 이미지 삭제
docker image prune

# 전체 시스템 정리
docker system prune -a

Docker Compose를 활용한 개선된 방법

docker-compose.yml 파일 작성

version: '3.8'

services:
  mysql:
    image: mysql:8.4
    container_name: mysql001
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: admin123
      MYSQL_DATABASE: wordpressdb
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpresspw
    command: >
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_unicode_ci
      --mysql_native_password=ON
    volumes:
      - mysql_data:/var/lib/mysql
    networks:
      - wordpress_net1

  wordpress:
    image: wordpress:latest
    container_name: wordpress001
    restart: always
    ports:
      - "8088:80"
    environment:
      WORDPRESS_DB_HOST: mysql001
      WORDPRESS_DB_NAME: wordpressdb
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpresspw
    volumes:
      - wordpress_data:/var/www/html
    networks:
      - wordpress_net1
    depends_on:
      - mysql

volumes:
  mysql_data:
  wordpress_data:

networks:
  wordpress_net1:
    driver: bridge

Docker Compose 실행

# 서비스 시작
docker-compose up -d

# 서비스 중지
docker-compose down

# 볼륨까지 삭제
docker-compose down -v

결론

이제 워드프레스와 MySQL 컨테이너가 성공적으로 연동되어 실행되고 있습니다. 도커를 통해 손쉽게 웹사이트를 구축하고 관리할 수 있는 방법을 배웠습니다.
핵심 포인트:

  • 커스텀 네트워크 생성을 통한 컨테이너 간 안전한 통신
  • MySQL 8.4 버전 사용으로 최신 보안 기능 활용
  • 환경 변수 설정을 통한 데이터베이스 연결 자동화
  • 포트 매핑을 통한 외부 접근 허용
  • Docker Compose 활용으로 관리 효율성 극대화

도커 컨테이너 기술을 활용하면 개발 환경과 운영 환경의 일관성을 보장하고, 확장성과 유지보수성을 크게 향상시킬 수 있습니다.

반응형