Saya sangat menyelidiki hal ini, dan seperti banyak orang, saya menemukan bahwa pada tahun 2020 tampaknya tidak ada begitu banyak logika dalam memisahkan server web + PHP + proses/kode aplikasi yang digabungkan erat satu sama lain Show Dua argumen utama untuk pemisahan adalah skalabilitas dan pemisahan masalah (satu proses per wadah) Logikanya, server web seharusnya hanya bertindak sebagai server web dan mendistribusikan lalu lintas ke node PHP di belakang layanan yang menggunakan LB Dengan cara ini satu wadah/layanan melayani tujuan server web dan melayani file statis, sambil mem-proxy permintaan php ke pod php yang hanya berkaitan dengan PHP Dan server web dan pod php dapat diskalakan secara berbeda - yaitu Anda mungkin memerlukan 50-100 pod PHP untuk beban kerja, tetapi hanya 3-4 node server web. Jadi, Anda menghemat sumber daya. Besar Kecuali sehubungan dengan pemisahan keprihatinan Jika server web tidak akan melayani permintaan ke aplikasi yang berbeda, ada sedikit logika untuk pemisahan masalah ke wadah yang berbeda - kesampingkan layanan. Jika aplikasi digabungkan dengan server web, Anda hanya akan menghasilkan pod server web tambahan, dengan layanan yang menyertainya dan penyeimbang muatan untuk menyertainya Selain itu, Anda harus mendistribusikan kode aplikasi ke kedua wadah atau memasangnya dari ikatan NFS, atau pemasangan non NFS. Anda harus berurusan dengan semua hal akses dan izin yang relevan, jika Anda meletakkan kode aplikasi di kedua pod, Anda harus berurusan dengan pemisahan file statis + dinamis, atau bahkan harus mendistribusikan kedua jenis file ke kedua pod. Anda dapat meletakkan dua kontainer dan membuat salah satunya me-mount direktori di sisi lain dan itu akan berhasil, tetapi itu sebenarnya menempatkan dua kontainer di host logis yang sama terkait dengan jaringan, host dll sehingga Anda masih menggabungkannya. Ini masih memberikan beberapa pemisahan kekhawatiran. Tetapi komunikasi di antara dua wadah dalam pod yang sama menjadi perhatian - itu harus terjadi melalui jaringan intra-host melalui loopback, yang menggunakan tumpukan jaringan dan kurang berkinerja. Mungkin soket bisa berfungsi Lebih buruk lagi jika aplikasi Anda mungkin memerlukan server web yang ada dalam wadah yang sama - misalnya jika Anda melakukan penghentian ssl dan harus membawa ip pengunjung yang sebenarnya ke pod php, Anda mungkin harus melewati beberapa rintangan. Meskipun server web dan php tersedia dalam wadah yang sama, hal ini dapat dilakukan melalui berbagai cara Ketika semuanya ada dalam satu wadah, tidak ada yang diperlukan. Semuanya dikemas dengan rapi di tempat yang sama, tidak perlu melacak penerapan, layanan, kode aplikasi, pengontrol replikasi yang berbeda Kontainer/penyebaran tunggal semacam ini sangat menguntungkan saat ini terutama jika Anda menggunakan ingress-nginx atau nginx-ingress dan menghosting banyak aplikasi/situs berbeda di cluster yang sama. Setiap aplikasi/situs terkandung dalam wadahnya sendiri (bayangkan situs WordPress yang berbeda), setiap situs sepenuhnya terkandung dalam izin, akses, penerapan, versi, persyaratan, dll. Sedemikian rupa sehingga Anda bahkan dapat mengizinkan aplikasi/situs untuk menyesuaikan lingkungan runtime mereka dengan menyediakan file konfigurasi untuk server web atau php dari NFS share atau mount lainnya - yaitu. htaccess, php. ini dll. Yang merupakan keharusan untuk menghosting aplikasi yang berbeda karena orang cenderung memiliki persyaratan yang berbeda Sehubungan dengan kinerja Hari ini NGINX atau Apache membutuhkan sumber daya yang sangat sedikit dengan penanganan permintaan berbasis acara. Misalnya di tolok ukur saya, saya melihat Apache 2 dengan acara mpm hanya membutuhkan memori 3-4 MB, dan total ~ 2-3% cpu (dari 1000 juta cpu yang diminta, yaitu 1 vcpu) sambil menangani 50-100 permintaan bersamaan Bobot pod server web vs PHP akan berbeda tergantung pada aplikasi atau situs web tentunya, dan pasti ada aplikasi yang memerlukan pemisahan seperti itu, tetapi untuk sebagian besar beban kerja web umum hal ini tampaknya tidak perlu Jadi menelurkan beberapa pod Apache dan kemudian menelurkan ratusan atau lebih pod PHP tampaknya tidak membawa banyak keuntungan. Selain membuat lalu lintas jaringan klaster internal karena pod perlu berkomunikasi satu sama lain dan Anda juga membuat lebih banyak kerumitan dalam konfigurasi aplikasi (penyebaran, layanan, penyeimbang muatan, dll.) Kerugian lain dari memisahkan wadah adalah Anda membuat dua kali layanan per aplikasi. Ini akan mencerminkan batas cluster yang Anda buat karena layanan, pod memerlukan alamat ip Ketika server web + aplikasi PHP + berada dalam wadah yang sama, server web hanya dapat berkomunikasi dengan php-fpm melalui soket file. Mana yang lebih cepat, dan menghasilkan lebih sedikit overhead jaringan bahkan pada antarmuka loopback di dalam wadah, kesampingkan pembuatan lalu lintas jaringan di dalam kluster. Jaringan internal dan beban cpu disimpan Kesimpulannya Untuk tujuan tertentu, dengan satu server Apache 2 atau NGINX mendistribusikan permintaan ke aplikasi yang berbeda di cluster PHP-FPM yang berbeda, memisahkan masalah kemungkinan akan menjadi kebutuhan Namun di era ingress-nginx, ini sepertinya tidak perlu Terutama mengurangi kompleksitas, portabilitas, kinerja yang disimpan dan kebisingan cluster internal, kustomisasi yang lebih baik dan manfaat lain yang diperoleh dari pengemasan yang digabungkan dengan erat server + penerapan aplikasi PHP + dalam satu wadah tunggal tampaknya terlalu bagus untuk dilewatkan Selain itu, ini bahkan memungkinkan format seperti shared-hosting di kluster Kubernetes, yang tampaknya membuka banyak kemungkinan Saya akan sangat menghargai masukan apa pun dari siapa pun yang memiliki pengalaman dalam menangani pilihan ini di antara memilih wadah tunggal untuk aplikasi yang digabungkan dengan erat vs banyak koin, atau siapa pun yang melakukan tolok ukur pada ini Apakah mungkin menggunakan dua kontainer dalam satu layanan?Anda dapat menghubungkan beberapa kontainer menggunakan jaringan yang ditentukan pengguna dan volume bersama . Proses utama wadah bertanggung jawab untuk mengelola semua proses yang dimulainya.
Bagaimana cara meng-host beberapa wadah Docker pada satu server dengan proxy terbalik nginx?Menyiapkan Nginx sebagai proxy terbalik untuk menerapkan beberapa layanan di server yang sama menggunakan Docker . Prasyarat. . Langkah 1. Siapkan wadah proxy balik Nginx. . Langkah 2. Siapkan wadah untuk pembuatan sertifikat SSL otomatis. . Langkah 3. Selesaikan file penulisan buruh pelabuhan. . Langkah 4. Verifikasi bahwa proxy balik Nginx berfungsi Bagaimana cara menggunakan PHP dengan nginx Docker?Layanan Nginx
. Create a folder named PHP with Nginx and open it in Visual Studio Code. Di dalamnya, buat file bernama docker-compose. yml dan tulis ini di dalamnya. Di Docker Compose, Anda menentukan apa yang disebut "layanan", yang akan diwakili oleh kontainer yang berjalan di buruh pelabuhan.
Bagaimana cara menghubungkan dua wadah bersama?Untuk membuat tautan, Anda menggunakan tanda --link . Pertama, buat wadah baru, kali ini berisi database. Ini membuat wadah baru bernama db dari gambar pelatihan/postgres, yang berisi database PostgreSQL. Sekarang, buat wadah web baru dan tautkan dengan wadah db Anda. |