Kamis, 05 Desember 2019

Laravel docker compose dan docker file

Memasang laravel dengan Docker

https://blog.arsmp.com/komputer/pemograman/memasang-laravel-dengan-docker/
Ini adalah nomor 5 mengenai menggunakan laravel. Tapi untuk yang docker ini emang perlu persiapan tambahan. Pertama jelas docker sebagai engine utamanya dan yang kedua adalah docker-compose.
Apa itu docker-compose ? Menurut situs docker sendiri saya menyimpulkan seperti ini :
  1. Dapat membuat environment terpisah menggunakan Dockerfile sehinga bisa digunakan dimana saja.
  2. Mendefinesikan masing-masing service aplikasi melalui docker-composer.yml sehingga dapat berjalan bersamaan.

Memasang Docker Compose

Pertama kita bisa cek dulu versi docker compose di halaman githubnya di sinihttps://github.com/docker/compose/releases saat saya menulis ini berada di versi 1.9.
Lalu docker-composer
  1. $ sudo curl -L "https://github.com/docker/compose/releases/download/1.9.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
Lalu ubah permission docker compose tersebut :
  1. $ sudo chmod +x /usr/local/bin/docker-compose
Jika sudah silakan cek dengan menggunakan
  1. $ docker-compose --version
Akan menghasilkan informasi sebagai berikut misalnya :
  1. docker-compose version 1.9.0, build 2585387

Laravel

Saya berasumsi bahwa sudah sudah memiliki source laravel di komputer/laptop masing-masing. Jika sudah buka folder laravel di mesin masing-masing. Lalu di root folder sejajar dengan .env, composer.json, dan lainnya buatlah satu berkas baru dengan nama docker-compose.yml.
Di sini saya akan mempersiapkan laravel dengan environment sebagai berikut :
  1. Menggunakan PHP versi 7
  2. Menggunakan nginx
  3. Menggunakan database mysql versi 5.6
Lalu isikan informasi berikut di docker-compose.yml sebagai berikut :
  1. ersion: '2'
  2. services:
  3. web:
  4. build:
  5. context: ./
  6. dockerfile: web.docker
  7. volumes:
  8. - ./:/var/www/docker
  9. ports:
  10. - "8080:80"
  11. links:
  12. - app
  13. app:
  14. build:
  15. context: ./
  16. dockerfile: app.docker
  17. volumes:
  18. - ./:/var/www/docker
  19. database:
  20. image: mysql:5.6
  21. environment:
  22. - "MYSQL_ROOT_PASSWORD=secret"
  23. - "MYSQL_DATABASE=dockerApp"
  24. ports:
  25. - "33061:3306"
Penjelasan Singkat :
Di atas tadi saya menyiapkan 3 buah service untuk laravel docker ini :
  1. Web : Build context berarti lokasi source code, karena docker composer berada di root aplikasi cukup ketikan ./ saja. dockerfile saya beri nama web.docker di sinilah saya mengatur konfigurasi webserver (nginx). Volumes : path untuk source di dalam docker. Ports : menggunakan port 8080 yang diteruskan ke 80
  2. app : Build context sama dengan penjelasan sebelumnya, dockerfile diberi nama app.docker di sini saya mengatur tentang konfigurasi php dan sejenisnya.
  3. database : Menggunakan mysql 5,6 dengan passwod dan database yang disiapkan. Menggunakan port 33061 yang diterukan ke 3306.

Membuat docker-file

Tadi saya menyebutkan konfigurasi untuk web server di web.docker dan untuk aplikasinya di app.docker.
app.docker masih di root aplikasi buat berkas baru dengan nama app.docker dan isikan sebagai berikut :
  1. FROM php:7-fpm
  2. RUN useradd -ms /bin/bash docker
  3. RUN apt-get update && apt-get install -y libmcrypt-dev mysql-client \
  4. && docker-php-ext-install mcrypt pdo_mysql
  5. USER docker
  6. WORKDIR /var/www/docker
Penjelasan singkat ;
  1. Menggunakan php 7
  2. Menambahkan user baru “docker” sehingga saat login ssh ke dalam docker container yang ini levelnya tidak langsung root.
  3. Install php dan libaray-library-nya.
  4. Memastikan direktori berada di /var/www/docker
