찾다
운영 및 유지보수엔진스Docker가 PHP+Nginx+Mysql 환경을 신속하게 구축하는 방법

准备

创建目录

mkdir -p /Users/mwqnice/Documents/Program/phpProgram &&
mkdir -p /Users/mwqnice/Documents/Program/docker/php/php7.1.33/conf &&
mkdir -p /Users/mwqnice/Documents/Program/docker/php/php7.1.33/logs &&
mkdir -p /Users/mwqnice/Documents/Program/docker/nginx/conf.d &&
mkdir -p /Users/mwqnice/Documents/Program/docker/mysql/conf &&
mkdir -p /Users/mwqnice/Documents/Program/docker/mysql/logs &&
mkdir -p /Users/mwqnice/Documents/Program/docker/mysql/data &&
cd /Users/mwqnice/Documents/Program/docker/nginx/conf.d && sudo touch default.conf

配置PHP

拉取php-fpm镜像

docker pull php:7.1.33-fpm #版本7.1.33

启动php-fpm

docker run --name  mwq-php \
-v /Users/mwqnice/Documents/Program/phpProgram:/var/www/html \
-v /Users/mwqnice/Documents/Program/docker/php/php7.1.33/conf:/usr/local/etc/php \
-v /Users/mwqnice/Documents/Program/docker/php/php7.1.33/logs:/phplogs \
-d --link mwq-php php:7.1.33-fpm

--name mwq-php是容器的名字

/Users/mwqnice/Documents/Program/phpProgram是本地项目目录,/var/www/html是容器内项目存储目录

配置Nginx

拉取Nginx镜像

docker pull nginx:latest //拉取最新版本

配置nginx.conf

server {
    listen  80;
    server_name localhost;
    set $root /var/www/html/localhost;
    
    #access_log  /tmp/nginx/logs/localhost.net.access.log main;
    #error_log  /tmp/nginx/logs/localhost.net.error.log notice;

    location ~ .*.(gif|jpg|jpeg|bmp|png|ico|txt|js|css)$ {
        root $root;
    }

    location / {
        root $root;
        index  index.php index.html index.htm;
        if ( -f $request_filename) {
            break;
        }
        if (!-e $request_filename) {
            rewrite ^(.*)$ /index.php/$1 last;
            break;
        }
    }

    location ~ .php(.*)$ {
        root $root;
        set $script $uri;
        set $path_info "";
        if ($uri ~ "^(.+.php)(/.+)") {
            set $script $1;
            set $path_info $2;
        }
        fastcgi_pass mwq-php:9000;
        #fastcgi_index index.php;
        fastcgi_index    index.php?IF_REWRITE=1;
        fastcgi_param    PATH_INFO    $path_info;
        fastcgi_param    SCRIPT_FILENAME    $document_root$fastcgi_script_name;
        fastcgi_param    SCRIPT_NAME    $script;
        include          fastcgi_params;

    }

    location ~ /.ht {
        deny  all;
    }
    location ~ /.svn {
        deny  all;
    }
    location ~ /.git/ {
        deny  all;
    }
    location ~ /Logs/ {
        deny  all;
    }
    location ~ /Logs/.* {
    }
    location ~ /Logs/.* {
        deny  all;
    }
    location ~ .*.(sql|tar.gz|zip|gz|tar|rariso|rpm|apk|bak)$ {
        deny  all;
    }
  
}

启动Nginx

docker run --name mwq-nginx -p 80:80 -d \
-v /Users/mwqnice/Documents/Program/phpProgram:/var/www/html:ro \
-v /Users/mwqnice/Documents/Program/docker/nginx/conf.d:/etc/nginx/conf.d:ro \
--link mwq-php:php \
nginx

配置MySQL

拉取MySQL镜像

docker pull mysql:5.7.36 #版本5.7.36

启动MySQL

docker run -p 3306:3306 --name mwq-mysql \
-v /Users/mwqnice/Documents/Program/docker/mysql/conf:/etc/mysql/conf.d \
-v /Users/mwqnice/Documents/Program/docker/mysql/logs:/logs \
-v /Users/mwqnice/Documents/Program/docker/mysql/data:/mysql_data \
-e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7.36
  • -p 3306:3306: 将容器的3306端口映射到主机的3306端口

  • -v /Users/mwqnice/Documents/Program/docker/mysql/conf:/etc/mysql 将主机/Users/mwqnice/Documents/Program/docker/mysql/conf目录挂载到容器的/etc/mysql

  • -e MYSQL_ROOT_PASSWORD=123456: 初始化root用户的密码

  • -d: 后台运行容器,并返回容器ID

