Docker 컨테이너로 PHP 격리
나는 Docker, Apache, PHP로 일부 웹 페이지에 서비스를 제공하고 있다.로컬 시스템을 막거나 여러 Docker 이미지/보행시선 상자를 만들지 않고 PHP 버전을 쉽게 전환하려면 어떻게 해야 합니까?나는 많은 개발자들이 쉽게 해결 방안을 찾을 수 있을 것이라고 믿지만, 나는 개념화 용기 해결 방안에 확실히 어려움이 있다는 것을 인정해야 한다.추상적인 차원은 사유 장애를 초래할 수 있으므로 나는 이것이 나 혼자만의 문제가 아니라고 믿는다.
놀랍게도 Apache/PHP는 Docker의'용기마다 하나의 프로세스'원칙에 적합하지 않다.PHP와 Apache가 이렇게 밀접하게 결합되어 separation of concerns에게 이것은 비초보자이다.
나는 정말 나의 웹 서버 용기가 프로그래밍 언어와 분리되기를 바란다.NGINX와 PHP-FPM으로 전환하는 것은 더욱 뚜렷한 분리를 제공하여 언어 버전을 쉽게 전환할 수 있습니다.만약 다른 버전의 오래된 사이트가 필요하거나, 업그레이드 전에 사이트를 시험적으로 사용하고 싶다면, 이것은 매우 편리할 것이다.
설치 프로그램
그래서 요청이 테스트 5에 전송될 때 계획입니다.com/index.php url, Nginx 용기는 요청을 프로세스 인덱스에 전달합니다.php는 PHP5를 실행하는 용기에 설치되어 있으며 테스트 7과 비슷합니다.com/index.php와 PHP7.
먼저
/etc/hosts
파일에 두 항목을 추가합니다.127.0.0.1 test5.com
127.0.0.1 test7.com
Nginx 컨테이너에 액세스하는 데 사용할 주소입니다.GitHubdocker-php-isolation-example에서 저장소를 다운로드하거나 시스템의 적절한 위치로 복제합니다.모든 명령이 이 폴더의 CLI에서 실행됩니다.
폴더 구조는 비교적 간단합니다.
index.php
라는 파일을 포함하고 phpinfo()
명령을 포함한다.version: '2'
services:
web:
image: nginx:alpine
ports:
- "8080:80"
volumes:
- ./webroot:/var/www/html
- ./site.conf:/etc/nginx/conf.d/site.conf
links:
- php7
- php5
php7:
image: php:7-fpm-alpine
volumes:
- ./webroot:/var/www/html
php5:
image: php:5-fpm-alpine
volumes:
- ./webroot:/var/www/html
마스터 컨테이너는 Nginx 에이전트이며 외부 포트(8080)가 있는 유일한 컨테이너입니다.이 컨테이너 에이전트는 PHP7 PHPfpm 실행 및 PHP5 PHPfpm 실행 포트 9000에 있는 다른 두 컨테이너로 모든 유효한 요청을 보냅니다.웹 루트 폴더는 모든 세 용기 사이에서 공유됩니다. Nginx는 PHP 파일이 아닌 모든 파일을 서비스해야 하고, PHP 용기는 PHP 파일에 접근해야 합니다.
사이트conf 파일은 Nginx가 요청을 처리하는 방법을 정의합니다.
server {
listen 80;
index index.php;
server_name test7.com;
root /var/www/html/;
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass php7:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
server {
listen 80;
index index.php;
server_name test5.com;
root /var/www/html/;
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass php5:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
나는 이 두 주소를 한 주소에 합쳐서 정규 표현식을 사용할 수 있는 방법이 있다고 믿지만, 수명이 너무 짧다.그것을 운행하다
CLI에서 저장소를 다운로드할 폴더로 이동한 다음
docker-compose up -d
를 입력합니다.그림을 로컬에 저장하지 않으면, 그림을 마운트 해제하고 용기를 시작합니다.완료되면
docker ps
를 입력하여 3개 컨테이너가 실행 중인지 확인합니다.그래서 선택한 브라우저를 열고test5를 입력하세요.com:8080, PHP5의 phpinfo ()를 보실 수 있습니다.
다음test7을 입력하십시오.com:8080, 당신은 phpinfo()를 보아야 합니다. 당신이 맞혔습니다, PHP7!
이제 같은 색인을 처리하는 데 사용할 PHP 버전을 정의할 수 있습니다.php 파일, 몇 시간의 즐거움...
정리
흥분 됐어요?실행 중인 용기를 닫으려면
docker-compose down
를 입력하십시오. 용기를 닫고 제거해야 합니다.다운로드한 이미지를 삭제하려면
docker images
를 입력하고 docker rmi IMAGE ID
를 입력하십시오. 예를 들어 docker rmi 4fe1b7f08eb1 8b057b9de580 1b95155d2daf
는 ID가 4fe1b7f08eb1, 8b057b9de580, 1b95155d2daf인 3개의 이미지를 삭제합니다.마침내
PHP를 '소프트웨어 즉 서비스' 로 제공하는 개념은 눈에 띄지 않는 생각일 수도 있지만, 나는 그것이 정말 멋있다는 것을 발견했다.프로그래밍 언어를 격리할 수 있는 버전은 나로 하여금 매우 흥미를 가지게 한다. 이것은 아마도 내가 미래 프로젝트에서 시도하고 융합한 것일 것이다.
Docker 용기로 PHP를 격리하는 것은 2017년 7월 10일 myblog site에 가장 먼저 등장했다.
Reference
이 문제에 관하여(Docker 컨테이너로 PHP 격리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/johnmccuk/isolating-php-with-docker-containers-4epn텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)