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.)