Menambahkan Aplikasi Laravel ke Dalam Container Docker

Instalasi Laravel sudah. Bisa membuat container dan menjalankannya via Docker juga. Selanjutnya adalah langkah pengembangan.

Ada sedikit hal yang mengganjal, berkas Laravel yang dijalankan berada pada storage container. Hal ini bukan masalah besar kalau kita terbiasa coding menggunakan editor yang ada pada terminal seperti nano atau vim. Cukup masuk ke bash container, kemudian ubah berkas sesuai dengan kehendak kita. Menjadi merepotkan tatkala hanya mampu menggunakan editor yang berjalan di desktop seperti Sublime Text atau Atom.

Berkas yang ada di container juga dapat diutak-atik secara remote menggunakan editor Zedapp. Selengkapnya dapat dibaca pada artikel berikut: http://blog.sequenceiq.com/blog/2014/09/24/edit-files-docker.

Solusinya adalah mount volume di mesin lokal kita menuju storage yang ada pada container. Bahasa sederhananya, mengarahkan direktori di mesin fisik kita menuju mesin virtual pada direktori yang telah ditentukan. Sehingga, Apache pada container membaca direktori mesin kita sebagai web root yang akan digunakan.

Baca juga topik “Manage data in container” dari dokumentasi Docker, https://docs.docker.com/engine/tutorials/dockervolumes.

Semisal

Anggap saja punya aplikasi Laravel dalam direktori /home/user/PHP/laravel. Sedangkan di container, letak direktori Laravel berada pada /var/www/laravel. Apache pada container yang telah diinstal sebelumnya, membaca direktori tersebut secara bawaan ketika diakses melalui peramban (browser).

Langkah Demi Langkah

Proses mount volume dapat dilakukan per direktori (hanya app, resources, vendor, dan storage misalnya), atau dapat mengarahkan direktori root aplikasi kita menuju direktori root Laravel di container.

$ docker ps -a

Sebelumnya, kita sudah membuat satu container berbasis image eboraas/laravel menggunakan command docker run -v dengan nama laravel. Langkah kali inipun tak jauh berbeda. Hanya saja ditambahkan opsi baru pada docker run untuk mount direktori yang telah ditentukan. Selain itu, karena nama laravel sudah digunakan, kita dapat membuat nama lain, laravel-self misalnya.

Hal paling mudah dan singkat adalah dengan menggunakan command berikut.

$ docker run -d --name laravel-self -p 8000:80 -v /home/user/PHP/laravel:/var/www/html/laravel eboraas/laravel

Pada command di atas, saya menggunakan port default 8000 untuk menghindari konflik dengan container sebelumnya. Hal ini juga memungkinkan kedua container tersebut dapat berjalan bersamaan dalam satu waktu.

Jika hanya ingin menambahkan volume pada direktori tertentu, semisal hanya direktori app, resource, dan public pada container, maka dapat mencontoh command berikut.

$ docker run -d --name laravel-self -p 8000:80 -v /home/user/PHP/laravel/app:/var/www/html/laravel/app -v /home/user/PHP/laravel/resources:/var/www/html/laravel/resources -v /home/user/PHP/laravel/public:/var/www/html/laravel/public  eboraas/laravel

Dapat dilihat bahwa perintah mount volume ditambahkan satu persatu sesuai dengan direktori yang dikehendaki.

Karena kita tidak menggunakan direktori vendor dari mesin lokal, maka secara bawaan direktori yang digunakan adalah vendor yang berada di container. Maka dari itu perlu penyesuaian berkas .env dan berkas composer.json yang berada di container. Setelah itu, jangan lupa untuk update Composer.

$ docker exec -it laravel bash
// update composer
$ root@5bb96eccd613:/# cd /var/www/laravel/
$ root@5bb96eccd613:/var/www/laravel# composer update
// ubah .env
$ nano .env
Jika menemukan pesan kesalahan berupa “bash: nano: command not found” saat menjalankan nano, maka cukup ketikkan perintah berikut pada bash container: export TERM=xterm.

Langkah terakhir, buka peramban dan akses URL http://localhost:8000. Dan, semoga apa yang dijalankan sesuai dengan harapan.

Akhir dari artikel ini menimbulkan pertanyaan baru lagi, Bagaimana jika ingin menggunakan basisdata seperti MySQL atau MongoDB pada aplikasi Laravel yang berjalan di atas Docker?

Ada pada seri tutorial berikutnya. 😉