티스토리 뷰

php를 구동 할 수 있도록 Docker를 구성하도록 하겠습니다.
아래의 구성을 가지고 Docker로 Container를 올려보도록 할게요.

 

  1. Nginx - Reverse Proxy
  2. Nginx - Web Server
  3. 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/

 

Overview of Docker Compose

Looking for Compose file reference? Find the latest version here. Compose is a tool for defining and running multi-container Docker applications. With Compose, you use a YAML file to configure...

docs.docker.com

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를 띄워서 사용하도록 하였거든요.

 

즐거운 시간 되세요.

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
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 31
글 보관함