Artikel ini menerangkan menggunakan Docker dengan PHP 7, yang meliputi penciptaan Dockerfile, bangunan imej, dan runtime kontena. Ia memperincikan amalan terbaik keselamatan (pengguna bukan akar, kemas kini ketergantungan, pengesahan input), pengurusan pelbagai perkhidmatan dengan docker comp
Menggunakan Docker dengan PHP 7 melibatkan membuat imej Docker yang mengandungi semua aplikasi PHP anda perlu dijalankan: PHP sendiri, pelayan web (seperti Apache atau Nginx), sambungan yang diperlukan, dan kod aplikasi anda. Inilah pecahan proses:
1. Buat Dockerfile
: Fail ini mengandungi arahan untuk membina imej docker anda. Contoh asas menggunakan Apache mungkin kelihatan seperti ini:
<code class="dockerfile">FROM php:7.4-apache # Install necessary PHP extensions RUN docker-php-ext-install pdo_mysql # Copy your application code COPY . /var/www/html # Expose the port Apache listens on EXPOSE 80</code>
Dockerfile
ini bermula dengan imej asas Php 7.4 termasuk Apache. Ia kemudian memasang lanjutan pdo_mysql
(penting untuk interaksi pangkalan data) dan menyalin kod aplikasi anda ke dalam direktori yang betul. Akhirnya, ia mendedahkan port 80, menjadikan aplikasi anda boleh diakses dari luar bekas.
2. Bina imej Docker: Navigasi ke direktori yang mengandungi Dockerfile
anda dan jalankan:
<code class="bash">docker build -t my-php-app .</code>
Perintah ini membina imej dan menandakannya sebagai my-php-app
.
3. Jalankan bekas Docker: Selepas bangunan, jalankan bekas:
<code class="bash">docker run -p 8080:80 -d my-php-app</code>
Perintah ini menjalankan bekas dalam mod berkembar ( -d
), pemetaan port 8080 pada mesin tuan rumah anda ke port 80 di dalam bekas. Anda kini boleh mengakses permohonan anda di http://localhost:8080
. Ingatlah untuk menggantikan 8080
dengan port pilihan anda jika perlu. Anda mungkin perlu menyesuaikan ini berdasarkan persediaan khusus anda (contohnya, menggunakan Nginx dan bukannya Apache).
Mengamankan aplikasi PHP 7 di Docker melibatkan pendekatan pelbagai lapisan:
Dockerfile
anda harus membuat dan beralih kepada pengguna bukan akar.Ya, Docker Compose sangat sesuai untuk menguruskan pelbagai perkhidmatan dalam satu aplikasi. Sebagai contoh, anda mungkin mempunyai bekas yang berasingan untuk aplikasi PHP anda, pangkalan data (seperti MySQL atau PostgreSQL), barisan mesej (seperti RabbitMQ), dan cache Redis.
Fail docker-compose.yml
akan menentukan setiap perkhidmatan:
<code class="yaml">version: "3.9" services: web: build: ./web ports: - "8080:80" depends_on: - db db: image: mysql:8 environment: MYSQL_ROOT_PASSWORD: my-secret-password MYSQL_DATABASE: mydatabase MYSQL_USER: myuser MYSQL_PASSWORD: mypassword</code>
Contoh ini menunjukkan perkhidmatan web
(aplikasi PHP anda) dan perkhidmatan db
(MySQL). Arahan depends_on
memastikan pangkalan data bermula sebelum aplikasi web. Anda akan mempunyai Dockerfile
yang berasingan untuk setiap perkhidmatan. Docker mengarang memudahkan pengurusan perkhidmatan yang saling berkaitan ini, memastikan mereka dimulakan, dihentikan, dan berskala bersama.
Menyelesaikan masalah PHP 7 Aplikasi di Docker sering melibatkan memeriksa beberapa bidang:
docker logs <container_id></container_id>
untuk melihat log.docker ps
untuk memeriksa sama ada bekas sedang berjalan dan docker inspect <container_id></container_id>
untuk mendapatkan maklumat yang lebih terperinci mengenai keadaan dan konfigurasi kontena.Dockerfile
dengan betul memasang sambungan yang diperlukan, menetapkan direktori kerja yang betul, dan salinan semua fail yang diperlukan.docker network inspect bridge
(atau nama rangkaian anda) untuk menyemak sambungan.Dockerfile
, membina semula imej untuk mencerminkan perubahan tersebut.Ingatlah untuk berunding dengan dokumentasi Docker dan PHP rasmi untuk maklumat penyelesaian masalah yang lebih terperinci. Menyesuaikan langkah -langkah ini untuk mesej persediaan dan ralat khusus anda akan membantu anda menyelesaikan masalah dengan cekap.
Atas ialah kandungan terperinci Bagaimana cara menggunakan Docker dengan Php 7?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!