Cara menggunakan docker php-fpm

Dalam tutorial ini kita akan menyiapkan tumpukan LEMP di dalam buruh pelabuhan. Kita dapat dengan mudah menarik dan mengatur gambar LEMP di dalam buruh pelabuhan dalam beberapa menit. Tetapi untuk pemahaman yang lebih baik tentang tumpukan, kami akan mengatur masing-masing gambar NGINX, MySQL ,PHP/PHPMyAdmin satu per satu. Setelah Anda memahami ide inti tumpukan LEMP di buruh pelabuhan, maka Anda dapat mencoba mengatur tumpukan di buruh pelabuhan sebagai satu gambar.

Untuk menginstal/mengatur LEMP di docker , kita perlu menginstal docker dan docker compose terlebih dahulu. Jalankan perintah berikut untuk menginstal keduanya.

$ apt-get install docker docker-compose

Mulai layanan buruh pelabuhan

$ service docker start

  • Pengaturan Folder
  • Instal NGINX
  • Instal PHP/FPM
  • Instal MySQL/PhpMyAdmin
  • Kesimpulan

Pengaturan Folder

Kami akan menggunakan struktur folder berikut untuk tumpukan LEMP kami.

  1. Buat direktori root dengan nama LEMP-Docker dan satu file docker-compose.yml di dalamnya
  2. Untuk log NGINX, buat direktori dengan nama “logs” di dalam LEMP-Docker dan buat dua file nginx-access.log dan nginx-error.log di dalam direktori logs.
  3. Untuk file konfigurasi NGINX, buat direktori dengan nama “sites-available” di dalam LEMP-Docker dan buat file konfigurasi default.
  4. Akhirnya untuk file PHP Anda buat direktori dengan nama public_html di dalam LEMP-Docker. Kami akan menempatkan file PHP di direktori ini pada tahap selanjutnya.

Jadi struktur direktori kami terlihat seperti berikut-

LEMP-Docker/
docker-compose.yml
log
nginx-access.log
nginx-error.log
public_html
index.php
situs-tersedia
default

Mari kita buat struktur direktori dan file di atas dengan cepat.

$ cd ~
$ mkdir LEMP-Docker
$ cd LEMP-Docker/
$ mkdir logs
$ touch logs/nginx-access.log logs/nginx-error.log
$ mkdir sites-available
$ touch sites-available/default
$ mkdir public_html
$ touch docker-compose.yml

Selanjutnya kita akan mengedit konfigurasi default NGINX “default” dan menambahkan yang berikut ini. Dalam direktif server_name, tempatkan alamat IP buruh pelabuhan. Untuk menemukannya gunakan perintah $ ifconfig dan cari baris inet addr: di baris docker*

$ vi sites-available/default

server {
listen  80;
# this path MUST be exactly as docker-compose.fpm.volumes,
# even if it doesn't exists in this dock.
root /usr/share/nginx/html;
index index.html;
server_name 172.17.0.1;
location / {
try_files $uri /index.html$is_args$args;
}
}

Instal NGINX

Untuk menyiapkan wadah Nginx, kami akan menambahkan yang berikut ke file docker-compose.yml

$ vi docker-compose.yml
nginx:
    image: tutum/nginx
    ports:
      - "80:80"
    volumes:
      - ./sites-available/default:/etc/nginx/sites-available/default
      - ./sites-available/default:/etc/nginx/sites-enabled/default
      - ./logs/nginx-error.log:/var/log/nginx/error.log
      - ./logs/nginx-access.log:/var/log/nginx/access.log

