216.73.216.25 TODAY : 2,894
์ž๋ฃŒ์‹ค ์„œ๋ธŒ ํƒ€์ดํ‹€ ์•„์ด์ฝ˜

์˜จ๋ผ์ธ ๊ฐ•์˜

 > 

PHP - ์ตœ์ƒ๊ธ‰

๐Ÿ“š PHP ์ตœ์ƒ๊ธ‰ - 3์ฃผ์ฐจ: ์ปจํ…Œ์ด๋„ˆ ๊ธฐ์ˆ  (Docker) ํ™œ์šฉ- 03 Docker Compose๋ฅผ ์ด์šฉํ•œ ๋‹ค์ค‘ ์ปจํ…Œ์ด๋„ˆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜

๐Ÿ“š PHP ์ตœ์ƒ๊ธ‰ - 3์ฃผ์ฐจ: ์ปจํ…Œ์ด๋„ˆ ๊ธฐ์ˆ  (Docker) ํ™œ์šฉ- 03 Docker Compose๋ฅผ ์ด์šฉํ•œ ๋‹ค์ค‘ ์ปจํ…Œ์ด๋„ˆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜

์ฃผ์š” ํ”„๋กœ๊ทธ๋žจ ์ŠคํŽ™

  • ํ‰์ : 10.0
  • ๋ผ์ด์„ ์Šค: free
  • ์šด์˜์ฒด์ œ:
  • ํŒŒ์ผ ํฌ๊ธฐ: 0

ํ”ผ๋“œ๋ฐฑ ๋ฐ ๋‹ค์šด๋กœ๋“œ

  • ์‚ฌ์šฉ์ž ํ‰์ : 10.0
  • ๋‹ค์šด๋กœ๋“œ ์ˆ˜: 1
  • ์กฐํšŒ์ˆ˜: 48

์ œ์กฐ์‚ฌ ๋ฐ ๋“ฑ๋ก ์ •๋ณด

  • ์ œ์ž‘์‚ฌ: LUZENSOFT
  • ๋“ฑ๋ก์ผ: 2025-10-10 14:19:20
  •  

- ์„ค๋ช…

๋‹ค์ค‘ ์ปจํ…Œ์ด๋„ˆ ํ™˜๊ฒฝ์˜ ํ•„์š”์„ฑ: #DockerCompose ์ดํ•ดํ•˜๊ธฐ

uploadImage


์ง€๋‚œ ์‹œ๊ฐ„๊นŒ์ง€ ์šฐ๋ฆฌ๋Š” ๋‹จ์ผ #PHP์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ ์œ„ํ•œ #Docker์ด๋ฏธ์ง€ ๋ฅผ ์„ฑ๊ณต์ ์œผ๋กœ ๋นŒ๋“œํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์‹ค์ œ ์›น ์„œ๋น„์Šค๋Š” ์›น ์„œ๋ฒ„(Nginx/Apache), #PHP-FPM, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(MySQL/PostgreSQL), ์บ์‹œ(Redis/Memcached) ๋“ฑ ์ตœ์†Œ 3~4๊ฐœ์˜ ๊ฐœ๋ณ„ ์„œ๋น„์Šค๊ฐ€ ์œ ๊ธฐ์ ์œผ๋กœ ๊ฒฐํ•ฉ๋˜์–ด ๋™์ž‘ํ•˜๋Š” ๋‹ค์ค‘ ์ปจํ…Œ์ด๋„ˆ ํ™˜๊ฒฝ์ž…๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋ณต์žกํ•œ ํ™˜๊ฒฝ์„ ๊ฐœ๋ณ„์ ์ธ docker run ๋ช…๋ น์–ด๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์€ ๋น„ํšจ์œจ์ ์ด๊ณ  ์˜ค๋ฅ˜ ๋ฐœ์ƒ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค. #DockerCompose ๋Š” ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ํƒ„์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

#DockerCompose ๋Š” YAML ํŒŒ์ผ ํ•˜๋‚˜๋ฅผ ํ†ตํ•ด ์ „์ฒด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„œ๋น„์Šค ๊ตฌ์„ฑ, ๋„คํŠธ์›Œํฌ ์„ค์ •, ๋ณผ๋ฅจ(๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ)์„ ํ•œ ๋ฒˆ์— ์ •์˜ํ•˜๊ณ , ๋‹จ ํ•˜๋‚˜์˜ ๋ช…๋ น์œผ๋กœ ๋ชจ๋“  ์„œ๋น„์Šค๋ฅผ ๋™์‹œ์— ๋นŒ๋“œํ•˜๊ณ  ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ค์ •์˜ ๋ณต์žก์„ฑ์„ ํš๊ธฐ์ ์œผ๋กœ ๋‚ฎ์ถฐ์ค๋‹ˆ๋‹ค.



Docker Compose ํŒŒ์ผ (docker-compose.yml) ๊ธฐ๋ณธ ๊ตฌ์กฐ

uploadImage


