티스토리 뷰
php를 구동 할 수 있도록 Docker를 구성하도록 하겠습니다.
아래의 구성을 가지고 Docker로 Container를 올려보도록 할게요.
- Nginx - Reverse Proxy
- Nginx - Web Server
- php-fpm
일단 저의 환경은 CentOS에 Docker를 설치하였고 그 위에서 동작을 하고 있습니다.
web server와 php는 함께 해도 되지만 따로 구성하도록 하겠습니다.
파일의 구성
저의 구성 부분을 그대로 보여드린 부분입니다.
drwxr-xr-x. 3 root root 82 4월 30 13:30 .
drwx------. 4 player player 125 4월 1 21:48 ..
-rw-rw-r--. 1 player player 519 4월 2 21:44 docker-compose.yml
-rw-rw-r--. 1 player player 625 4월 2 21:55 nginx.conf
-rw-rw-r--. 1 player player 1266 4월 2 21:51 proxy.conf
drwxrwxr-x. 4 player player 64 4월 2 09:47 source
- docker-compose.yml : docker compose 하기 위한 부분들이 명시된 파일
- nginx.conf : nginx의 설정을 넣어줍니다.
- proxy.conf : proxy의 설정을 넣어줍니다.
- source 폴더 : php의 소스를 넣어줍니다.
docker-compose.yml 파일 만들기
version: '3.7'
services:
php:
image: php:7.3-fpm
restart: always
ports:
- "9102:9000"
volumes:
- ./source:/source
phpweb:
image: nginx:latest
restart: always
depends_on:
- php
ports:
- "9101:8080"
volumes:
- ./source:/source
- ./nginx.conf:/etc/nginx/conf.d/default.conf
proxy:
image: nginx:latest
restart: always
depends_on:
- phpweb
ports:
- "9100:8080"
volumes:
- ./proxy.conf:/etc/nginx/nginx.conf
간략하게 설명을 하자면 php, phpweb, proxy를 service로 지정하여 주고 ports 지정을 하여 주었고 restart가 되는 방법에 대해서 정리를 하여 주었습니다.
volumes에는 도커와 연결하여 주기 위한 공간을 정의 하였습니다.
자세한 것은 공식 홈페이지에서 확인 바랍니다.
https://docs.docker.com/compose/
nginx.conf 파일 만들기
upstream docker-php {
server 192.168.7.1:9102;
}
server {
listen 8080;
server_name localhost;
root /source;
location / {
index index.php index.html index.htm;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass docker-php;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
error_log /var/log/nginx/api_error.log;
access_log /var/log/nginx/api_access.log;
}
upstream으로 docker-php를 192.168.7.1:9102로 지정을 하여 주었습니다.
나머지 부분들은 php에 대한 나머지 설정입니다.
위에서 docker-compose 파일에서 9102로 받아서 9000으로 넘겨주기 때문에 외부 listen은 9102입니다.
proxy.conf 파일 만들기
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
upstream docker-nginx {
server 192.168.7.1:9101;
}
server {
listen 8080;
server_name localhost;
location / {
proxy_pass http://docker-nginx;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
keepalive_timeout 65;
include /etc/nginx/conf.d/*.conf;
}
이곳도 마찬가지로 upstream에 docker-nginx로 이름을 하고 192.168.7.1:9101으로 하였습니다.
docker-compose 파일에 9101포트로 외부 listen 하도록 하여 두었기 때문입니다.
source 디렉토리에 파일 만들기
자 그러면 마지막으로 php가 소스를 가져오도록 하는 부분이 남아 있습니다.
위에 dockercompose 파일에 이렇게 넣은 부분이 있습니다.
volumes:
- ./source:/source
source 폴더를 만들고 이곳에 index.php를 넣어줄게요.
$ vi index.php
안에... php 정보를 보는 부분을 넣어 볼게요.
<?php
echo phpinfo();
?>
docker-comose 하기
지금까지 만든 부분을 docker compose 하여 보는 방법입니다.
$ docker-compose up -d
RUN
브라우저에서 192.168.7.1:9100으로 하여 주게 되면 바로 php 정보가 노출되게 됩니다.
IP와 포트가 왜 이렇냐고요?
저는 하나의 머신에서 포트를 각각 php, java, kotlin, go, python 등등을 나누어서 container를 띄워서 사용하도록 하였거든요.
즐거운 시간 되세요.
'Backend > Docker' 카테고리의 다른 글
Docker. docker file (Docker Image)의 기본 구성 (0) | 2020.05.03 |
---|---|
Docker. mysql container 만들기 (0) | 2020.04.30 |
docker container commit 하고 push 하기 (0) | 2020.04.01 |
docker hub에 개인 저장소 생성하기. Push 아닙니다! (0) | 2020.04.01 |
docker-compose를 이용한 golang server 구동 (0) | 2020.03.31 |
- Total
- Today
- Yesterday
- golang
- Windows
- nodejs
- CentOS
- git
- tomcat
- android
- war
- MySQL
- Xcode
- Spring
- docker
- Codable
- ubuntu
- github
- ios
- Gradle
- rxswift
- windows10
- SWIFT
- centos8
- Python
- intellij
- Kotlin
- php
- Java
- Linux
- enum
- go
- cocoapods
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |