์จ๋ผ์ธ ๊ฐ์
>PHP - ์ต์๊ธ
๐ PHP ์ต์๊ธ - 3์ฃผ์ฐจ: ์ปจํ ์ด๋ ๊ธฐ์ (Docker) ํ์ฉ- 03 Docker Compose๋ฅผ ์ด์ฉํ ๋ค์ค ์ปจํ ์ด๋ ์ ํ๋ฆฌ์ผ์ด์
์ฃผ์ ํ๋ก๊ทธ๋จ ์คํ
- ํ์ : 10.0
- ๋ผ์ด์ ์ค: free
- ์ด์์ฒด์ :
- ํ์ผ ํฌ๊ธฐ: 0
ํผ๋๋ฐฑ ๋ฐ ๋ค์ด๋ก๋
- ์ฌ์ฉ์ ํ์ : 10.0
- ๋ค์ด๋ก๋ ์: 1
- ์กฐํ์: 48
์ ์กฐ์ฌ ๋ฐ ๋ฑ๋ก ์ ๋ณด
- ์ ์์ฌ: LUZENSOFT
- ๋ฑ๋ก์ผ: 2025-10-10 14:19:20
- ์ค๋ช
๋ค์ค ์ปจํ ์ด๋ ํ๊ฒฝ์ ํ์์ฑ: #DockerCompose ์ดํดํ๊ธฐ
์ง๋ ์๊ฐ๊น์ง ์ฐ๋ฆฌ๋ ๋จ์ผ #PHP์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ #Docker์ด๋ฏธ์ง ๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ๋น๋ํ์ต๋๋ค. ํ์ง๋ง ์ค์ ์น ์๋น์ค๋ ์น ์๋ฒ(Nginx/Apache), #PHP-FPM, ๋ฐ์ดํฐ๋ฒ ์ด์ค(MySQL/PostgreSQL), ์บ์(Redis/Memcached) ๋ฑ ์ต์ 3~4๊ฐ์ ๊ฐ๋ณ ์๋น์ค๊ฐ ์ ๊ธฐ์ ์ผ๋ก ๊ฒฐํฉ๋์ด ๋์ํ๋ ๋ค์ค ์ปจํ ์ด๋ ํ๊ฒฝ์ ๋๋ค.
์ด๋ฌํ ๋ณต์กํ ํ๊ฒฝ์ ๊ฐ๋ณ์ ์ธ docker run ๋ช
๋ น์ด๋ก ๊ด๋ฆฌํ๋ ๊ฒ์ ๋นํจ์จ์ ์ด๊ณ ์ค๋ฅ ๋ฐ์ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค. #DockerCompose ๋ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ํ์ํ์ต๋๋ค.
#DockerCompose ๋ YAML ํ์ผ ํ๋๋ฅผ ํตํด ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์ ์ ์๋น์ค ๊ตฌ์ฑ, ๋คํธ์ํฌ ์ค์ , ๋ณผ๋ฅจ(๋ฐ์ดํฐ ์ ์ฅ์)์ ํ ๋ฒ์ ์ ์ํ๊ณ , ๋จ ํ๋์ ๋ช ๋ น์ผ๋ก ๋ชจ๋ ์๋น์ค๋ฅผ ๋์์ ๋น๋ํ๊ณ ์คํํ ์ ์๋๋ก ํด์ฃผ๋ ๋๊ตฌ์ ๋๋ค. ์ด๋ ๊ฐ๋ฐ ํ๊ฒฝ ์ค์ ์ ๋ณต์ก์ฑ์ ํ๊ธฐ์ ์ผ๋ก ๋ฎ์ถฐ์ค๋๋ค.
Docker Compose ํ์ผ (docker-compose.yml) ๊ธฐ๋ณธ ๊ตฌ์กฐ
#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) ๊ตฌ์ฑํ๊ธฐ
์ด์ #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, ์ฉ๋๋ณ ํด๋ฆฐ์์ดํผ ์ ๊ณต, ๋ฌด๋ฃํ ์คํธ