常见问题

1、thinkphp报错 Undefined class constant 'MYSQL_ATTR_INIT_COMMAND'

缺少pdo_mysql扩展,连接数据库失败

找到php.ini,docker中在/usr/local/etc/php中,复制一份php.ini,增加extension=pdo_mysql.so,重启php-fpm,如果还是不行,访问phpinfo页面,查看是否有pdo_mysql

Docker가 PHP+Nginx+Mysql 환경을 신속하게 구축하는 방법

如果没有,说明没有pdo_mysql扩展,需要编译

编译方法如下:

到docker的php容器中,在php文件夹下:

docker-php-ext-install pdo pdo_mysql

如果报 /usr/local/bin/docker-php-ext-enable: cannot create /usr/local/etc/php/conf.d/docker-php-ext-pdo_mysql.ini: Directory nonexistent

解决方案:直接在/usr/local/etc/php目录下面新建 conf.d目录和对应的docker-php-ext-pdo_msql.ini文件

其中docker-php-ext-pdo_msql.ini的内容为:

extension=pdo_mysql.so

2、thinkphp 报错 STORAGE_WRITE_ERROR:./Application/Runtime/Cache/Home/4e64ea6a2012f26b832b14cbc2152b28.php

是因为服务器缓存文件夹的操作权限不够,即Runtime没有权限,把缓存文件全部删除,再给Runtime777权限就行了

sudo chmod 777 Runtime 或者直接对代码库最外层设置777权限

3、thinkphp验证码图片显示不出来

缺少gd扩展,安装:

docker-php-ext-install gd

可能以下报错:

If configure fails try --with-webp-dir=


If configure fails try --with-jpeg-dir=
configure: error: png.h not found.

安装:

apt-get install libpng-dev libjpeg-dev

再次执行:

// 增加freetype配置
docker-php-ext-configure gd --enable-gd-native-ttf --with-freetype-dir=/usr/include/freetype2 --with-png-dir=/usr/include --with-jpeg-dir=/usr/include

// 安装
docker-php-ext-install gd

php.ini增加php_gd2.so

Docker가 PHP+Nginx+Mysql 환경을 신속하게 구축하는 방법

phpinfo中显示gd库

Docker가 PHP+Nginx+Mysql 환경을 신속하게 구축하는 방법

注意如果phpinfo的gd库中没有freetype的支持,验证码依然显示不出来, 会报错:

Call to undefined function Think\imagettftext()

如果gd库中没有freeType,则按照以下步骤进行:

docker-php-ext-configure gd --enable-gd-native-ttf --with-freetype-dir=/usr/include/freetype2 --with-png-dir=/usr/include

重新编译:

docker-php-ext-install gd

如果报错: configure: error: freetype-config not found. 运行:

apt-get -y install libfreetype6-dev

然后再继续运行上面的命令。gd库中有了freetype,则验证码显示正常了

위 내용은 Docker가 PHP+Nginx+Mysql 환경을 신속하게 구축하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
이 기사는 亿速云에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제
Nginx vs. Apache : 성능, 확장 성 및 효율성Nginx vs. Apache : 성능, 확장 성 및 효율성Apr 19, 2025 am 12:05 AM

Nginx와 Apache는 성능, 확장 성 및 효율성 측면에서 고유 한 장점과 단점을 가진 강력한 웹 서버입니다. 1) NGINX는 정적 컨텐츠를 처리하고 역전 프록시를 처리 할 때 잘 수행되며 동시 동시성 시나리오에 적합합니다. 2) Apache는 동적 컨텐츠를 처리 할 때 더 나은 성능을 발휘하며 풍부한 모듈 지원이 필요한 프로젝트에 적합합니다. 서버 선택은 프로젝트 요구 사항 및 시나리오에 따라 결정해야합니다.

궁극적 인 대결 : Nginx vs. Apache궁극적 인 대결 : Nginx vs. ApacheApr 18, 2025 am 12:02 AM

