ํ† . 8์›” 9th, 2025

๐ŸŒŸ ๋„์ž…: ์™œ Docker Compose๋กœ WordPress๋ฅผ ๊ตฌ์ถ•ํ• ๊นŒ?

Docker Compose๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•œ ์ค„์˜ ๋ช…๋ น์–ด๋กœ WordPress ์ „์ฒด ์ธํ”„๋ผ๋ฅผ ์ž๋™ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!
โœ… ์ „ํ†ต์ ์ธ ์„ค์น˜๋ณด๋‹ค 10๋ฐฐ ๋น ๋ฅธ ๊ตฌ์„ฑ
โœ… MySQL, PHP, ์›น ์„œ๋ฒ„ ์ข…์†์„ฑ ๋ฌธ์ œ ํ•ด๊ฒฐ
โœ… ๊ฐœ๋ฐœ/ํ…Œ์ŠคํŠธ/์šด์˜ ํ™˜๊ฒฝ ์ผ๊ด€์„ฑ ๋ณด์žฅ
โœจ “์ปจํ…Œ์ด๋„ˆ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜”์˜ ์ง„์ˆ˜๋ฅผ ๊ฒฝํ—˜ํ•ด๋ณด์„ธ์š”!


โš™๏ธ 1. ์‚ฌ์ „ ์ค€๋น„ ์‚ฌํ•ญ

ํ•„์ˆ˜ ๋„๊ตฌ ์„ค์น˜

# Docker & Docker Compose ์„ค์น˜ (Linux ๊ธฐ์ค€)
sudo apt update && sudo apt install docker.io docker-compose -y
sudo systemctl enable --now docker

๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ ์ค€๋น„

my-wordpress/
โ”œโ”€โ”€ docker-compose.yml   # ์„ค์ •์˜ ํ•ต์‹ฌ ํŒŒ์ผ
โ””โ”€โ”€ wp-data/             # WordPress ํŒŒ์ผ ์ €์žฅ (์ž๋™ ์ƒ์„ฑ)

๐Ÿงฉ 2. docker-compose.yml ํŒŒ์ผ ๊ตฌ์กฐ ๋ถ„์„

ํ•ต์‹ฌ ์ปดํฌ๋„ŒํŠธ

  1. MySQL ์ปจํ…Œ์ด๋„ˆ : ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—”์ง„
  2. WordPress ์ปจํ…Œ์ด๋„ˆ : ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜
  3. ๋ณผ๋ฅจ(Volume) : ๋ฐ์ดํ„ฐ ์˜๊ตฌ ์ €์žฅ
  4. ๋„คํŠธ์›Œํฌ(Network) : ์ปจํ…Œ์ด๋„ˆ ๊ฐ„ ํ†ต์‹ 

๐Ÿ›  3. ์‹ค์ „ docker-compose.yml ์˜ˆ์ œ

version: '3.8'

services:
  # MySQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋น„์Šค
  db:
    image: mysql:8.0
    volumes:
      - db_data:/var/lib/mysql    # DB ๋ฐ์ดํ„ฐ ์˜๊ตฌ ์ €์žฅ
    environment:
      MYSQL_ROOT_PASSWORD: my-secret-pw  # ๐Ÿ”‘ ๋ฃจํŠธ ๋น„๋ฐ€๋ฒˆํ˜ธ
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wpuser
      MYSQL_PASSWORD: wppass
    networks:
      - wordpress_net

  # WordPress ์„œ๋น„์Šค
  wordpress:
    image: wordpress:latest
    depends_on:
      - db   # DB ์„œ๋น„์Šค ์‹œ์ž‘ ํ›„ ์‹คํ–‰
    ports:
      - "8000:80"   # ๐ŸŒ ํ˜ธ์ŠคํŠธ 8000ํฌํŠธ → ์ปจํ…Œ์ด๋„ˆ 80ํฌํŠธ
    volumes:
      - wp_data:/var/www/html   # ์›น์‚ฌ์ดํŠธ ํŒŒ์ผ ์ €์žฅ
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: wpuser
      WORDPRESS_DB_PASSWORD: wppass
      WORDPRESS_DB_NAME: wordpress
    networks:
      - wordpress_net

# ๋ณผ๋ฅจ ์ •์˜ (๋ฐ์ดํ„ฐ ์˜๊ตฌํ™”)
volumes:
  db_data:   # MySQL ๋ฐ์ดํ„ฐ
  wp_data:   # WordPress ์„ค์น˜ ํŒŒ์ผ

# ์ปค์Šคํ…€ ๋„คํŠธ์›Œํฌ
networks:
  wordpress_net:
    driver: bridge

๐Ÿ” ํ•ต์‹ฌ ์„ค์ • ํ•ด์„ค

  • depends_on : DB ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋จผ์ € ์‹คํ–‰๋˜๋„๋ก ๋ณด์žฅ
  • environment : ์ปจํ…Œ์ด๋„ˆ ํ™˜๊ฒฝ๋ณ€์ˆ˜ (๋ณด์•ˆ ์ฃผ์˜!)
  • volumes : ํ˜ธ์ŠคํŠธ ์„œ๋ฒ„์— ๋ฐ์ดํ„ฐ ์ €์žฅ โ†’ ์ปจํ…Œ์ด๋„ˆ ์žฌ์ƒ์„ฑ ์‹œ ์œ ์ง€
  • ports : ํ˜ธ์ŠคํŠธํฌํŠธ:์ปจํ…Œ์ด๋„ˆํฌํŠธ ๋งคํ•‘

๐Ÿš€ 4. ์‹คํ–‰ & ์šด์˜ ๋ช…๋ น์–ด