#DockerCompose ํŒŒ์ผ์€ ์ผ๋ฐ˜์ ์œผ๋กœ docker-compose.yml์ด๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ์— ์œ„์น˜ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€์žฅ ํ•ต์‹ฌ์ ์ธ ์„ธ ๊ฐ€์ง€ ์š”์†Œ๋Š” version, services, volumes, networks์ž…๋‹ˆ๋‹ค.


1. services (ํ•ต์‹ฌ ์„œ๋น„์Šค ์ •์˜)


์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ฐ ์ปจํ…Œ์ด๋„ˆ ์„œ๋น„์Šค๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค

  • build: #Dockerfile ์ด ์œ„์น˜ํ•œ ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•˜์—ฌ ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค

  • image: ์ด๋ฏธ ๋นŒ๋“œ๋œ #DockerHub ์ด๋ฏธ์ง€ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค

  • ports: ํ˜ธ์ŠคํŠธ ๋จธ์‹ ๊ณผ ์ปจํ…Œ์ด๋„ˆ ํฌํŠธ๋ฅผ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค (ํ˜ธ์ŠคํŠธํฌํŠธ:์ปจํ…Œ์ด๋„ˆํฌํŠธ)

  • volumes: ์˜๊ตฌ์ ์ธ ๋ฐ์ดํ„ฐ ์ €์žฅ์„ ์œ„ํ•ด ํ˜ธ์ŠคํŠธ ๋””๋ ‰ํ† ๋ฆฌ๋‚˜ ๋ช…๋ช…๋œ ๋ณผ๋ฅจ์„ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค

  • depends_on: ์„œ๋น„์Šค ๊ฐ„์˜ ์ข…์†์„ฑ์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค (์˜ˆ: web์€ db๊ฐ€ ๋จผ์ € ์‹œ์ž‘๋˜์–ด์•ผ ํ•จ)


2. networks (์ปจํ…Œ์ด๋„ˆ ๊ฐ„ ํ†ต์‹  ํ™˜๊ฒฝ)


์ปจํ…Œ์ด๋„ˆ ๊ฐ„ ํ†ต์‹ ์„ ์œ„ํ•œ ๊ฐ€์ƒ ๋„คํŠธ์›Œํฌ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. #DockerCompose ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชจ๋“  ์„œ๋น„์Šค๊ฐ€ ํ•˜๋‚˜์˜ ๋„คํŠธ์›Œํฌ์— ์—ฐ๊ฒฐ๋˜์–ด ์„œ๋กœ ์„œ๋น„์Šค ์ด๋ฆ„์œผ๋กœ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.



์‹ค์Šต: LAMP ์Šคํƒ (Nginx + PHP + MySQL) ๊ตฌ์„ฑํ•˜๊ธฐ

uploadImage


์ด์ œ #DockerCompose ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ์›น ํ™˜๊ฒฝ์ธ Nginx(์›น ์„œ๋ฒ„), PHP-FPM(์• ํ”Œ๋ฆฌ์ผ€์ด์…˜), **MySQL(๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค)**์„ ๊ฒฐํ•ฉํ•œ ์Šคํƒ์„ ๊ตฌ์„ฑํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

docker-compose.yml

YAML

version: '3.8'

services:
  # 1. PHP-FPM ์„œ๋น„์Šค ์ •์˜
  app:
    build:
      context: .
      dockerfile: Dockerfile  # ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ์˜ Dockerfile ์‚ฌ์šฉ
    container_name: php-app
    restart: always
    volumes:
      - .:/var/www/html # ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์›น ๋ฃจํŠธ์™€ ์—ฐ๊ฒฐ
    networks:
      - app-network

  # 2. Nginx ์›น ์„œ๋ฒ„ ์„œ๋น„์Šค ์ •์˜
  web:
    image: nginx:stable-alpine
    container_name: web-server
    restart: always
    ports:
      - "8080:80" # ํ˜ธ์ŠคํŠธ์˜ 8080 ํฌํŠธ์™€ ์ปจํ…Œ์ด๋„ˆ์˜ 80 ํฌํŠธ ์—ฐ๊ฒฐ
    volumes:
      - .:/var/www/html # PHP ์ปจํ…Œ์ด๋„ˆ์™€ ๋™์ผํ•œ ์ฝ”๋“œ ๋ณผ๋ฅจ ์—ฐ๊ฒฐ
      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf # Nginx ์„ค์ • ํŒŒ์ผ ์—ฐ๊ฒฐ
    depends_on:
      - app
    networks:
      - app-network

  # 3. MySQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋น„์Šค ์ •์˜
  db:
    image: mysql:8.0
    container_name: mysql-db
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root_password
      MYSQL_DATABASE: my_app_db
    volumes:
      - dbdata:/var/lib/mysql # ์˜๊ตฌ ๋ฐ์ดํ„ฐ ์ €์žฅ์„ ์œ„ํ•œ ๋ช…๋ช…๋œ ๋ณผ๋ฅจ ์‚ฌ์šฉ
    networks:
      - app-network