Nginx는 높은 동시 요청을 처리하는 데 적합한 반면 Apache는 복잡한 구성 및 기능 확장이 필요한 시나리오에 적합합니다. 1.NGINX는 이벤트 중심의 비 블로킹 아키텍처를 채택하며, 대결 환경에 적합합니다. 2. Apache는 프로세스 또는 스레드 모델을 채택하여 복잡한 구성 요구에 적합한 풍부한 모듈 생태계를 제공합니다.

NGINX의 행동 : 예제 및 실제 응용 프로그램NGINX의 행동 : 예제 및 실제 응용 프로그램Apr 17, 2025 am 12:18 AM

Nginx는 웹 사이트 성능, 보안 및 확장 성을 향상시키는 데 사용될 수 있습니다. 1) 리버스 프록시 및로드 밸런서로서 Nginx는 백엔드 서비스를 최적화하고 트래픽을 공유 할 수 있습니다. 2) 이벤트 중심 및 비동기 아키텍처를 통해 Nginx는 높은 동시 연결을 효율적으로 처리합니다. 3) 구성 파일을 사용하면 정적 파일 서비스 및로드 밸런싱과 같은 규칙을 유연하게 정의 할 수 있습니다. 4) 최적화 제안에는 GZIP 압축 활성화, 캐시 사용 및 작업자 프로세스 조정이 포함됩니다.

NGINX 장치 : 다양한 프로그래밍 언어를 지원합니다NGINX 장치 : 다양한 프로그래밍 언어를 지원합니다Apr 16, 2025 am 12:15 AM

NginxUnit은 여러 프로그래밍 언어를 지원하며 모듈 식 디자인을 통해 구현됩니다. 1. 언어 모듈로드 : 구성 파일에 따라 해당 모듈을로드합니다. 2. 응용 프로그램 시작 : 호출 언어가 실행될 때 응용 프로그램 코드를 실행합니다. 3. 요청 처리 : 응용 프로그램 인스턴스로 요청을 전달하십시오. 4. 응답 반환 : 처리 된 응답을 클라이언트에 반환합니다.

nginx와 apache 사이의 선택 : 필요에 맞는 적합nginx와 apache 사이의 선택 : 필요에 맞는 적합Apr 15, 2025 am 12:04 AM

Nginx와 Apache는 고유 한 장점과 단점이 있으며 다른 시나리오에 적합합니다. 1.NGINX는 높은 동시성 및 낮은 자원 소비 시나리오에 적합합니다. 2. Apache는 복잡한 구성 및 풍부한 모듈이 필요한 시나리오에 적합합니다. 핵심 기능, 성능 차이 및 모범 사례를 비교하면 요구에 가장 적합한 서버 소프트웨어를 선택할 수 있습니다.

nginx를 시작하는 방법nginx를 시작하는 방법Apr 14, 2025 pm 01:06 PM

질문 : nginx를 시작하는 방법? 답변 : nginx 스타트 업 설치 nginx verification nginx is nginx 시작 다른 시작 옵션을 자동으로 시작합니다.

nginx가 시작되었는지 확인하는 방법nginx가 시작되었는지 확인하는 방법Apr 14, 2025 pm 01:03 PM

nginx가 시작되었는지 확인하는 방법 : 1. 명령 줄을 사용하십시오 : SystemCTL 상태 nginx (linux/unix), netstat -ano | Findstr 80 (Windows); 2. 포트 80이 열려 있는지 확인하십시오. 3. 시스템 로그에서 nginx 시작 메시지를 확인하십시오. 4. Nagios, Zabbix 및 Icinga와 같은 타사 도구를 사용하십시오.

nginx를 닫는 방법nginx를 닫는 방법Apr 14, 2025 pm 01:00 PM

Nginx 서비스를 종료하려면 다음 단계를 따르려면 다음 단계를 결정합니다. Red Hat/Centos (SystemCTL 상태 NGINX) 또는 Debian/Ubuntu (서비스 NGINX 상태) 서비스 중지 : Red Hat/Centos (SystemCTL STOP NGINX) 또는 DEBIAN/UBUNTU (서비스 NGINX STOP) DIA AUTAL STARTUP (옵션) : RED HAT/CENTOS (SystemCTLED) 또는 DEBIAN/UBUNT (SystemCTLED). (Syst

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SecList

SecList

SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

PhpStorm 맥 버전

PhpStorm 맥 버전

최신(2018.2.1) 전문 PHP 통합 개발 도구

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기

ZendStudio 13.5.1 맥

ZendStudio 13.5.1 맥

강력한 PHP 통합 개발 환경