Docker-compose.yml di atas akan menarik image NGINX dari tutum/nginx dan port proxy 80 dari container ke port 80 dari host docker. Kemudian kita akan me-mount file konfigurasi NGINX default dari direktori nginx/default ke folder nginx container yang tersedia di situs dan yang diaktifkan situs. Demikian pula kita akan menautkan logs/*.logs dari host buruh pelabuhan ke log di dalam wadah.

Sekarang dari dalam CWD, jalankan perintah berikut untuk menarik dan membuat wadah NGINX.

$ docker-compose up -d
Pulling nginx (tutum/nginx:latest)...
latest: Pulling from tutum/nginx
faecf96fd5ab: Pull complete
995977506e98: Pull complete
-------------------------
-------------------------
Digest: sha256:69a727916ab40de88f66407fb0115e35b759d7c6088852d901208479bec47429
Status: Downloaded newer image for tutum/nginx:latest
-------------------------

Untuk memeriksa apakah wadah NGINX benar-benar dibuat, jalankan perintah berikut.

$ docker ps

Untuk membuat terowongan ke dalam wadah NGINX dan untuk mendapatkan shell bash, gunakan perintah berikut.

$ docker exec -i -t 75088fe8fe60 bash

Sekarang temukan proses NGINX

$ ps -aux | grep NGINX

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.6  85892  6572 ?        Ss   07:13   0:00 nginx: master process /usr/sbin/nginx
www-data     6  0.0  0.3  86212  3428 ?        S    07:13   0:00 nginx: worker process
www-data     7  0.0  0.3  86212  3428 ?        S    07:13   0:00 nginx: worker process
www-data     8  0.0  0.3  86212  3428 ?        S    07:13   0:00 nginx: worker process
www-data     9  0.0  0.3  86212  3428 ?        S    07:13   0:00 nginx: worker process

Keluar dari shell bash wadah NGINX

$ exit

Terakhir buka browser favorit Anda, arahkan ke http://. Anda akan disambut dengan halaman selamat datang NGINX seperti di bawah ini.

Berhenti dan keluarkan wadah untuk sementara waktu.

$ docker stop 75088fe8fe60
$ docker rm 75088fe8fe60

Instal PHP/FPM

Agar PHP bekerja dengan nginx, kita perlu PHP dengan modul FPM diaktifkan. Oleh karena itu kita akan mengedit docker-compose.yml dan memilih gambar php:fpm yang menentukan port untuk FPM, yaitu 9000 dan memasang direktori public_html dari host buruh pelabuhan ke /usr/share/nginx/html direktori wadah PHP-FPM

phpfpm:
     image: php:fpm
     ports:
       - "9000:9000"
     volumes:
       - ./public_html:/usr/share/nginx/html

Kami akan memulai wadah di latar belakang dan membiarkannya berjalan dengan perintah berikut.

$ docker-compose up -d

Pulling phpfpm (php:fpm)...
fpm: Pulling from library/php
75a822cd7888: Pull complete
e4d8a4e038be: Pull complete
-----------------------------
-----------------------------
Digest: sha256:01d1d6345bc30f206fb048c5f1afa882f17f54f275ffe7fd5a83524d8294bc79
Status: Downloaded newer image for php:fpm
-----------------------------

Periksa wadah yang sedang berjalan dengan perintah berikut, php-fpm berjalan di port 9000 dan dipetakan ke port 9000 dari host buruh pelabuhan.

$ docker ps -a

Buat terowongan ke dalam wadah PHP-FPM dan untuk mendapatkan shell bash, gunakan perintah berikut.

$ docker exec -i -t 841f20b8e7e3 bash

Periksa proses di dalam wadah dengan perintah berikut.

$ ps -aux

Setelah kami yakin bahwa wadah PHP-FPM berjalan, kami akan memodifikasi file konfigurasi NGINX default sehingga dapat memproses file PHP. Tambahkan bagian berikut di bagian file sites-available/default setelah location / {}.

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

Jadi file konfigurasi default NGINX terakhir kami terlihat seperti ini-

Cara menggunakan docker php-fpm

Selanjutnya buat file index.php di dalam public_html dan tambahkan berikut ini dan restart buruh pelabuhan PHP-FPM.

[email protected]:~/public_html# vi index.php

<?php
echo phpinfo();
?>

Mulai ulang wadah php-fpm.

$ docker restart lempdocker_phpfpm_1

Arahkan browser Anda ke http:///index.php , halaman phpinfo akan ditampilkan

Cara menggunakan docker php-fpm

Instal MySQL/PhpMyAdmin

Pada langkah terakhir kita akan menyiapkan wadah MySQL dan PhpMyAdmin di dalam host buruh pelabuhan. Edit file docker-compose.yml dan tambahkan bagian berikut:

mysql:
image: mariadb
environment:
MYSQL_ROOT_PASSWORD: password

phpmyadmin:
image: corbinu/docker-phpmyadmin
restart: always
links:
- mysql:mysql
ports:
- 8183:80
environment:
MYSQL_USERNAME: root
MYSQL_ROOT_PASSWORD: password

Di bagian mysql, kita akan mengambil gambar mariadb dan meneruskan panggilan variabel lingkungan MYSQL_ROOT_PASSWORD ke gambar. Gambar akan mengambil nilai ini sebagai kata sandi saat membangun wadah MySQL. Di bagian phpmyadmin, ambil gambar dari corbinu/docker-phpmyadmin dan tautkan wadah ini dengan database mysql wadah mysql. Port host docker no 8183 akan menjadi proxy ke port 80 container (NGINX). Tetapkan lingkungan nama pengguna phpmyadmin sebagai root dan kata sandi sebagai ‘kata sandi’.

Mulai wadah di latar belakang dan biarkan berjalan dengan perintah berikut. Jangan lupa untuk menghentikan container yang sedang berjalan sebelum menjalankan perintah berikut.

$ docker-compose up -d
-------------------------
Pulling mysql (mariadb:latest)...
latest: Pulling from library/mariadb
75a822cd7888: Already exists
b8d5846e536a: Pull complete
------------------------
------------------------

Digest: sha256:0ce9f13b5c5d235397252570acd0286a0a03472a22b7f0384fce09e65c680d13
Status: Downloaded newer image for mariadb:latest
------------------------

Pulling phpmyadmin (corbinu/docker-phpmyadmin:latest)...
latest: Pulling from corbinu/docker-phpmyadmin
04c460fac791: Pull complete
0a0916b29f3e: Pull complete
b25f4e7a7766: Pull complete
-----------------------------
-----------------------------
44f124587a1d: Pull complete
Digest: sha256:8ba64f73a8f28f62c00c9515171361b9d5f7a0c6f6fa0aa4418839f9974d098d
Status: Downloaded newer image for corbinu/docker-phpmyadmin:latest
-----------------------------

Sekarang daftarkan semua container yang sedang berjalan dengan perintah buruh pelabuhan berikut.

$ docker ps -a

Buat terowongan ke dalam wadah MySQL dan dapatkan shell mysql dengan memasukkan nama pengguna dan kata sandi

$ docker exec -i -t f63eadc48545 mysql -u root -ppassword
Welcome to the MariaDB monitor.  Commands end with ; or g.
Your MariaDB connection id is 3
Server version: 10.1.20-MariaDB-1~jessie mariadb.org binary distribution
Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.

MariaDB [(none)]>
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
3 rows in set (0.00 sec)

Untuk mendapatkan halaman login phpmyadmin, arahkan browser Anda ke http://:8183/ Ketik username sebagai root dan password sebagai password, Anda akan diarahkan ke homepage phpmyadmin.

Cara menggunakan docker php-fpm

Sekarang mari kita coba memahami aliran di dalam tumpukan dengan cepat. Alamat IP NGINX diatur ke host buruh pelabuhan dan konfigurasi default mengatur root web ke /usr/share/nginx/html. Selain itu, konfigurasi juga memasang volume dari host buruh pelabuhan yang menyertakan file dari sites_available dan direktori log ke direktori /etc/nginx/sites-available dan /var/log/nginx dalam volume: bagian dari docker-compose.yml. (Bagian NGINX). Docker.compose.yml juga menyiapkan NGINX untuk memahami PHP melalui modul PHP-FPM dan jalur dasar untuk file sumber PHP ditentukan yang merupakan direktori public_html (bagian PHP-FPM). MySQL akan menggunakan port default 3306 dan ditautkan ke server NGINX sehingga aplikasi PHP tahu di mana harus membuat koneksi database. Phpmyadmin dapat diakses melalui port no 8083 dari host docker yang dipetakan ke port no 80 container. Tautan antara MySQL dan phpmyadmin dilakukan di bagian tautan yang menentukan nama database sebagai mysql (mysql:mysql).

Kami telah memasang LEMP stack sebagai wadah satu per satu. Prosesnya agak memakan waktu. Setelah Anda yakin tentang pengaturan yang telah kami selesaikan barusan, Anda dapat menginstal docker tumpukan dari satu gambar. Periksa dockerhub untuk menjelajahi semua gambar. Untuk melakukannya gunakan perintah berikut dari terminal.

$ docker search LEMP

$ docker pull <IMAGE-Name>

dan kemudian gunakan perintah docker run yang melewati semua parameter/konfigurasi yang Anda butuhkan, tumpukan LEMP Anda di dalam wadah akan habis dalam beberapa menit.

Kesimpulan

Sekarang karena kita telah mempelajari cara mengemas NGINX, MySQL, PHP dan mengetahui cara menautkannya dan memasang volume dari sistem file host ke sistem file penampung, kini Anda dapat menambahkan CMS pilihan Anda seperti Joomla, Drupal, atau WordPress di container untuk memperluas fungsionalitas stack dengan memperluas docker-compose.yml.