์จ๋ผ์ธ ๊ฐ์
>PHP - ์ต์๊ธ
๐ PHP ์ต์๊ธ - 3์ฃผ์ฐจ: ์ปจํ ์ด๋ ๊ธฐ์ (Docker) ํ์ฉ- 04 PHP ์ ํ๋ฆฌ์ผ์ด์ ๋์ปค๋ผ์ด์ง
์ฃผ์ ํ๋ก๊ทธ๋จ ์คํ
- ํ์ : 10.0
- ๋ผ์ด์ ์ค: free
- ์ด์์ฒด์ :
- ํ์ผ ํฌ๊ธฐ: 0
ํผ๋๋ฐฑ ๋ฐ ๋ค์ด๋ก๋
- ์ฌ์ฉ์ ํ์ : 10.0
- ๋ค์ด๋ก๋ ์: 1
- ์กฐํ์: 19
์ ์กฐ์ฌ ๋ฐ ๋ฑ๋ก ์ ๋ณด
- ์ ์์ฌ: LUZENSOFT
- ๋ฑ๋ก์ผ: 2025-10-12 14:25:44
- ์ค๋ช
#๋์ปค๋ผ์ด์ง(Dockerizing)์ ์ดํด์ ํ์์ฑ
์ง๋ ์ธ ๋ฒ์ ๊ฐ์๋ฅผ ํตํด ์ฐ๋ฆฌ๋ #Docker ์ ๊ธฐ๋ณธ ๊ฐ๋ , #Dockerfile ์์ฑ, ๊ทธ๋ฆฌ๊ณ #DockerCompose ๋ฅผ ์ฌ์ฉํ ๋ค์ค ์ปจํ ์ด๋ ํ๊ฒฝ ๊ตฌ์ถ ๋ฐฉ๋ฒ์ ๋ฐฐ์ ์ต๋๋ค. ์ด์ ์ด ๋ชจ๋ ์ง์์ ํตํฉํ์ฌ ์ค์ #PHP์ ํ๋ฆฌ์ผ์ด์ ์ ์ปจํ ์ด๋ ๊ธฐ๋ฐ ํ๊ฒฝ์ผ๋ก ์๋ฒฝํ๊ฒ ์ ํํ๋ ๊ณผ์ , ์ฆ #๋์ปค๋ผ์ด์ง์ ์ค์ตํ ์ฐจ๋ก์ ๋๋ค.
#๋์ปค๋ผ์ด์ง ์ ๋ชฉํ๋ ๊ฐ๋จํฉ๋๋ค. ๊ฐ๋ฐ, ํ ์คํธ, ๋ฐฐํฌ ํ๊ฒฝ์ ๊ด๊ณ์์ด ๋์ผํ๊ฒ ๋์ํ๋ ๋ ๋ฆฝ์ ์ธ ํจํค์ง(#Docker์ด๋ฏธ์ง)๋ฅผ ๋ง๋๋ ๊ฒ์ ๋๋ค. ์ด๋ "๋ด ์ปดํจํฐ์์๋ ์ ๋๋๋ฐ..."๋ผ๋ ๊ฐ๋ฐ์์ ์ ๋ชฝ์ ์์ํ ์์ ์ค๋๋ค. #์ปจํ ์ด๋ํ ๋ ํ๊ฒฝ์ ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ๋ ์ง์์ ํตํฉ/๋ฐฐํฌ(CI/CD) ํ๊ฒฝ์ ๊ธฐ๋ฐ์ด ๋ฉ๋๋ค.
1๋จ๊ณ: ํ๋ก์ ํธ ํ๊ฒฝ ๊ตฌ์ฑ ๋ฐ #Dockerfile ์ต์ ํ
๊ฐ์ฅ ๋จผ์ , #PHP์ ํ๋ฆฌ์ผ์ด์ ์ ์คํ ํ๊ฒฝ์ ์ ์ํ๋ #Dockerfile ์ ํ๋ก์ ํธ์ ๋ง๊ฒ ์ต์ ํํด์ผ ํฉ๋๋ค.
1. ๊ธฐ๋ฐ ์ด๋ฏธ์ง ์ ํ
์ ํ๋ฆฌ์ผ์ด์ ์ ํ์์ ๋ฐ๋ผ ์ ์ ํ #PHP์ด๋ฏธ์ง ๋ฅผ ์ ํํฉ๋๋ค. ์ฑ๋ฅ๊ณผ ์ฉ๋์ ๊ณ ๋ คํ์ฌ Alpine ๊ธฐ๋ฐ ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ ๋๋ค.
Dockerfile
# ๊ฒฝ๋ ๋ฆฌ๋
์ค Alpine ๊ธฐ๋ฐ PHP FPM ์ด๋ฏธ์ง ์ฌ์ฉ
FROM php:8.3-fpm-alpine
2. ์ฌ์ฉ์ ๊ถํ ๋ฐ ๋๋ ํ ๋ฆฌ ์ค์
๋ณด์์ ์ํด root๊ฐ ์๋ ์ผ๋ฐ ์ฌ์ฉ์(UID/GID)๋ฅผ ์ค์ ํ๊ณ , #WORKDIR ์ ์ง์ ํฉ๋๋ค.
Dockerfile
# ์์
๋๋ ํ ๋ฆฌ ์ค์
WORKDIR /var/www/html
# ์ปจํ
์ด๋ ๋ด์์ ์์ ํ๊ฒ ์คํํ๊ธฐ ์ํด ์ฌ์ฉ์ ๊ถํ ์ค์
# RUN addgroup -g 1000 app && adduser -u 1000 -G app -D app
# USER app
3. ํ์ฅ ๋ฐ ์์กด์ฑ ์ค์น
์ ํ๋ฆฌ์ผ์ด์ ์ด ์๊ตฌํ๋ ๋ชจ๋ #PHPํ์ฅ(PDO, GD, Redis ๋ฑ)๊ณผ ์์กด์ฑ ๊ด๋ฆฌ ๋๊ตฌ(Composer)๋ฅผ ์ค์นํฉ๋๋ค.
Dockerfile
# PHP ํ์ฅ ์ค์น ๋ฐ ์ญ์
RUN apk add --no-cache libzip-dev
RUN docker-php-ext-install pdo pdo_mysql zip
# Composer ์ค์น (Docker multi-stage build ์ฌ์ฉ ๊ถ์ฅ)
COPY --from=composer:latest /usr/local/bin/composer /usr/local/bin/composer
2๋จ๊ณ: #DockerCompose ๋ฅผ ์ฌ์ฉํ ์๋น์ค ์ ์ (Web + DB)
๋๋ถ๋ถ์ #PHP์ ํ๋ฆฌ์ผ์ด์ ์ ์ต์ํ ์น ์๋ฒ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ํ์๋ก ํฉ๋๋ค. ์ด์ ๊ฐ์์์ ๋ค๋ค๋ ๋ด์ฉ์ ๋ฐํ์ผ๋ก Nginx, PHP-FPM, MySQL 3๊ฐ์ง ์๋น์ค๋ฅผ ์ ์ํ๋ #DockerCompose ํ์ผ์ ์์ฑํฉ๋๋ค.
1. ๋คํธ์ํฌ ๋ฐ ๋ณผ๋ฅจ ์ ์
์๋น์ค ๊ฐ์ ํต์ ๊ณผ ์๊ตฌ ๋ฐ์ดํฐ ์ ์ฅ์ ์ํด ๋คํธ์ํฌ์ ๋ณผ๋ฅจ์ ์ ์ํฉ๋๋ค.
YAML
version: '3.8'
services:
# ... (์๋น์ค ์ ์ ์๋ต)
# ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๊ตฌ ์ ์ฅ์ ์ํ ๋ณผ๋ฅจ
volumes:
db_data:
# ์๋น์ค ๊ฐ ํต์ ์ ์ํ ๋คํธ์ํฌ
networks:
app_net:
driver: bridge
2. Nginx ์ค์ ํ์ผ ์ฐ๊ฒฐ
Nginx ์ปจํ
์ด๋๊ฐ #PHP-FPM ์ปจํ
์ด๋์ ํต์ ํ ์ ์๋๋ก ์ค์ ํ์ผ์ ๋งคํํด์ผ ํฉ๋๋ค. ์ด ์ค์ ํ์ผ์๋ fastcgi_pass php-fpm:9000;์ ๊ฐ์ ์ง์๋ฌธ์ด ํฌํจ๋์ด์ผ ํฉ๋๋ค. ์ฌ๊ธฐ์ php-fpm์ #DockerCompose ์๋น์ค ์ด๋ฆ์
๋๋ค.
YAML
web:
image: nginx:stable-alpine
ports:
- "80:80"
volumes:
- .:/var/www/html
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf # ์ค์ ํ์ผ ๋งคํ
networks:
- app_net
# ...
3. ์ฝ๋์ ํ๊ฒฝ ์ค์ ๋ง์ดํธ
๊ฐ๋ฐ ์ค์๋ ์ฝ๋๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง๋ค ์ด๋ฏธ์ง๋ฅผ ๋ค์ ๋น๋ํ์ง ์๋๋ก, ๋ก์ปฌ ํ๋ก์ ํธ ์ฝ๋๋ฅผ ์ปจํ ์ด๋์ #WORKDIR ๋ก ๋ณผ๋ฅจ ๋ง์ดํธํด์ผ ํฉ๋๋ค.
YAML
php-fpm:
build: .
volumes:
- .:/var/www/html # ๋ก์ปฌ ์ฝ๋์ ์ปจํ
์ด๋ ์ฝ๋ ๋๊ธฐํ
networks:
- app_net
# ...
3๋จ๊ณ: ์ ํ๋ฆฌ์ผ์ด์ ์คํ ๋ฐ ํ ์คํธ
#Dockerfile ๊ณผ #DockerCompose ํ์ผ ์์ฑ์ ์๋ฃํ๋ค๋ฉด, ์ด์ ์ต์ข ์คํ ๋จ๊ณ์ ๋๋ค.
1. ๋ชจ๋ ์๋น์ค ์คํ
ํ๋ก์ ํธ ๋ฃจํธ ๋๋ ํ ๋ฆฌ์์ ๋ค์ ๋ช ๋ น์ ์คํํฉ๋๋ค.
Bash
docker-compose up -d
์ด ๋ช ๋ น์ด๋ ๋ชจ๋ ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ๊ณ , ์ปจํ ์ด๋๋ฅผ ์์ํ๋ฉฐ, ํ์ํ ๋คํธ์ํฌ๋ฅผ ๊ตฌ์ฑํ์ฌ #PHP์ ํ๋ฆฌ์ผ์ด์ ์ด ์น ์๋ฒ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผํ ์ ์๋๋ก ํ๊ฒฝ์ ์์ฑํฉ๋๋ค.
2. ์ปจํ ์ด๋ ์ํ ํ์ธ
Bash
docker-compose ps
๋ชจ๋ ์๋น์ค๊ฐ Up ์ํ์ธ์ง ํ์ธํฉ๋๋ค. ์ด์ ํธ์คํธ ๋ธ๋ผ์ฐ์ ์์ localhost (๋๋ Nginx๊ฐ ๋งคํํ ํฌํธ)๋ก ์ ์ํ์ฌ #PHP์ ํ๋ฆฌ์ผ์ด์
์ด ์ ์์ ์ผ๋ก ๋์ํ๋์ง ํ
์คํธํ ์ ์์ต๋๋ค.
๊ฒฐ๋ก
#๋์ปค๋ผ์ด์ง ์ ํ๋์ ์ธ #PHP๊ฐ๋ฐ ์ ํ์ ๊ณผ์ ์ ๋๋ค. #Dockerfile ์ ํตํ ์ ๋ฐํ ํ๊ฒฝ ์ ์์ #DockerCompose ๋ฅผ ํตํ ์ ๊ธฐ์ ์ธ ์๋น์ค ๊ด๋ฆฌ๋ ๊ฐ๋ฐ ์ํฌํ๋ก์ฐ์ ์ผ๊ด์ฑ๊ณผ ํจ์จ์ฑ์ ๊ทน๋ํํฉ๋๋ค. ์ด๋ก์จ ์ฌ๋ฌ๋ถ์ ๋ณต์กํ ๋ค์ค ์๋น์ค ํ๊ฒฝ๋ ์์ฝ๊ฒ ๊ด๋ฆฌํ๊ณ ๋ฐฐํฌํ ์ ์๋ ์ต์๊ธ ๊ฐ๋ฐ์ ๊ธฐ์ ์ ์ต๋ํ์ต๋๋ค.
๊ณ ํ์ง ์ฐฉํ๊ฐ๊ฒฉ ํต์ ์ฌIP ๊ณ ์ IP ์์ ํVPN ์ด๊ณ ์VPN / ๊ฒ์,๊ด๊ณ ,์ฐํ์ฉ