web.docker Masih di root aplikasi buat berkas baru dengan anam web.docker dan isikan sebagai berikut
  1. FROM nginx:1.10
  2. ADD ./vhost.conf /etc/nginx/conf.d/default.conf
  3. WORKDIR /var/www/docker
Penjelasan singkat :
  1. Menggunakan nginx versi 1.10
  2. Menggunakan konfigurasi dari berkas vhsot.conf (ini akan dibuat setelah ini) yang disalin ke direktori nginx di docker
  3. Memastikan direktori berada di /var/www/docker.
vhost.conf
Kareana tadi disebutkan konfigurasi nginx akan menyalin dari konfigurasi yang sudah ada maka buat dulu berkas vhost.conf di root aplikasi.
  1. server {
  2. listen 80;
  3. index index.php index.html;
  4. root /var/www/docker/public;
  5. location / {
  6. try_files $uri /index.php?$args;
  7. }
  8. location ~ \.php$ {
  9. fastcgi_split_path_info ^(.+\.php)(/.+)$;
  10. fastcgi_pass app:9000;
  11. fastcgi_index index.php;
  12. include fastcgi_params;
  13. fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  14. fastcgi_param PATH_INFO $fastcgi_path_info;
  15. }
  16. }
Setelah semua siap, maka sekarang saatnya megaktifkan container yang dibuat tadi dengan cara :
  1. docker-compose up -d --build
Tunggu sampai selesai.
Jika sudah akses di browser localhost:8080 akan menghasilkan :
Issue yang muncul
Ini issue yang saya alami saat saya hendak menggunakan database. sebelumnya di file .env saya sudah set konfigurasi seperti ini
  1. DB_CONNECTION=mysql
  2. DB_HOST= 127.0.0.1
  3. DB_PORT=33061
  4. DB_DATABASE=dockerApp
  5. DB_USERNAME=root
  6. DB_PASSWORD=secret
Tapi selalu error “SQLSTATE[HY000] [2002] Connection refused” cara menanggulanginya adalah :
  1. Cek docker network Periksa terlebih dahulu daftar docker network yang digunakan dengan cara
  1. docker network ls
Akan menghasilkan informasi sebagai berikut
  1. NETWORK ID NAME DRIVER SCOPE 0899554a5194 bridge bridge local 6be447f9587f host host local 66eaf73473be laraveldocker_default bridge local 2606a2d09a28 none null local
Laravel docker mempunyai NETWORK ID 66eaf73473be dan menggunakan tipe bridge. Sekarang cek ip dari network tersebut
2. Periksa Network
  1. sudo ifoconfig
Maka akan menghasilkan informasi network yang tersedia. Fokus saja ke network yang akan digunakan yaitu network laravel docker. Pada kasus saya terdapat informasi berikut
  1. br-66eaf73473be Link encap:Ethernet HWaddr 02:42:f8:30:1e:3d
  2. inet addr:172.18.0.1 Bcast:0.0.0.0 Mask:255.255.0.0
  3. inet6 addr: fe80::42:f8ff:fe30:1e3d/64 Scope:Link
  4. UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
  5. RX packets:5931 errors:0 dropped:0 overruns:0 frame:0
  6. TX packets:7890 errors:0 dropped:0 overruns:0 carrier:0
  7. collisions:0 txqueuelen:0
  8. RX bytes:1706901 (1.6 MiB) TX bytes:6782068 (6.4 MiB)
Ip yang dimiliki ternyata 172.18.0.1 , maka di .env ubah menjadi :
  1. DB_CONNECTION=mysql
  2. DB_HOST= 172.18.0.1
  3. DB_PORT=33061
  4. DB_DATABASE=dockerApp
  5. DB_USERNAME=root
  6. DB_PASSWORD=secret
Terakhir lakukan perintah composer dumpautoload dan php artisan config:cache maka aplikasi seharusnya bisa tersambung ke database.
Tambahan : Sebenarnya ada cara lebih mudah yaitu menggunakan laradock ( silahkan cek ke github dengan kata kunci tersebut ). Tapi karena ingin mengenal docker saya memilih menggunakan cara manual seperti ini.
REFERENSI :
  1. https://docs.docker.com/compose/overview/
  2. https://docs.docker.com/compose/install/
  3. https://kyleferg.com/laravel-development-with-docker/#laravel-setup

Tidak ada komentar:

Posting Komentar