


Comment Docker crée rapidement un environnement 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
如果没有,说明没有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
phpinfo中显示gd库
注意如果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,则验证码显示正常了
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Étapes pour créer une image docker: écrivez un dockerfile qui contient les instructions de construction. Créez l'image dans le terminal, en utilisant la commande docker build. Marquez l'image et attribuez des noms et des balises à l'aide de la commande docker tag.

Les étapes pour mettre à jour une image Docker sont les suivantes: Tirez la dernière étiquette d'image Nouvelle image Supprimer l'ancienne image pour une balise spécifique (facultative) Redémarrez le conteneur (si nécessaire)

Comment utiliser Docker Desktop? Docker Desktop est un outil pour exécuter des conteneurs Docker sur les machines locales. Les étapes à utiliser incluent: 1. Installer Docker Desktop; 2. Démarrer Docker Desktop; 3. Créer une image Docker (à l'aide de DockerFile); 4. Build Docker Image (en utilisant Docker Build); 5. Exécuter Docker Container (à l'aide de Docker Run).

Pour enregistrer l'image dans Docker, vous pouvez utiliser la commande docker commit pour créer une nouvelle image, contenant l'état actuel du conteneur spécifié, Syntaxe: Docker Commit [Options] Nom d'image de l'ID de conteneur. Pour enregistrer l'image dans le référentiel, vous pouvez utiliser la commande docker push, Syntax: Docker Push Image Name [: Tag]. Pour importer des images enregistrées, vous pouvez utiliser la commande docker pull, syntaxe: docker pull name [: tag].

Méthodes de copie de fichiers en hôtes externes dans Docker: Utilisez la commande docker cp: exécuter docker cp [options] & lt; Container Path & gt; & lt; Host Path & gt;. Utilisation de volumes de données: créez un répertoire sur l'hôte et utilisez le paramètre -v pour monter le répertoire dans le conteneur lors de la création du conteneur pour obtenir la synchronisation de fichiers bidirectionnels.

Pour obtenir la version Docker, vous pouvez effectuer les étapes suivantes: exécutez la commande docker "docker --version" pour afficher les versions client et serveur. Pour Mac ou Windows, vous pouvez également afficher les informations de version via l'onglet Version de la GUI de bureau Docker ou du menu de bureau à propos de Docker.

Quatre façons de quitter Docker Container: Utilisez Ctrl D dans le terminal de conteneur Entrez la commande d'exit dans le terminal de conteneur Utilisez Docker Stop & lt; contener_name & gt; Commande utilise docker kill & lt; contener_name & gt; commande dans le terminal hôte (sortie de force)

Vous pouvez interroger le nom du conteneur Docker en suivant les étapes: répertorier tous les conteneurs (Docker PS). Filtrez la liste des conteneurs (à l'aide de la commande grep). Obtient le nom du conteneur (situé dans la colonne "Noms").
