์จ๋ผ์ธ ๊ฐ์
>PHP - ์ต์๊ธ
๐ PHP ์ต์๊ธ - 3์ฃผ์ฐจ: ์ปจํ ์ด๋ ๊ธฐ์ (Docker) ํ์ฉ- 02 Dockerfile ์์ฑ ๋ฐ ์ด๋ฏธ์ง ๋น๋
์ฃผ์ ํ๋ก๊ทธ๋จ ์คํ
- ํ์ : 10.0
- ๋ผ์ด์ ์ค: free
- ์ด์์ฒด์ :
- ํ์ผ ํฌ๊ธฐ: 0
ํผ๋๋ฐฑ ๋ฐ ๋ค์ด๋ก๋
- ์ฌ์ฉ์ ํ์ : 10.0
- ๋ค์ด๋ก๋ ์: 1
- ์กฐํ์: 29
์ ์กฐ์ฌ ๋ฐ ๋ฑ๋ก ์ ๋ณด
- ์ ์์ฌ: LUZENSOFT
- ๋ฑ๋ก์ผ: 2025-10-09 14:00:52
- ์ค๋ช
์ปจํ ์ด๋ ๊ธฐ์ ์ ํต์ฌ, Dockerfile ์ดํดํ๊ธฐ
์ง๋ ์๊ฐ์๋ #Docker ์ปจํ ์ด๋์ ๊ธฐ๋ณธ ๊ฐ๋ ์ ์ดํดํ๊ณ , ์ด๋ฏธ ์กด์ฌํ๋ ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ์ฌ ์ปจํ ์ด๋๋ฅผ ์คํํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์ ์ต๋๋ค. ํ์ง๋ง ์ค์ ์๋น์ค ํ๊ฒฝ์์๋ ๊ฐ๋ฐ์๊ฐ ์ง์ ํ์ํ ํ๊ฒฝ์ ์ ์ํ๊ณ ์ด๋ฏธ์ง๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค. ์ด ์์ ์ ํต์ฌ ๋๊ตฌ๊ฐ ๋ฐ๋ก Dockerfile์ ๋๋ค.
#Dockerfile ์ #Docker์ด๋ฏธ์ง ๋ฅผ ๋น๋ํ๊ธฐ ์ํ ๋ช ๋ น์ด๋ค์ ์์ฐจ์ ์ผ๋ก ๊ธฐ๋กํด ๋์ ํ ์คํธ ํ์ผ์ ๋๋ค. ์ด ํ์ผ์ ํตํด ์ ํ๋ฆฌ์ผ์ด์ ์คํ์ ํ์ํ ์ด์์ฒด์ , ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ํ๊ฒฝ ์ค์ , ๊ทธ๋ฆฌ๊ณ ์ต์ข ์ ์ผ๋ก ์คํ๋ ์ฝ๋๋ฅผ ์๋ฒฝํ๊ฒ ํจํค์งํ ์ ์์ต๋๋ค.
Dockerfile ๊ธฐ๋ณธ ๊ตฌ์กฐ ๋ฐ ํ์ ๋ช ๋ น์ด
ํจ์จ์ ์ด๊ณ ์์ ํ #Docker์ด๋ฏธ์ง ๋ฅผ ๋ง๋ค๊ธฐ ์ํด์๋ ๋ช ๊ฐ์ง ํต์ฌ #Dockerfile๋ช ๋ น์ด ๋ฅผ ์์งํด์ผ ํฉ๋๋ค.
1. FROM (๊ธฐ๋ฐ ์ด๋ฏธ์ง ์ ์)
๋ชจ๋ #Dockerfile ์ FROM ๋ช
๋ น์ด๋ก ์์ํฉ๋๋ค. ์ด๋ ๋น๋ํ ์ด๋ฏธ์ง์ ๊ธฐ๋ฐ(Base) ์ด๋ฏธ์ง๋ฅผ ์ง์ ํฉ๋๋ค. PHP ํ๊ฒฝ์์๋ ๋ณดํต ๊ณต์ #PHP์ด๋ฏธ์ง ๋ฅผ ์ฌ์ฉํฉ๋๋ค
Dockerfile
FROM php:8.3-fpm-alpine
php:8.3-fpm-alpine: PHP 8.3 ๋ฒ์ ์ FastCGI Process Manager(FPM)์ ์ฌ์ฉํ๋ฉฐ, ๊ฒฝ๋ ๋ฆฌ๋ ์ค ๋ฐฐํฌํ์ธ Alpine ๊ธฐ๋ฐ์ผ๋ก ์ด๋ฏธ์ง๊ฐ ๋งค์ฐ ์๊ณ ๊ฐ๋ณ์ต๋๋ค.
2. WORKDIR (์์ ๋๋ ํ ๋ฆฌ ์ค์ )
WORKDIR ๋ช
๋ น์ด๋ ์ดํ์ RUN, CMD, COPY ๋ฑ์ ๋ช
๋ น์ด๊ฐ ์คํ๋ ์ปจํ
์ด๋ ๋ด๋ถ์ ์์
๋๋ ํ ๋ฆฌ๋ฅผ ์ค์ ํฉ๋๋ค
Dockerfile
WORKDIR /var/www/html
3. COPY ๋๋ ADD (ํ์ผ ๋ณต์ฌ)
๋ก์ปฌ ์์คํ ์ ํ์ผ์ #Docker์ด๋ฏธ์ง ๋ด๋ถ๋ก ๋ณต์ฌํฉ๋๋ค.
Dockerfile
# ํ์ฌ ๋ก์ปฌ ๋๋ ํ ๋ฆฌ์ ๋ชจ๋ ํ์ผ/ํด๋๋ฅผ ์ด๋ฏธ์ง์ WORKDIR๋ก ๋ณต์ฌ
COPY . .
4. RUN (๋ช ๋ น์ด ์คํ)
์ด๋ฏธ์ง ๋น๋ ๊ณผ์ ์์ ์คํ๋ ๋ช ๋ น์ ์ง์ ํฉ๋๋ค. ์ฃผ๋ก ํจํค์ง ์ค์น, ์ค์ ํ์ผ ์์ , ์์กด์ฑ ์ค์น(Composer) ๋ฑ์ ์ฌ์ฉ๋ฉ๋๋ค.
Dockerfile
# Alpine ๋ฆฌ๋
์ค ํจํค์ง ์
๋ฐ์ดํธ ๋ฐ ์ค์น
RUN apk update && apk add --no-cache git
# PHP ํ์ฅ ์ค์น (์: mysqli)
RUN docker-php-ext-install mysqli
5. EXPOSE (ํฌํธ ๋ ธ์ถ)
์ปจํ
์ด๋๊ฐ ๋ฆฌ์ค๋ํ ํฌํธ๋ฅผ ๋ฌธ์ํํฉ๋๋ค. ์ค์ ๋ก ํธ์คํธ ๋จธ์ ์ ํฌํธ๋ฅผ ์ฐ๊ฒฐํ๋ ค๋ฉด docker run ๋ช
๋ น์์ -p ์ต์
์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
Dockerfile
EXPOSE 9000
PHP-FPM์ ๊ธฐ๋ณธ์ ์ผ๋ก 9000๋ฒ ํฌํธ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
6. CMD ๋๋ ENTRYPOINT (์ปจํ ์ด๋ ์คํ)
์ปจํ ์ด๋๊ฐ ์์๋ ๋ ์คํ๋๋ ๋ฉ์ธ ๋ช ๋ น์ ์ ์ํฉ๋๋ค.
Dockerfile
# ๊ธฐ๋ฐ ์ด๋ฏธ์ง์์ ์ด๋ฏธ PHP-FPM์ ์คํํ๋๋ก ์ค์ ๋์ด ์์ ์ ์์ต๋๋ค
CMD ["php-fpm"]
์ค์ต: PHP ํ๋ก์ ํธ๋ฅผ ์ํ Dockerfile ์์ฑ ๋ฐ ๋น๋
๋ค์์ ๊ฐ๋จํ PHP ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ปจํ ์ด๋ํํ๊ธฐ ์ํ ์์ #Dockerfile ์ ๋๋ค.
Dockerfile
Dockerfile
# 1. ๊ธฐ๋ฐ ์ด๋ฏธ์ง ์ค์ (Alpine ๋ฆฌ๋
์ค ๊ธฐ๋ฐ PHP 8.3 FPM)
FROM php:8.3-fpm-alpine
# 2. ์์
๋๋ ํ ๋ฆฌ ์ค์
WORKDIR /var/www/html
# 3. ํ์ํ PHP ํ์ฅ ์ค์น (์: PDO, PDO MySQL)
RUN docker-php-ext-install pdo pdo_mysql
# 4. Git ์ค์น (Composer๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ํ์)
RUN apk update && apk add --no-cache git
# 5. Composer ์ค์น (PHP ์์กด์ฑ ๊ด๋ฆฌ ๋๊ตฌ)
COPY --from=composer:latest /usr/bin/composer /usr/local/bin/composer
# 6. ๋ก์ปฌ ํ๋ก์ ํธ ํ์ผ์ ์ด๋ฏธ์ง๋ก ๋ณต์ฌ
COPY . .
# 7. Composer ์์กด์ฑ ์ค์น (์ด๋ฏธ์ง ๋น๋ ์ ์คํ)
RUN composer install --no-dev --optimize-autoloader
# 8. PHP-FPM์ ๊ธฐ๋ณธ ํฌํธ ๋
ธ์ถ
EXPOSE 9000
# ์ปจํ
์ด๋ ์คํ ๋ช
๋ น (๊ธฐ๋ฐ ์ด๋ฏธ์ง์์ ์ด๋ฏธ ์ ์๋์ด ์์ ํ๋ฅ ์ด ๋์)
# CMD ["php-fpm"]
์ด๋ฏธ์ง ๋น๋ ๋ช ๋ น
#Dockerfile ์์ฑ์ ์๋ฃํ๋ค๋ฉด, ์ด์ #Docker์ด๋ฏธ์ง ๋ฅผ ๋น๋ํ ์ฐจ๋ก์ ๋๋ค.
Bash
docker build -t my-php-app:latest .
docker build: ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ๋ ๋ช ๋ น์ด์ ๋๋ค-t my-php-app:latest: ๋น๋๋ #Docker์ด๋ฏธ์ง ์my-php-app์ด๋ผ๋ ์ด๋ฆ๊ณผlatest๋ผ๋ ํ๊ทธ๋ฅผ ์ง์ ํฉ๋๋ค.: #Dockerfile ์ด ์์นํ ํ์ฌ ๋๋ ํ ๋ฆฌ(context)๋ฅผ ์๋ฏธํฉ๋๋ค
๋น๋๊ฐ ์๋ฃ๋๋ฉด docker images ๋ช
๋ น์ด๋ฅผ ํตํด ์์ฑ๋ ์ด๋ฏธ์ง๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
๊ฒฐ๋ก
#Dockerfile ์ #PHP์ ํ๋ฆฌ์ผ์ด์
์ ์คํ ํ๊ฒฝ์ ์๋ฒฝํ๊ฒ ์บก์ํํ๋ ์ฒญ์ฌ์ง์
๋๋ค. FROM, RUN, COPY, WORKDIR ๋ฑ์ ํต์ฌ ๋ช
๋ น์ด๋ฅผ ์ดํดํ๊ณ ์ค์ตํ๋ฉด, ์ด๋ค ํ๊ฒฝ์์๋ ์ผ๊ด๋๊ฒ ์คํ๋๋ ๊ฐ๋ ฅํ๊ณ ์ด์์ฑ ๋์ #Docker์ด๋ฏธ์ง ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ๋ค์ ์๊ฐ์๋ ๋น๋ํ ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ์ฌ #DockerCompose ๋ก ์ปจํ
์ด๋ ๋คํธ์ํฌ ํ๊ฒฝ์ ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ์ ํ์ตํ๊ฒ ์ต๋๋ค.
๋ธ๋ก๊ทธKT๊ณ ์ , ์ผํ/์ง๋ ๋ง์ผํ KT์ ๋, ๊ฒ์/์ฑํ๋ ์ด์ด ๊ณ ์ IP, 24์๊ฐ์๋ด ๋๋๊ตฌ๋งค ์ ํ ์ธํํ ์ ๊ณต!