# ๋ณผ๋ฅจ ์ •์˜ (๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐ์ดํ„ฐ๋ฅผ ์˜๊ตฌ์ ์œผ๋กœ ์ €์žฅ)
volumes:
  dbdata:

# ๋„คํŠธ์›Œํฌ ์ •์˜ (๋ชจ๋“  ์„œ๋น„์Šค๊ฐ€ ์ด ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ํ†ต์‹ )
networks:
  app-network:
    driver: bridge


๐Ÿ’ก ํ†ต์‹  ์›๋ฆฌ


web ์ปจํ…Œ์ด๋„ˆ(Nginx)๋Š” #PHP์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์„œ๋น„์Šค ์ด๋ฆ„์ธ app์„ ํ†ตํ•ด ์ ‘๊ทผํ•ฉ๋‹ˆ๋‹ค (์˜ˆ: fastcgi_pass app:9000;). ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ปจํ…Œ์ด๋„ˆ ์—ญ์‹œ app ์ปจํ…Œ์ด๋„ˆ์—์„œ ์„œ๋น„์Šค ์ด๋ฆ„์ธ db๋ฅผ ํ˜ธ์ŠคํŠธ๋กœ ์‚ฌ์šฉํ•˜์—ฌ ์ ‘๊ทผํ•ฉ๋‹ˆ๋‹ค.


Docker Compose ์‹คํ–‰ ๋ฐ ๊ด€๋ฆฌ ๋ช…๋ น์–ด



#DockerCompose ํŒŒ์ผ ์ž‘์„ฑ์ด ์™„๋ฃŒ๋˜๋ฉด, ๋‹ค์Œ ๋‹จ ํ•˜๋‚˜์˜ ๋ช…๋ น์–ด๋กœ ์ „์ฒด ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•˜๊ณ  ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


1. ์‹คํ–‰ ๋ช…๋ น์–ด


Bash

docker-compose up -d

  • up: ์„œ๋น„์Šค์— ์ •์˜๋œ ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋นŒ๋“œํ•˜๊ณ  ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค

  • -d: ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋ฐฑ๊ทธ๋ผ์šด๋“œ(Detached) ๋ชจ๋“œ๋กœ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค


2. ์ค‘์ง€ ๋ช…๋ น์–ด


Bash

docker-compose stop

  • ์‹คํ–‰ ์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ๋งŒ ์ค‘์ง€์‹œํ‚ค๊ณ , ์ปจํ…Œ์ด๋„ˆ์™€ ๋ณผ๋ฅจ ๋“ฑ์˜ ๋ฆฌ์†Œ์Šค๋Š” ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค


3. ์™„์ „ํžˆ ์ œ๊ฑฐ ๋ช…๋ น์–ด


Bash

docker-compose down

  • ์‹คํ–‰ ์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ค‘์ง€์‹œํ‚ค๊ณ , ์ปจํ…Œ์ด๋„ˆ, ๋„คํŠธ์›Œํฌ, ๋ณผ๋ฅจ(๋ช…๋ น์–ด์— ๋”ฐ๋ผ)์„ ๋ชจ๋‘ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค


4. ๋กœ๊ทธ ํ™•์ธ ๋ช…๋ น์–ด


Bash

docker-compose logs -f

  • ์‹คํ–‰ ์ค‘์ธ ๋ชจ๋“  ์„œ๋น„์Šค์˜ ๋กœ๊ทธ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค (-f๋Š” follow ์˜ต์…˜)


๊ฒฐ๋ก 



#DockerCompose ๋Š” ๋ณต์žกํ•œ ๋‹ค์ค‘ ์ปจํ…Œ์ด๋„ˆ #PHP์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ™˜๊ฒฝ์„ ๋‹จ์ˆœํ™”ํ•˜๋Š” ํ•„์ˆ˜ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. YAML ํŒŒ์ผ ํ•˜๋‚˜๋กœ ์„œ๋น„์Šค ์ •์˜, ๋„คํŠธ์›Œํ‚น, ๋ณผ๋ฅจ ๊ด€๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•ด์ ธ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์˜ ์ผ๊ด€์„ฑ๊ณผ ์ด์‹์„ฑ์ด ๊ทน๋Œ€ํ™”๋ฉ๋‹ˆ๋‹ค. ์ด์ œ ๋‹จ์ผ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋„˜์–ด #DockerCompose ๋ฅผ ํ™œ์šฉํ•œ ์‹ค์ œ ์„œ๋น„์Šค ํ™˜๊ฒฝ ๊ตฌ์ถ• ๋Šฅ๋ ฅ์„ ๊ฐ–์ถ”๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.


๊ณ ์ •์•„์ดํ”ผ, ์›”5,500์›, VPN, ์šฉ๋„๋ณ„ ํด๋ฆฐ์•„์ดํ”ผ ์ œ๊ณต, ๋ฌด๋ฃŒํ…Œ์ŠคํŠธ

https://vpn.luzensoft.com