์‹œ์ž‘ํ•˜๊ธฐ

docker-compose up -d  # ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์‹คํ–‰
  • ์ ‘์† ์ฃผ์†Œ: http://์„œ๋ฒ„IP:8000

์ƒํƒœ ํ™•์ธ

docker-compose ps  # ์„œ๋น„์Šค ์ƒํƒœ ํ™•์ธ
       Name              Command          State          Ports       
--------------------------------------------------------------------
mywordpress_db_1       docker-entrypoint.sh mysqld   Up      3306/tcp
mywordpress_wordpress  docker-entrypoint.sh apach ... Up      0.0.0.0:8000->80/tcp

์ •์ง€ ๋ฐ ์‚ญ์ œ

docker-compose down   # ์ปจํ…Œ์ด๋„ˆ ์ค‘์ง€
docker-compose down -v  # ๐Ÿ”ฅ ๋ณผ๋ฅจ๊นŒ์ง€ ์™„์ „ ์‚ญ์ œ (์ฃผ์˜!)

๐Ÿงช 5. ๊ณ ๊ธ‰ ์„ค์ • ํŒ

1. ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณด์•ˆ ๊ฐ•ํ™”

.env ํŒŒ์ผ ์ƒ์„ฑ ํ›„:

MYSQL_ROOT_PASSWORD=SuperSecret123!
WORDPRESS_DB_PASSWORD=StrongPass456@

docker-compose.yml์—์„œ ์ฐธ์กฐ:

environment:
  MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}

2. WordPress ์„ค์ • ์ปค์Šคํ„ฐ๋งˆ์ด์ง•

wordpress:
  environment:
    WORDPRESS_CONFIG_EXTRA: |
      define('WP_DEBUG', true); 
      define('WP_MEMORY_LIMIT', '256M');

3. Nginx ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ ์ถ”๊ฐ€

services:
  nginx:
    image: nginx:alpine
    ports:
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      - wordpress

๐Ÿ›ก๏ธ 6. ๋ฌธ์ œ ํ•ด๊ฒฐ ๊ฐ€์ด๋“œ

๐Ÿ’ก ๋นˆ๋ฒˆํ•œ ์ด์Šˆ ๋Œ€์‘๋ฒ•

  1. ํฌํŠธ ์ถฉ๋Œ
    ERROR: Port 8000 is already in use
    โ†’ ports: ๊ฐ’์„ "8080:80"์œผ๋กœ ๋ณ€๊ฒฝ

  2. ๊ถŒํ•œ ๋ฌธ์ œ
    Unable to create directory 'wp-content/uploads'
    โ†’ ํ˜ธ์ŠคํŠธ์—์„œ chmod -R 777 wp-data/ ์‹คํ–‰

  3. DB ์—ฐ๊ฒฐ ์‹คํŒจ
    Error establishing a database connection
    โ†’ docker-compose restart db๋กœ DB ์žฌ์‹œ์ž‘


๐ŸŽฏ ๋งˆ๋ฌด๋ฆฌ: Docker Compose์˜ ์žฅ์  ์š”์•ฝ

  • ๐Ÿš€ 5๋ถ„ ๋‚ด ํ”„๋กœ๋•์…˜๊ธ‰ WordPress ๊ตฌ์ถ•
  • ๐Ÿ”„ ๋ฒ„์ „ ๊ด€๋ฆฌ ์šฉ์ดdocker-compose.yml ํŒŒ์ผ๋กœ ์ธํ”„๋ผ ์ฝ”๋“œํ™”
  • ๐Ÿ“ฆ ์˜์กด์„ฑ ๋ฌธ์ œ ํ•ด๊ฒฐ – ๋ชจ๋“  ํ™˜๊ฒฝ์—์„œ ๋™์ผํ•œ ๋™์ž‘ ๋ณด์žฅ
  • ๐Ÿ†“ ๋ฌด๋ฃŒ ์˜คํ”ˆ์†Œ์Šค – ์ถ”๊ฐ€ ๋น„์šฉ ์—†์ด ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ๊ธ‰ ๊ธฐ์ˆ  ํ™œ์šฉ

> ๐Ÿ’ฌ ๋งˆ์ง€๋ง‰ ์กฐ์–ธ:
> docker-compose.yml ํŒŒ์ผ์€ ๋ฐ˜๋“œ์‹œ ๋ฒ„์ „ ๊ด€๋ฆฌ(Git)์— ์ €์žฅํ•˜์„ธ์š”!
> docker-compose up -d ํ•œ ๋ฒˆ์œผ๋กœ ์–ธ์ œ๋“  ์žฌ๊ตฌ์ถ•์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

# ์ตœ์ข… ์‹คํ–‰ ์‹œํ€€์Šค
mkdir my-wp && cd my-wp
nano docker-compose.yml  # ์œ„ ์˜ˆ์ œ ๋‚ด์šฉ ๋ณต์‚ฌ
docker-compose up -d     # ์„ธ๊ณ„์—์„œ ๊ฐ€์žฅ ๋น ๋ฅธ WordPress ์„ค์น˜!

์ด์ œ ๋ธŒ๋ผ์šฐ์ €์—์„œ http://localhost:8000์„ ์—ด๊ณ  ์„ค์น˜๋ฅผ ์™„๋ฃŒํ•˜์„ธ์š”! ๐ŸŽ‰ D

๋‹ต๊ธ€ ๋‚จ๊ธฐ๊ธฐ

์ด๋ฉ”์ผ ์ฃผ์†Œ๋Š” ๊ณต๊ฐœ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•„์ˆ˜ ํ•„๋“œ๋Š” *๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค