Menyebarkan Aplikasi PHP Menggunakan Docker-compose

Aplikasi PHP biasanya disusun oleh server web, sistem basis data relasional dan juru bahasa itu sendiri. Dalam tutorial ini kita akan memanfaatkan tumpukan aplikasi PHP lengkap menggunakan buruh pelabuhan. Ini adalah tutorial mendalam di mana kita akan membangun dan mengatur wadah untuk Nginx (server web), MySQL (sistem basis data) dan PHP.

Demi tutorial ini, kami akan menulis aplikasi sederhana yang membaca daftar kota dari database dan menampilkannya di halaman web, dengan cara ini kami akan mendemonstrasikan aplikasi PHP yang dasar namun berfungsi.

Panduan ini mengasumsikan bahwa Anda memiliki Docker-CE yang sudah diinstal dan setidaknya pengetahuan tentang buruh pelabuhan yang minimal. Untuk itu, Anda dapat meninjau tutorial berikut:

Mengonfigurasi lingkungan kerja kami

Aplikasi berbasis buruh pelabuhan kehidupan nyata biasanya akan terdiri dari beberapa kontainer. Mengelola ini secara manual dapat dengan mudah menjadi sangat berantakan dan rumit. Di situlah komposisi buruh pelabuhan berperan. Ini membantu Anda untuk mengelola sejumlah kontainer melalui yamlfile konfigurasi sederhana .

Instal komposisi buruh pelabuhan.

curl -L https://github.com/docker/compose/releases/download/1.19.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

Buat folder untuk menampung semua file yang diperlukan dari contoh ini dan kemudian cdke dalamnya. Mulai sekarang, ini adalah direktori kerja kami dan setiap perintah akan dieksekusi di dalam folder ini dan setiap jalur akan dirujuk relatif terhadapnya. Folder ini dapat direferensikan nanti sebagai WORKING_DIR.

mkdir ~/docker
cd ~/docker

Sekarang buat tiga folder lagi.

mkdir php nginx app

The phpfolder di mana kita akan membangun gambar kustom PHP kita, nginxfolder akan memegang file yang diperlukan untuk gambar nginx kebiasaan kami dan appfolder adalah di mana kita akan menempatkan kode sumber dan konfigurasi aplikasi sampel kami.

Mengkonfigurasi wadah PHP

Dalam contoh ini, kita akan gunakan php-fpmuntuk terhubung ke server web Nginx. Kami akan menggunakan gambar dasar PHP resmi. Namun, kami juga perlu menginstal dan mengaktifkan beberapa ekstensi agar kami dapat mengakses database. Di dalam phpfolder, buat file bernama Dockerfiledan masukkan konten berikut ke dalamnya.

FROM php:7.1-fpm-alpine3.4
RUN apk update --no-cache \
    && apk add --no-cache $PHPIZE_DEPS \
    && apk add --no-cache mysql-dev \
    && docker-php-ext-install pdo pdo_mysql

Perhatikan bahwa kami menggunakan versi Alpine dari gambar PHP resmi. Alpine adalah distribusi yang sangat kecil yang ditargetkan ke kontainer dengan memberikan jejak kaki yang jauh lebih kecil. Juga, perhatikan penggunaan perintah docker-php-ext-install, gambar PHP resmi menyediakan perintah ini untuk memudahkan proses menginstal dan mengkonfigurasi ekstensi PHP.

Sekarang, mari kita buat gambar Docker ini dengan mengeluarkan yang berikut (di dalam kita WORKING_DIR):

docker build -t vultr-php php/

The docker-compose.ymlfile

Seperti yang telah disebutkan, docker-composememungkinkan Anda untuk mengelola sejumlah kontainer melalui file konfigurasi sederhana. File konfigurasi ini biasanya dinamai docker-compose.yml. Buat file ini di dalam appfolder.

touch app/docker-compose.yml

Sekarang masukkan konten berikut ke dalam file ini.

version: '2'
services:
  php:
    image: vultr-php
    volumes:
      - ./:/app
    working_dir: /app

Kami akan menjelaskan sintaks ini. Pertama, perhatikan baris pertama.

version: '2'

Ini menentukan versi docker-compose.ymlfile konfigurasi yang digunakan. Baris berikutnya menentukan layanan, atau dengan kata lain, wadah yang akan disediakan.

services:
  php:
    image: vultr-php
    volumes:
      - ./:/app
    working_dir: /app

Perhatikan bahwa setiap layanan memiliki kunci spesifik di dalam servicesblok. Nama yang ditentukan di sini akan digunakan untuk referensi wadah khusus ini nanti. Perhatikan juga bahwa di dalam phpkonfigurasi, kami mendefinisikan gambar yang digunakan untuk menjalankan wadah (ini adalah gambar yang kami buat sebelumnya). Kami juga mendefinisikan pemetaan volume.

volumes:
  - ./:/app

Ini memberitahu docker-composeuntuk memetakan direktori saat ini ( ./) ke /appdirektori di dalam wadah. Baris terakhir menetapkan /appfolder di dalam wadah sebagai direktori kerja, yang berarti bahwa ini adalah folder di mana semua perintah di masa depan di dalam wadah secara default dijalankan.

Kita sekarang dapat mengatur wadah kita.

cd ~/docker/app
docker-compose up -d

Anda dapat menjalankan perintah berikut untuk memastikan bahwa wadah PHP dieksekusi:

docker ps

Cara menjalankan perintah di dalam wadah

Masih di dalam appfolder, kita dapat menjalankan perintah apa pun di dalam wadah layanan yang ditentukan dengan bantuan docker-composeperintah.

docker-compose exec [service] [command]

The [service]placeholder mengacu pada kunci layanan. Dalam kasus kami, ini php. Mari kita jalankan perintah di dalam container untuk memeriksa versi PHP kita.

docker-compose exec php php -v

Anda akan melihat output berikut.

PHP 7.1.14 (cli) (built: Feb  7 2018 00:40:45) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies

Mengkonfigurasi wadah Nginx

Sama seperti wadah PHP, kita perlu membuat gambar khusus untuk server web. Tetapi dalam hal ini, kita hanya perlu menyediakan konfigurasi untuk kita virtual host. Pastikan Anda ada di dalam kami WORKING_DIRdan buat Dockerfiledi dalam nginxfolder:

cd ~/docker
touch nginx/Dockerfile

Sekarang masukkan konten berikut ke dalam ini Dockerfile:

FROM nginx:1.13.8-alpine
COPY ./default.conf /etc/nginx/conf.d/default.conf

Kami menggunakan gambar Nginx default berdasarkan Alpine. Pada file Docker ini kita cukup menyalin file konfigurasi ke pengaturan aplikasi kita. Sebelum membangun gambar ini, buat file konfigurasi.

touch nginx/default.conf

Sekarang isi dengan konten ini.

server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    root /app;
    index index.php;

    #server_name server_domain_or_IP;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        try_files $uri /index.php =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

Perhatikan bahwa pada fastcgi_pass php:9000baris ini kita merujuk wadah PHP dengan namanya di dalam serviceblok docker-compose.ymlfile konfigurasi. Secara internal docker-composemembuat jaringan dan menetapkan nama layanan sebagai nama host untuk setiap layanan yang ditentukan. Kita sekarang dapat membangun gambar Nginx.

docker build -t vultr-nginx nginx/

Memperbarui docker-compose.yml

Sekarang perbarui app/docker-compose.ymlfile.

version: '2'
services:
  php:
    image: vultr-php
    volumes:
      - ./:/app
    working_dir: /app
  web:
    image: vultr-nginx
    volumes:
      - ./:/app
    depends_on:
      - php
    ports:
      - 80:80

Kami hanya menambahkan layanan baru. Konfigurasi hampir sama, kecuali untuk yang berikut.

depends_on:
  - php
ports:
  - 80:80

Setelah wadah Nginx membutuhkan layanan PHP sepenuhnya diinisialisasi, kami memaksakan persyaratan ini dalam depends_onopsi. The portskunci konfigurasi memetakan sebuah port host ke port kontainer, di sini kita memetakan pelabuhan 80di host ke port 80dalam wadah.

Sekarang buat file bernama index.phpdi dalam appfolder dan letakkan yang berikut di dalamnya.

<?php phpinfo();

Pastikan port 80dapat diakses melalui firewall Anda dan jalankan yang berikut ini.

cd ~/docker/app
docker-compose up -d

Sekali lagi, periksa kembali apakah layanan sudah habis.

docker ps

Buka browser dan akses [vultr-instance-ip]. Anda dapat mengetahui alamat IP instance Vultr Anda dengan menjalankan yang berikut ini.

hostname -I

Anda akan melihat halaman info PHP.

Mengkonfigurasi wadah MySQL

Gambar MySQL resmi memungkinkan Anda untuk mengkonfigurasi wadah melalui variabel lingkungan sederhana. Ini dapat dilakukan dengan environmentopsi di dalam definisi blok layanan. Perbarui ~/docker/app/docker-compose.ymlfile sebagai berikut.

version: '2'
services:
  php:
    image: vultr-php
    volumes:
      - ./:/app
    working_dir: /app
  web:
    image: vultr-nginx
    volumes:
      - ./:/app
    depends_on:
      - php
    ports:
      - 80:80
  mysql:
    image: mysql:5.7.21
    volumes:
      - ./:/app
      - dbdata:/var/lib/mysql
    environment:
      - MYSQL_DATABASE=world
      - MYSQL_ROOT_PASSWORD=root
    working_dir: /app
volumes:
  dbdata:

Sekarang kami telah menetapkan layanan baru untuk basis data. Perhatikan garisnya dbdata:/var/lib/mysql. Ini memasang jalur pada wadah /var/lib/mysqlke volume persisten yang dikelola oleh Docker, dengan cara ini data database tetap ada setelah wadah dihapus. Volume ini perlu didefinisikan dalam blok tingkat atas seperti yang dapat Anda lihat di akhir file.

Sebelum mengatur konfigurasi baru kami, mari kita unduh contoh database MySQL. The dokumentasi MySQL resmi menyediakan beberapa database sampel. Kami akan menggunakan basis data dunia yang terkenal. Basis data ini menyediakan daftar negara dan kota. Untuk mengunduh sampel ini, jalankan yang berikut di dalam folder aplikasi kami.

curl -L http://downloads.mysql.com/docs/world.sql.gz -o world.sql.gz
gunzip world.sql.gz

Sekarang mari kita mengatur wadah kami.

docker-compose up -d

Seperti yang mungkin sudah Anda perhatikan, docker-compose upperintah mulai hanya wadah yang belum dimulai. Ini memeriksa perbedaan antara docker-compose.ymlfile Anda dan konfigurasi wadah yang sedang berjalan.

Sekali lagi, periksa apakah wadah MySQL sudah dimulai.

docker ps

Sekarang isi database dunia.

docker-compose exec -T mysql mysql -uroot -proot world < world.sql

Anda dapat memverifikasi bahwa basis data diisi dengan memilih data langsung dari basis data. Pertama, akses prompt MySQL di dalam wadah.

docker-compose exec mysql mysql -uroot -proot world

Di prompt MySQL, jalankan yang berikut ini.

select * from city limit 10;

Anda akan melihat daftar kota. Sekarang keluar dari prompt MySQL.

mysql> exit

Membangun aplikasi kita

Sekarang semua wadah yang diperlukan sudah aktif dan berjalan, kita dapat fokus pada aplikasi sampel kami. Perbarui app/index.phpfile sebagai berikut.

<?php

$pdo = new PDO('mysql:host=mysql;dbname=world;charset=utf8', 'root', 'root');

$stmt = $pdo->prepare("
    select city.Name, city.District, country.Name as Country, city.Population
    from city
    left join country on city.CountryCode = country.Code
    order by Population desc
    limit 10
");
$stmt->execute();
$cities = $stmt->fetchAll(PDO::FETCH_ASSOC);

?>

<!doctype html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Vultr Rocks!</title>
</head>
<body>
    <h2>Most Populous Cities In The World</h2>
    <table>
    <thead>
        <tr>
            <th>Name</th>
            <th>Country</th>
            <th>District</th>
            <th>Population</th>
        </tr>
    </thead>
    <tbody>
        <?php foreach($cities as $city): ?>
            <tr>
                <td><?=$city['Name']?></td>
                <td><?=$city['Country']?></td>
                <td><?=$city['District']?></td>
                <td><?=number_format($city['Population'], 0)?></td>
            </tr>
        <?php endforeach ?>
    </tbody>
    </table>
</body>
</html>

Jika Anda mengakses [vultr-instance-ip]di browser web, Anda akan melihat daftar kota terpadat di dunia. Selamat, Anda telah menggunakan aplikasi PHP yang berfungsi penuh menggunakan buruh pelabuhan.

Kesimpulan

Dalam tutorial ini, saya telah menunjukkan langkah demi langkah cara mengkonfigurasi aplikasi PHP yang berfungsi penuh. Kami membuat gambar khusus untuk PHP dan Nginx, dan mengkonfigurasikan komposisi buruh pelabuhan untuk mengatur wadah kami. Meskipun sangat mendasar dan sederhana, pengaturan ini mencerminkan skenario kehidupan nyata.

Dalam panduan ini, kami telah membuat dan menandai gambar kami secara lokal. Untuk pengaturan yang lebih fleksibel, Anda dapat mendorong gambar-gambar ini ke register buruh pelabuhan . Anda dapat mendorong ke register buruh pelabuhan resmi atau bahkan mengatur registri buruh pelabuhan Anda sendiri. Bagaimanapun, ini akan memungkinkan Anda untuk membangun gambar Anda di satu host dan menggunakannya di yang lain.

Untuk penggunaan yang lebih rinci docker-compose, Anda harus merujuk ke dokumentasi resmi .

Bergantung pada persyaratan aplikasi Anda dan kerangka kerja PHP yang Anda gunakan, Anda mungkin ingin menambahkan lebih banyak ekstensi. Ini dapat dengan mudah dilakukan dengan memodifikasi yang Dockerfiledigunakan untuk membangun gambar PHP khusus kami. Namun, beberapa ekstensi memerlukan dependensi tambahan untuk dipasang di wadah. Anda harus merujuk ke daftar ekstensi dalam dokumentasi resmi PHP untuk meninjau persyaratan dasar setiap ekstensi.



Leave a Comment

Menyebarkan Kubernet Dengan Kubeadm di CentOS 7

Menyebarkan Kubernet Dengan Kubeadm di CentOS 7

Ikhtisar Artikel ini dimaksudkan untuk membantu Anda mendapatkan kluster Kubernet dan menjalankan dengan kubeadm dalam waktu singkat. Panduan ini akan menggunakan dua server, pada

Instal OS Rancher melalui iPXE

Instal OS Rancher melalui iPXE

Rancher OS adalah distribusi Linux yang sangat ringan yang dibangun di sekitar Docker. OS itu sendiri berbobot sekitar 20MB. Tutorial ini akan membantu Anda menjalankan dan menjalankannya

Instal Docker CE di Ubuntu 18.04

Instal Docker CE di Ubuntu 18.04

Pendahuluan Docker adalah aplikasi yang memungkinkan kita untuk menyebarkan program yang dijalankan sebagai wadah. Itu ditulis dalam bahasa pemrograman Go populer

Menginstal Docker pada CentOS 7

Menginstal Docker pada CentOS 7

Menggunakan Sistem yang Berbeda? Docker adalah aplikasi yang memungkinkan untuk penyebaran perangkat lunak dalam wadah virtual. Itu ditulis dalam programmin Go

Cara Memasang Harbour pada CentOS 7

Cara Memasang Harbour pada CentOS 7

Harbor adalah server registri sumber terbuka kelas perusahaan yang menyimpan dan mendistribusikan gambar Docker. Harbor memperluas distribusi Docker sumber terbuka b

Menginstal docker-compose di CoreOS

Menginstal docker-compose di CoreOS

Artikel ini menjelaskan cara menginstal docker-compose di CoreOS. Di CoreOS, folder / usr / tidak dapat diubah sehingga jalur standar / usr / local / bin tidak tersedia untuk

Instal Rancher di CentOS 7

Instal Rancher di CentOS 7

Menggunakan Sistem yang Berbeda? Pendahuluan Rancher adalah platform sumber terbuka untuk menjalankan kontainer dan membangun layanan kontainer pribadi. Peternak adalah pangkalan

Instal Rancher di Ubuntu 16.04

Instal Rancher di Ubuntu 16.04

Menggunakan Sistem yang Berbeda? Pendahuluan Rancher adalah platform sumber terbuka untuk menjalankan kontainer dan membangun layanan kontainer pribadi. Peternak adalah pangkalan

Sticky Session With Docker Swarm (CE) pada Debian 9

Sticky Session With Docker Swarm (CE) pada Debian 9

Menggunakan Sistem yang Berbeda? Pendahuluan Docker Swarm mengubah masing-masing server Anda menjadi sekelompok komputer; memfasilitasi penskalaan, ketersediaan tinggi an

Dua Alat Pengelola Grafis Docker: DockerUI dan Galangan Kapal

Dua Alat Pengelola Grafis Docker: DockerUI dan Galangan Kapal

Dengan bantuan aplikasi Vultr Docker, Anda dapat dengan mudah menggunakan Docker pada instance server Vultr Anda. Sementara itu, Anda dapat memfasilitasi tugas mengelola Docker

Pada CoreOS, Atur Registri Docker Anda Sendiri

Pada CoreOS, Atur Registri Docker Anda Sendiri

Kita semua tahu dan cinta Docker, sebuah platform untuk membuat, mengelola, dan mendistribusikan kontainer aplikasi di beberapa mesin. Docker Inc. menyediakan layanan t

Setup Sentry via Docker di Ubuntu 16.04

Setup Sentry via Docker di Ubuntu 16.04

Menggunakan Sistem yang Berbeda? Pendahuluan Sentry adalah solusi open source untuk pelacakan kesalahan. Sentry melacak pengecualian dan pesan berguna lainnya

Instal Server Rancher di RancherOS

Instal Server Rancher di RancherOS

Ikhtisar RancherOS adalah sistem operasi yang sangat ringan (hanya sekitar 60 MB) yang menjalankan daemon Docker sistem sebagai PID 0 untuk menjalankan layanan sistem

Memulai dengan Kubernetes di CentOS 7

Memulai dengan Kubernetes di CentOS 7

Kubernetes adalah platform sumber terbuka yang dikembangkan oleh Google untuk mengelola aplikasi kemas di sekelompok server. Itu dibangun di atas satu dekade dan

Sticky Session With Docker Swarm (CE) pada CentOS 7

Sticky Session With Docker Swarm (CE) pada CentOS 7

Menggunakan Sistem yang Berbeda? Pendahuluan Docker Swarm mengubah masing-masing server Anda menjadi sekelompok komputer, memfasilitasi penskalaan, ketersediaan tinggi dan

Cara Menggunakan Docker: Membuat Kontainer Docker Pertama Anda

Cara Menggunakan Docker: Membuat Kontainer Docker Pertama Anda

Tutorial ini menjelaskan dasar-dasar memulai Docker. Saya berasumsi bahwa Anda sudah menginstal Docker. Langkah-langkah dalam tutorial ini akan bekerja pada sebuah

Muat Saldo dengan Docker

Muat Saldo dengan Docker

Saat menjalankan aplikasi web, Anda biasanya ingin memaksimalkan sumber daya Anda tanpa harus mengonversi perangkat lunak Anda untuk menggunakan multithreading.

Mulai Dengan SQL Server 2017 (MS-SQL) di CentOS 7 Dengan Docker

Mulai Dengan SQL Server 2017 (MS-SQL) di CentOS 7 Dengan Docker

Prasyarat Mesin Docker 1.8+. Minimal 4GB ruang disk. Minimal RAM 4GB. Langkah 1. Instal Docker Untuk menginstal SQL-Server, Docker mus

Menyebarkan Aplikasi Node.js Menggunakan Docker

Menyebarkan Aplikasi Node.js Menggunakan Docker

Artikel ini akan menunjukkan kepada Anda bagaimana menyebarkan aplikasi Node Anda dalam wadah Docker. Catatan: Tutorial ini mengasumsikan bahwa Anda telah menginstal dan membaca Docker

Wawasan tentang 26 Teknik Analisis Data Besar: Bagian 1

Wawasan tentang 26 Teknik Analisis Data Besar: Bagian 1

Wawasan tentang 26 Teknik Analisis Data Besar: Bagian 1

6 Hal yang Sangat Menggila dari Nintendo Switch

6 Hal yang Sangat Menggila dari Nintendo Switch

Banyak dari Anda tahu Switch keluar pada Maret 2017 dan fitur-fitur barunya. Bagi yang belum tahu, kami sudah menyiapkan daftar fitur yang membuat 'Switch' menjadi 'gadget yang wajib dimiliki'.

Janji Teknologi Yang Masih Belum Ditepati

Janji Teknologi Yang Masih Belum Ditepati

Apakah Anda menunggu raksasa teknologi untuk memenuhi janji mereka? periksa apa yang belum terkirim.

Fungsionalitas Lapisan Arsitektur Referensi Big Data

Fungsionalitas Lapisan Arsitektur Referensi Big Data

Baca blog untuk mengetahui berbagai lapisan dalam Arsitektur Big Data dan fungsinya dengan cara yang paling sederhana.

Bagaimana AI Dapat Membawa Otomatisasi Proses ke Tingkat Selanjutnya?

Bagaimana AI Dapat Membawa Otomatisasi Proses ke Tingkat Selanjutnya?

Baca ini untuk mengetahui bagaimana Kecerdasan Buatan menjadi populer di antara perusahaan skala kecil dan bagaimana hal itu meningkatkan kemungkinan untuk membuat mereka tumbuh dan memberi keunggulan pada pesaing mereka.

CAPTCHA: Berapa Lama Itu Bisa Tetap Menjadi Teknik yang Layak Untuk Perbedaan Human-AI?

CAPTCHA: Berapa Lama Itu Bisa Tetap Menjadi Teknik yang Layak Untuk Perbedaan Human-AI?

CAPTCHA telah berkembang cukup sulit bagi pengguna untuk dipecahkan dalam beberapa tahun terakhir. Apakah itu akan tetap efektif dalam deteksi spam dan bot di masa mendatang?

Singularitas Teknologi: Masa Depan Peradaban Manusia yang Jauh?

Singularitas Teknologi: Masa Depan Peradaban Manusia yang Jauh?

Saat Sains Berkembang dengan kecepatan tinggi, mengambil alih banyak upaya kita, risiko menundukkan diri kita pada Singularitas yang tidak dapat dijelaskan juga meningkat. Baca, apa arti singularitas bagi kita.

Telemedicine Dan Perawatan Kesehatan Jarak Jauh: Masa Depan Ada Di Sini

Telemedicine Dan Perawatan Kesehatan Jarak Jauh: Masa Depan Ada Di Sini

Apa itu telemedicine, perawatan kesehatan jarak jauh dan dampaknya terhadap generasi mendatang? Apakah itu tempat yang bagus atau tidak dalam situasi pandemi? Baca blog untuk menemukan tampilan!

Pernahkah Anda Bertanya-tanya Bagaimana Hacker Menghasilkan Uang?

Pernahkah Anda Bertanya-tanya Bagaimana Hacker Menghasilkan Uang?

Anda mungkin pernah mendengar bahwa peretas menghasilkan banyak uang, tetapi pernahkah Anda bertanya-tanya bagaimana cara mereka mendapatkan uang sebanyak itu? mari berdiskusi.

Pembaruan Tambahan macOS Catalina 10.15.4 Menyebabkan Lebih Banyak Masalah Daripada Menyelesaikan

Pembaruan Tambahan macOS Catalina 10.15.4 Menyebabkan Lebih Banyak Masalah Daripada Menyelesaikan

Baru-baru ini Apple merilis macOS Catalina 10.15.4 pembaruan suplemen untuk memperbaiki masalah tetapi tampaknya pembaruan menyebabkan lebih banyak masalah yang mengarah ke bricking mesin mac. Baca artikel ini untuk mempelajari lebih lanjut