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 :
- Dapat membuat environment terpisah menggunakan
Dockerfile
sehinga bisa digunakan dimana saja. - 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
- $ 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 :
- $ sudo chmod +x /usr/local/bin/docker-compose
Jika sudah silakan cek dengan menggunakan
- $ docker-compose --version
Akan menghasilkan informasi sebagai berikut misalnya :
- 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 :
- Menggunakan PHP versi 7
- Menggunakan nginx
- Menggunakan database mysql versi 5.6
Lalu isikan informasi berikut di
docker-compose.yml
sebagai berikut :- ersion: '2'
- services:
- web:
- build:
- context: ./
- dockerfile: web.docker
- volumes:
- - ./:/var/www/docker
- ports:
- - "8080:80"
- links:
- - app
- app:
- build:
- context: ./
- dockerfile: app.docker
- volumes:
- - ./:/var/www/docker
- database:
- image: mysql:5.6
- environment:
- - "MYSQL_ROOT_PASSWORD=secret"
- - "MYSQL_DATABASE=dockerApp"
- ports:
- - "33061:3306"
Penjelasan Singkat :
Di atas tadi saya menyiapkan 3 buah service untuk laravel docker ini :
- 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 - app : Build context sama dengan penjelasan sebelumnya, dockerfile diberi nama app.docker di sini saya mengatur tentang konfigurasi php dan sejenisnya.
- 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 :
- FROM php:7-fpm
- RUN useradd -ms /bin/bash docker
- RUN apt-get update && apt-get install -y libmcrypt-dev mysql-client \
- && docker-php-ext-install mcrypt pdo_mysql
- USER docker
- WORKDIR /var/www/docker
Penjelasan singkat ;
- Menggunakan php 7
- Menambahkan user baru “docker” sehingga saat login ssh ke dalam docker container yang ini levelnya tidak langsung root.
- Install php dan libaray-library-nya.
- Memastikan direktori berada di
/var/www/docker
web.docker Masih di root aplikasi buat berkas baru dengan anam
web.docker
dan isikan sebagai berikut- FROM nginx:1.10
- ADD ./vhost.conf /etc/nginx/conf.d/default.conf
- WORKDIR /var/www/docker
Penjelasan singkat :
- Menggunakan nginx versi 1.10
- Menggunakan konfigurasi dari berkas
vhsot.conf
(ini akan dibuat setelah ini) yang disalin ke direktori nginx di docker - 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.- server {
- listen 80;
- index index.php index.html;
- root /var/www/docker/public;
- location / {
- try_files $uri /index.php?$args;
- }
- location ~ \.php$ {
- fastcgi_split_path_info ^(.+\.php)(/.+)$;
- fastcgi_pass app:9000;
- fastcgi_index index.php;
- include fastcgi_params;
- fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
- fastcgi_param PATH_INFO $fastcgi_path_info;
- }
- }
Setelah semua siap, maka sekarang saatnya megaktifkan
container
yang dibuat tadi dengan cara :- 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
- DB_CONNECTION=mysql
- DB_HOST= 127.0.0.1
- DB_PORT=33061
- DB_DATABASE=dockerApp
- DB_USERNAME=root
- DB_PASSWORD=secret
Tapi selalu error “SQLSTATE[HY000] [2002] Connection refused” cara menanggulanginya adalah :
- Cek docker network Periksa terlebih dahulu daftar docker network yang digunakan dengan cara
- docker network ls
Akan menghasilkan informasi sebagai berikut
- 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
- 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
- br-66eaf73473be Link encap:Ethernet HWaddr 02:42:f8:30:1e:3d
- inet addr:172.18.0.1 Bcast:0.0.0.0 Mask:255.255.0.0
- inet6 addr: fe80::42:f8ff:fe30:1e3d/64 Scope:Link
- UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
- RX packets:5931 errors:0 dropped:0 overruns:0 frame:0
- TX packets:7890 errors:0 dropped:0 overruns:0 carrier:0
- collisions:0 txqueuelen:0
- 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 :- DB_CONNECTION=mysql
- DB_HOST= 172.18.0.1
- DB_PORT=33061
- DB_DATABASE=dockerApp
- DB_USERNAME=root
- 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 :
- https://docs.docker.com/compose/overview/
- https://docs.docker.com/compose/install/
- https://kyleferg.com/laravel-development-with-docker/#laravel-setup
Tidak ada komentar:
Posting Komentar