개발 꿀팁/PHP

docker php 환경 구축 웹 프로젝트 실행

Jammie 2022. 7. 9. 15:27
반응형

이 글은 나중에 잊어버릴 경우를 대비해 직접 메모를 하는 것이 목적이다.

왜 도커, 도커의 기본 명령 중 일부를 더 이상 이 글에서 다루지 않는가.

docker는 웹 프로젝트를 구현하기 위해 몇 가지 서비스를 사용해야 합니다: php, nginx, redis 등. 이 기사에서는 PHP, nginx 및 redis의 사용에 대해 설명합니다. 더 많은 서비스 흐름과 함께 이 세 가지 서비스를 시작합니다.서비스는 같다. php는 5.6 버전을 사용한다.물론 최신판을 사용할 수도 있고 흐름은 똑같아요.

먼저 사용한 미러를 로컬로 끌어당깁니다.

docker pull php:5.6-fpm
docker pull nginx
docker pull redis

시작하기 전에 docker 네트워크를 만들고 docker를 사용하여 여러 개의 컨테이너를 연결합니다

docker network create -d bridge php-net

왜냐하면 우리는 모두 현지에서 코드를 수정해서 각각의 도커에 매핑하면 되기 때문이다.먼저 redis를 기동한다. redis는 매핑할 필요가 없기 때문에 가장 간단하게 기동한다

docker run --name redis-web -d --network php-net -p 6380:6379 redis

php와 nginx 컨테이너를 시작합니다. 로컬로 개발되었기 때문에 호스트 web 디렉토리를 컨테이너에 마운트해야 합니다. 로컬 web 디렉토리가 /wwwwwwkroot/ac이라고 가정하고 컨테이너 서비스에서 이 웹 프로젝트를 실행합니다

docker run --name php-web -d --network php-net -p 9001:9000 -v /www/wwwroot/ac:/data  php:5.6-fpm
docker run --name nginx-web -d --network php-net -p 80:80 -v /www/wwwroot/ac:/data  nginx

이렇게 3개의 컨테이너가 작동해 이들은 통합 도커 네트워크 내에서 ip를 통해 서로 접속할 수 있게 됐다.

이어 nginx를 중점적으로 배치하고 php 확장을 장착했다.공식 php는 순수하기 때문에순수한 php 환경은 우리가 하나하나 확장하여 설치해야 한다.

먼저 nginx 컨테이너로 들어가서 nginx 프로필 설정 찾기

docker exec -it nginx-web bash
cd  /etc/nginx/conf.d
vim default.conf

default.conf 프로필에 다음을 입력하십시오

server{
    listen 80;
    server localhost;
    location / {
        root /data;  #nginx 컨테이너에 마운트된 호스트/data 코드 디렉터리
        index index.php index.html index.htm;
    }
    location ~\.php(.*)$ {
        root /data;     # 호스트가 php 컨테이너에 걸린 /data 코드 목록
        fastcgi_pass 172.19.0.3:9000;   #이 주소는 php 컨테이너의 인트라넷 IP입니다
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /data$fastcgi_script_name;  
        fastcgi_param PATH_INFO $1;   #이 줄 설정pathinfo,tp프레임은 반드시 사용해야 한다pathinfo
        include fastcgi_params;
    }
}

프로필 편집 후 다시 설정하기

service nginx reload

그런 다음 php-web 용기에 들어가 설치용 확장을 시작합니다. 여기서 우리는 몇 가지 더 자주 사용하는 확장을 설치하는데, 프로세스는 기본적으로 동일합니다

docker exec -it php-web bash
cd /usr/local/bin  
./docker-php-ext-install pdo_mysql  
./docker-php-ext-install mysql
docker-php-ext-install bcmath
docker-php-ext-install mbstring
apt-get update && apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libpng-dev
docker-php-ext-install -j$(nproc) iconv
docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/
docker-php-ext-install -j$(nproc) gd
pecl install redis-4.0.1 && pecl install xdebug-2.6.0 && docker-php-ext-enable redis xdebug

mysql, bcmath, gd, mbstring, redis 등의 확장을 단숨에 설치하였다.

php 컨테이너 서비스 재개

docker restart php-web

이러한 완전한 웹 프로젝트는 docker를 사용하여 완료되었습니다. mysql 컨테이너가 설치되어 있지 않습니다. 설치 방법이 동일하기 때문에 연결할 때 인트라넷 ip를 사용하여 연결하도록 주의합니다. 만약 ifconfg 명령을 사용하여 docker0의 첫 번째 행을 찾으려면 docker0의 ip를 찾으십시오. 이 ip를 통해 호스트에게 요청할 수 있습니다. 예를 들어, 우리는 mysql을 호스트 컴퓨터에 설치하면 ip:port를 사용하여 액세스할 수 있습니다. 컨테이너 간에도 인트라넷 ip를 사용하여 서로 액세스하고, 각 컨테이너에 액세스한 다음 cat/etc/hosts를 통해 ip를 얻을 수 있습니다.

 

반응형