Erstellen Sie eine PHP-Entwicklungsumgebung in Docker
Dieses Mal werde ich Ihnen zeigen, wie Sie eine PHP-Entwicklungsumgebung in Docker erstellen. Was sind die Vorsichtsmaßnahmen beim Erstellen einer PHP-Entwicklungsumgebung in Docker?
1. Einführung
1.1 Warum Docker verwenden?
Gibt es ein Szenario, in dem Sie ein Projekt haben und eine Umgebung einrichten müssen, wenn Sie es lokal entwickeln, und Sie müssen auch eine Umgebung einrichten, wenn Sie es online stellen, wenn Sie zum Unternehmen gehen? und im Verborgenen herumspielen möchten, müssen Sie eine Umgebung einrichten, aber das funktioniert noch nicht, da Sie ziemlich viele Umgebungsabhängigkeiten haben. Wenn Sie zu diesem Zeitpunkt über Docker verfügen, müssen Sie Docker nur auf dem Computer installieren, die geschriebene Docker-Datei ablegen und eine Befehlszeile wird die Aufgabe automatisch abschließen , was praktisch und effizient ist großartig sein?
1.2 Vorbereitung
Als nächstes stellt dieser Artikel vor, wie man eine PHP-Entwicklungsumgebung erstellt, am Beispiel von zPhal-Dockerfiles. Dies ist eine Reihe von Dockerfiles, die ich für mein Blogsystem vorbereitet habe.
Ob Windows, Mac oder Linux, Docker kann es sehr gut unterstützen, auch unter Windows 10-Systemen ist Docker für Windows eigentlich recht gut, verbraucht aber mehr Speicher.
Über die Docker-Befehlszeile können wir viele Dinge tun, Bilder abrufen, Container ausführen, Befehle innerhalb des Containers ausführen usw., aber jetzt müssen wir eine einfachere und grobere Schreibweise verwenden Dockerfiles und dann Docker -compose verwenden, um diese Dateien zu verwalten und den Betriebsprozess zu vereinfachen.
Was ist eine Docker-Datei?
Dockerfile ist ein Skript, das aus einer Reihe von Befehlen und Parametern besteht. Diese Befehle werden auf das gezogene Basis-Image angewendet und schließlich können wir über Dockerfile ein neues Image erstellen, das die von Ihnen benötigte Software enthält Die Installation, die Sie installieren möchten, entspricht dem Anpassen der zu installierenden Erweiterungen, der auszuführenden Befehle usw. und der anschließenden Ausführung mit einem Klick, was den Vorgang erheblich vereinfacht.
Um eine Umgebung gemäß diesem Artikel zu erstellen, benötigen Sie:
Zuerst müssen Sie Docker und einige grundlegende Operationen von Docker verstehen und wissen, was Docker-Compose ist.
Docker und Docker-Compose müssen dann installiert werden. Ich werde Docker-Compose verwenden, um meine Docker-Dateien zu verwalten.
Beachten Sie, dass das Schreiben einer Docker-Datei eine lebendige und keine tote Sache ist. Die von jedem geschriebene Docker-Datei ist je nach Ihren Anforderungen unterschiedlich.
Die offizielle Dokumentation von Docker ist zwar auf Englisch, enthält aber grundsätzlich alles. Wenn Sie Fragen haben, ist es sehr ratsam, sich auf das Dokument zu beziehen: Docker-Dokumentation.
2. Beginnen Sie mit dem Schreiben
Im Folgenden werden zPhal-Docker-Dateien als Beispiel verwendet. Sie können auf den Link klicken, um die vollständige Datei anzuzeigen.
2.1 Vorschau
Schauen wir uns zunächst das von mir erstellte Dockerfile-Projekt an. Ich habe es grob in die folgenden Verzeichnisse unterteilt (dies wird natürlich von mir selbst festgelegt und ist es auch). muss für Sie nicht auf diese Weise formatiert werden):
zPhal-dockerfiles app/ index.php phpinfo.php data/ .gitignore files/ mysql/ conf.d/ mysql-file.cnf Dockerfile nginx/ conf.d/ default.conf zphal.conf Dockerfile nginx.conf php/ pkg/ .gitignore Dockerfile php.ini php-dev.ini php-fpm.conf redis/ Dockerfile docker-compose.yml logs/ .gitgnore README.md
In diesem Projekt habe ich PHP-, MySQL-, Nginx-, Redis-, Composer-, Phalcon-Erweiterungen usw. verwendet.
Im Allgemeinen haben wir drei Prozesse, um dies zu tun: Schreiben Sie die Docker-Datei jeder Software; schreiben Sie die Konfigurationsdatei; verarbeiten Sie alle Docker-Dateien über Docker-Compose, einschließlich der Konfiguration in das Image geworfen, das die Docker-Datei erstellen wird.
2.2 Docker-Datei schreiben
2.2.1 PHP
Das Folgende ist die Docker-Datei von PHP:
FROM php:7.2-fpm
MAINTAINER goozp "gzp@goozp.com"
Zeitzone einstellen
ENV TZ=Asien/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/ localtime && echo $TZ > /etc/timezone
Abhängigkeitspakete und PHP-Kernerweiterungen aktualisieren und installieren
RUN apt-get update && apt-get install -y \ git \ libfreetype6-dev \ libjpeg62-turbo-dev \ libpng-dev \ && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \ && docker-php-ext-install -j$(nproc) gd \ && docker-php-ext-install zip \ && docker-php-ext-install pdo_mysql \ && docker-php-ext-install opcache \ && docker-php-ext-install mysqli \ && rm -r /var/lib/apt/lists/*
Kopieren Sie das vorab heruntergeladene Erweiterungspaket vom Hostcomputer
COPY ./pkg/redis.tgz /home/redis.tgz COPY ./pkg/cphalcon.tar.gz /home/cphalcon.tar.gz
PECL-Erweiterung installieren, hier installieren wir Redis
RUN pecl install /home/redis.tgz && echo "extension=redis.so" > d/redis.ini
Erweiterungen von Drittanbietern installieren, hier ist die Phalcon-Erweiterung
RUN cd /home \ && tar -zxvf cphalcon.tar.gz \ && mv cphalcon-* phalcon \ && cd phalcon/build \ && ./install \ && echo "extension=phalcon.so" > /usr/local/etc/php/conf.d/phalcon.ini
Composer installieren
ENV COMPOSER_HOME /root/composer RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer ENV PATH $COMPOSER_HOME/vendor/bin:$PATH RUN rm -f /home/redis.tgz \ rm -f /home/cphalcon.tar.gz WORKDIR /data Write Permission RUN usermod -u 1000 www-data
Die erste Zeile definiert hier das Basis-Image Wir verwenden die FPM-Version von PHP 7.2. In der zweiten Zeile wird hier ein Betreuer definiert.
Als nächstes wird dieser Satz in jeder Docker-Datei definiert, hauptsächlich um die Zeit aller Container mit dem Host zu synchronisieren. Tatsächlich können wir ihn so in der Datei docker-composer.yml definieren 🎜 >
Dienste:php-fpm:Volumes: - /etc/localtime:/etc/localtime:roAber in nicht- Linux-Systeme können beispielsweise unter Windows nicht auf /etc/localtime zugreifen. Um die Kompatibilität mit allen Plattformen zu erhöhen, habe ich die Zeitsynchronisierung in die Docker-Datei geschrieben.
timezome einstellen
FROM mysql:5.7MySQL ist nichts Besonderes Entweder verwenden Sie direkt das offizielle Bild. 2.2.4 RedisDas Folgende ist Redis, und das offizielle Bild wird auch direkt verwendet:set timezome
ENV TZ =Asien /ShanghaiRUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
VON redis:3.22.3 Konfigurationsdateien schreiben Wie werden Konfigurationsdateien kategorisiert, die im PHP-Verzeichnis abgelegt werden, und Nginx-Konfigurationsdateien werden im Nginx-Verzeichnis abgelegt? Eine neue Unterdatei Der Ordner hängt von der Situation ab, z. B. dem Ordner conf.d. Im Folgenden wird die Nginx-Konfigurationsdatei als Beispiel genommen. Das Nginx-Verzeichnis lautet zunächst wie folgt: nginx/conf.d/ default.conftimezome einstellen
ENV TZ=Asien/ShanghaiRUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
>
zphal.confDockerfilenginx.confZusätzlich zu nginx.conf gibt es auch einen Unterordner conf.d zum Speichern aller Domänennamen. Konfigurationsdateien sollten denen bekannt sein, die eine PHP-Umgebung unter Linux erstellt haben. Bei diesen Konfigurationsdateien handelt es sich um die Dateien, die wir zu diesem Zeitpunkt in den Container übertragen. Wir werden diese Dateien nicht auf dem Host verwenden. Das Wichtigste ist also, dass der Pfad, der in der Konfigurationsdatei angezeigt wird, der Pfad zur Umgebung im Container ist, nicht der Pfad zum Host. Jeder Container verfügt über eine laufende Umgebung micro Bei kleinen Systemen sind diese Pfade alle Pfade innerhalb des Containers. Wir können Dateien synchronisieren, indem wir den Container über die Befehlszeile mounten. Jetzt verwenden wir auch Docker-Compose, um diesen Schritt zu lösen. Hier ist eine Beispielkonfigurationsdatei:server { listen 80 default; index index.html index.htm; server_name localhost docker; root /data/www; index index.php index.html index.htm; location / { try_files $uri $uri/ /index.html; } location ~ \.php { include fastcgi_params; fastcgi_pass php-fpm:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /data/www/$fastcgi_script_name; } }
而root /data/www中,/data/www路径,是到时候Nginx容器的路径,而不是当前在操作的宿主机的路径,所以到时候我们要挂载Web程序放的位置到这个路径。
2.4 编写 docker-compose.yml
在PHP、Nginx等目录的同级,我们创建一个docker-compose.yml,我们在执行docker-compose相关命令时,会自动找到这个文件,并根据里面的内容来执行。
接上面Nginx的例子,我们先谈挂载,因为这是最重要的一步。在docker-compose.yml中,Nginx的部分:
build: ./nginx depends_on: - php-fpm links: - php-fpm:php-fpm volumes: - ../app:/data/www:rw - ./nginx/conf.d:/etc/nginx/conf.d:ro - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro - ../logs/nginx:/var/log/nginx ports: - "80:80" - "8080:8080" - "443:443" restart: always command: nginx -g 'daemon off;'
有一个volumes参数,这里就是我们要挂载的目录的相关配置,第一条我们将../app挂载到/data/www之中,也是我们配置文件中定义的默认监听的root,而APP目录是我们宿主机中的一个目录,通过这样挂载我们可以直接将我们的项目文件放到APP中,Docker会帮你传输到容器内的/data/www目录下。
其它的参数:
build定义了你的Dockerfile在哪里,如果没有写Dockerfile可以不用build,可以用images参数定义官方镜像,比如image:mysql:5.7;
depends_on表示将依赖其它镜像,比如Nginx依赖php-fpm,没有它我Nginx没法玩;
links定义连接,比如要连接到php-fpm容器,就是php-fpm:php-fpm,后面是别名;
ports表示端口映射,80:80表示将80端口映射到宿主机的80端口;
restart重启,restart: always表示将自动重启;
command是自动执行的命令;
……
参数很多,更多的可以参考官方文档。
下面是一个完整的 docker-compose.yml 文件:
version: '3.2' services: php-fpm: build: ./php/ ports: - "9000:9000" links: - mysql-db:mysql-db - redis-db:redis-db volumes: - ../app:/data/www:rw - ./php/php-dev.ini:/usr/local/etc/php/php.ini:ro - ./php/php-fpm.conf:/usr/local/etc/php-fpm.conf:ro - ../logs/php-fpm:/var/log/php-fpm:rw restart: always command: php-fpm nginx: build: ./nginx depends_on: - php-fpm links: - php-fpm:php-fpm volumes: - ../app:/data/www:rw - ./nginx/conf.d:/etc/nginx/conf.d:ro - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro - ../logs/nginx:/var/log/nginx ports: - "80:80" - "8080:8080" - "443:443" restart: always command: nginx -g 'daemon off;' mysql-db: build: ./mysql ports: - "3306:3306" volumes: - ../data/mysql:/var/lib/mysql:rw - ../logs/mysql:/var/lib/mysql-logs:rw - ./mysql/conf.d:/etc/mysql/conf.d:ro environment: MYSQL_ROOT_PASSWORD: 123456 MYSQL_DATABASE: zphaldb MYSQL_USER: zphal MYSQL_PASSWORD: zphal123 restart: always command: "--character-set-server=utf8" redis-db: build: ./redis ports: - "6379:6379" volumes: - ../data/redis:/data restart: always
3. 使用
这一套编写下来,我们怎么用呢?
3.1 使用搭建好的环境
首先,进入项目Dockerfiles的目录下,这里是files目录:
cd zPhal-dockerfiles/files
wget https://pecl.php.net/get/redis-3.1.6.tgz -O php/pkg/redis.tgz
wget https://codeload.github.com/phalcon/cphalcon/tar.gz/v3.3.1 -O php/pkg/cphalcon.tar.gz
然后下载我们会用到的PHP拓展包。
执行命令:
docker-compose up
Docker会自动通过编写好的docker-compose.yml内容构建镜像,并且启动容器。
如果没问题,下次启动时可以以守护模式启用,所有容器将后台运行:
docker-compose up -d
关闭容器:
可以这样关闭容器并删除服务:
docker-compose down
使用 docker-compose 基本上就这么简单,用stop,start等这些命令来操纵容器服务。而更多的工作是在于编写Dockerfile和docker-compose.yml文件。
3.2 使用Composer
当我们要使用Composer时怎么做呢? 我们已经在php-fpm里安装了Composer。
用docker-compose进行操作:
docker-compose run --rm -w /data/www/zPhal php-fpm composer update
-w /data/www/zPhal为在php-fpm的工作区域,zPhal项目也是挂载在里面,所有我们可以直接在容器里运行Composer。
或者进入宿主机APP目录下用Docker命令:
cd zPhal-dockerfiles/app
docker run -it --rm -v `pwd`:/data/www/ -w /data/www/zPhal files_php-fpm composer update
相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!
推荐阅读:
Das obige ist der detaillierte Inhalt vonErstellen Sie eine PHP-Entwicklungsumgebung in Docker. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen











PHP ist hauptsächlich prozedurale Programmierung, unterstützt aber auch die objektorientierte Programmierung (OOP). Python unterstützt eine Vielzahl von Paradigmen, einschließlich OOP, funktionaler und prozeduraler Programmierung. PHP ist für die Webentwicklung geeignet, und Python eignet sich für eine Vielzahl von Anwendungen wie Datenanalyse und maschinelles Lernen.

PHP eignet sich für Webentwicklung und schnelles Prototyping, und Python eignet sich für Datenwissenschaft und maschinelles Lernen. 1.PHP wird für die dynamische Webentwicklung verwendet, mit einfacher Syntax und für schnelle Entwicklung geeignet. 2. Python hat eine kurze Syntax, ist für mehrere Felder geeignet und ein starkes Bibliotheksökosystem.

PHP entstand 1994 und wurde von Rasmuslerdorf entwickelt. Es wurde ursprünglich verwendet, um Website-Besucher zu verfolgen und sich nach und nach zu einer serverseitigen Skriptsprache entwickelt und in der Webentwicklung häufig verwendet. Python wurde Ende der 1980er Jahre von Guidovan Rossum entwickelt und erstmals 1991 veröffentlicht. Es betont die Lesbarkeit und Einfachheit der Code und ist für wissenschaftliche Computer, Datenanalysen und andere Bereiche geeignet.

Zu den Kernvorteilen von PHP gehören einfacher Lernen, starke Unterstützung für Webentwicklung, reiche Bibliotheken und Rahmenbedingungen, hohe Leistung und Skalierbarkeit, plattformübergreifende Kompatibilität und Kosteneffizienz. 1) leicht zu erlernen und zu bedienen, geeignet für Anfänger; 2) gute Integration in Webserver und unterstützt mehrere Datenbanken. 3) leistungsstarke Frameworks wie Laravel; 4) hohe Leistung kann durch Optimierung erzielt werden; 5) mehrere Betriebssysteme unterstützen; 6) Open Source, um die Entwicklungskosten zu senken.

PhPhas significantantyPactedWebDevelopmentAndendendsbeyondit.1) iTpowersMAjorPlatforms-LikewordpressandExcelsInDatabaseInteractions.2) php'SadaptabilityAllowStoscaleForLargeApplicationsfraMe-Linien-Linien-Linien-Linienkripte

PHP eignet sich für Webentwicklungs- und Content -Management -Systeme, und Python eignet sich für Datenwissenschafts-, maschinelles Lernen- und Automatisierungsskripte. 1.PHP hat eine gute Leistung beim Erstellen von schnellen und skalierbaren Websites und Anwendungen und wird üblicherweise in CMS wie WordPress verwendet. 2. Python hat sich in den Bereichen Datenwissenschaft und maschinelles Lernen mit reichen Bibliotheken wie Numpy und TensorFlow übertrifft.

Was noch beliebt ist, ist die Benutzerfreundlichkeit, die Flexibilität und ein starkes Ökosystem. 1) Benutzerfreundliche und einfache Syntax machen es zur ersten Wahl für Anfänger. 2) eng integriert in die Webentwicklung, eine hervorragende Interaktion mit HTTP -Anforderungen und Datenbank. 3) Das riesige Ökosystem bietet eine Fülle von Werkzeugen und Bibliotheken. 4) Active Community und Open Source Nature passen sie an neue Bedürfnisse und Technologietrends an.

PHP ist eine serverseitige Skriptsprache, die für dynamische Webentwicklung und serverseitige Anwendungen verwendet wird. 1.PHP ist eine interpretierte Sprache, die keine Zusammenstellung erfordert und für die schnelle Entwicklung geeignet ist. 2. PHP -Code ist in HTML eingebettet, wodurch es einfach ist, Webseiten zu entwickeln. 3. PHP verarbeitet die serverseitige Logik, generiert die HTML-Ausgabe und unterstützt Benutzerinteraktion und Datenverarbeitung. 4. PHP kann mit der Datenbank interagieren, die Einreichung von Prozessformularen und serverseitige Aufgaben ausführen.
