Cara Setting Sederhana Laravel dan Docker
https://www.adiputra.web.id/cara-setting-sederhana-laravel-dan-docker/
Berawal dari satu project yang memiliki environtment development yang berbeda. Saya mencoba membiasakan setup project entah dengan bahasa apapun dengan docker. Lalu apa sebenarnya docker itu? dan masalah seperti apa yang menyebabkan kita menggunakan docker?
Jawabannya itu sederhana, misalnya di local laptop kita terinstall MySQL versi 5.7. Sedangkan project hanya berjalan lancar di versi 5.6.
Apa yang harus kita lakukan? Jawaban-nya itu biasanya kita downgrade mysql menjadi versi 5.6. Tapi project lainnya yang ada di local laptop dan menggunakan MySQL versi 5.7 kita bagaimana? Dilema 😀
Saat inilah kita harus mencoba docker.
Oke searching cara install docker di laptop ubuntu, lalu mari mulai belajar docker. Ketika searching di google ada banyak sekali tutorial. Salah satu yang saya ikuti ada di sini https://www.katacoda.com/courses/docker
Saya lebih seneng langsung terjun ke project dibanding teori, padahal syarat utama untuk memahami mesti tahu teori dulu. Biasanya kalau tersesat ya tinggal google aja dan baca stackoverflow :D. So ada yang mau ikuti silahkan, mau baca teori terlebih dahulu monggo, itu lebih bagus!
Sebelum lanjut, saya disini menggunakan ubuntu 18.04. Docker versi 17.12.1-ce. Jika ada kesalahan dalam mengikuti step by step ini mungkin versi tidak sesuai atau hal lainnya.
Lanjut, saya buat per step ya biar mudah implementnya.
Install laravel di local folder kita.
- composer create-project laravel/laravel laravel-docker
Lalu kita pindah ke folder “laravel-docker” dengan perintah
- cd laravel-docker
Anda di dalam folder laravel-docker. Sekarang mari kita buat folder untuk setup docker di project laravel kita ini.
Kita buat satu folder “.docker” dengan perintah
- mkdir .docker/
Setelah itu di dalam folder .docker itu kita buat 2 file yaitu file Dockerfile dan vhost.conf dengan perintah
- touch .docker/DockerFile .docker/vhost.conf
Perintah diatas membuat file di dalam folder .docker tanpa isi.
Setelah itu kita buat satu file lagi yaitu docker-compose.yml diluar folder .docker dengan perintah.
- touch docker-compose.yml
File terakhir sudah kita buat, lalu apa isi dari ketiga file tersebut?
FILE: Dockerfile
- FROM php:7.1.8-apache
- MAINTAINER Adiputra
- COPY . /var/www/html/laravel-docker
- COPY .docker/vhost.conf /etc/apache2/sites-available/000-default.conf
- RUN docker-php-ext-install mbstring pdo pdo_mysql \
- && chown -R www-data:www-data /var/www/html/laravel-docker \
- && a2enmod rewrite
Dockerfile adalah file yang berisi perintah-perintah dalam mengisi container/image pada docker yang ingin kita buat. Pada file ini berisi banyak perintah yang bisa kita lihat pada dokumentasi url berikut: https://docs.docker.com/engine/reference/builder/#usage
FROM xxx artinya adalah kita ingin docker menyimpan data-data PHP dan Apache. Pada kode diatas kita menggunakan php dengan versi 7.1.8 beserta apachenya. Perintah FROM ini seperti label yang menandakan bahwa docker image ini dibungkus dengan spesifikasi utama yaitu php:7.1.8-apache.
Jika kita ingin membuat docker image dengan ubuntu, bisa menggunakan FROM ubuntu:latest. Berarti environtment utama adalah ubuntu terakhir.
MAINTAINER artinya adalah pembuat docker project ini.
COPY artinya mengcopy atau mengarahkan file ke satu lokasi tertentu. Terlihat disana ada dot ( . ) dimana itu adalah semau file dimana file dockerfile ini dibuat ke folder tujuan yaitu /var/www/html/laravel-docker
COPY yang kedua adalah mengcopy file vhost.conf yaitu config apache ke folder config apache yang ada di ubuntu saya.
RUN adalah perintah untuk menjalankan satu proses seperti proses install ‘apt-get install’ atau proses apa saja yang ada pada lingkungan linux.
FILE: vhost.conf
File ini berisi kode seperti berikut:
- <VirtualHost *:80>
- DocumentRoot /var/www/html/laravel-docker/public
- <Directory "/var/www/html/laravel-docker/public">
- AllowOverride all
- Require all granted
- </Directory>
- ErrorLog ${APACHE_LOG_DIR}/error.log
- CustomLog ${APACHE_LOG_DIR}/access.log combined
- </VirtualHost>
Jika yang pernah membuat virtualhost dengan apache sudah mengerti pasti kode ini ya.
File ketika kita skip dulu, nanti kita lanjutkan dibawah setelah kita berhasil membuat image dengan docker.
[crp]
Membuat Image Docker
Setelah Dockerfile sudah kita isi, mari kita buat image tersebut dengan perintah:
- docker build --file .docker/DockerFile -t laravel-docker .
Ketika kita ketik di commandline, ini membutuhkan waktu yang agak lama dan memerlukan koneksi internet karena docker sedang mendownload resources2 yang telah kita ketik di file Dockerfile.
–file artinya kita memanggil Dockerfile
-t artinya kita beri nama image tersebut dengan laravel-docker. Lalu di belakang ada titik yang menandakan bahwa docker berada di current folder yaitu laravel-docker. Pastikan kita menggetik perintah diatas di dalam folder laravel-docker ya.
Jika berhasil, kita ketik perintah kembali untuk melihat apa sudah ada image yang telah kita buat tadi dengan perintah.
- docker images
Hasil akan seperti atau ada beberapa kolom seperti ini.
Keliatan ya ada REPOSITOY laravel-docker. Saya buatnya sudah 13 hari yg lalu 😀
Setelah itu, mari kita coba jalankan docker laravel ini dengan perintah
- docker run --rm -p 8080:80 laravel-docker
Perintah tersebut menjalankan laravel-docker dengan beberapa flag.
–rm, artinya akan menghapus laravel-docker sebelumnya jika masih berjalan.
-p, artinya adalah port untuk menjalankan laravel-docker ini. 8080:80 artinya adalah kita menggunakan port 8080 lalu port 80 itu port di image dockernya. Port 8080 ngemap ke port 80 yg ada di image docker.
Coba akses pada browser kawan-kawan dengan http://localhost:8080 akan menampilkan laravel page.
Lalu jika kita ketik perintah
- docker ps
akan menampilkan list image yang sedang berjalan.
Sampai disini, laravel dan docker sudah bisa kita gunakan namun ketika kita menjalankan docker run tersebut, setiap ada perubahan dari kode kita, docker run tersebut tidak memberikan perubahan dari kode kita. Nah untuk itulah kita gunakan docker-compose.
FILE: docker-compose.yml
File ini adalah settingan untuk docker-compose. apa itu docker-compose?
Docker Compose itu seperti tool untuk menghubungkan dan menjalankan banyak containers/tempat. Beberapa penjelasan lengkap ada di link berikut: https://docs.docker.com/compose/overview/
Baik, sekarang isi docker-composer.yml ini seperti berikut:
- version: '2.1'
- services:
- laravel-docker:
- image: laravel-docker
- build:
- context: .
- dockerfile: .docker/DockerFile
- ports:
- - 8080:80
- volumes:
- - .:/var/www/html/laravel-docker
- links:
- - mysql
- environment:
- DB_HOST: mysql
- DB_DATABASE: laravel_docker
- DB_USERNAME: root
- DB_PASSWORD: root
- mysql:
- image: mysql:5.6
- ports:
- - 13306:3306
- environment:
- MYSQL_DATABASE: laravel_docker
- MYSQL_USER: root
- MYSQL_PASSWORD: root
- MYSQL_ROOT_PASSWORD: root
Setelah itu, mari kita jalankan docker dengan perintah
- docker-compose up --build
Kode diatas seperti kita menjalankan docker build diatas, namun kita jalankan dengan docker-compose.
Setelah berhasil kita build dengan docker-compose. Saatnya kita jalankan dengan perintah
- docker-compose up
Jika berjalan lancar, coba buka kembali url http://localhost:8080. Apa memunculkan halaman laravel?
Tada, kita berhasil menggunakan docker-compose.
Jika ada error, pastikan folder storage dan bootstrap di laravel-docker itu di set dengan perintah
- chmod -R o+rw bootstrap/ storage/
Pada penjelasan di atas saya sudah bilang jika ada perubahan maka docker-compose akan membaca perubahan tersebut. Silahkan coba-coba mengganti kode atau merubah kode pada laravel.
Ada sedikit pertanyaan. Pada laravel-docker kita tersebut, terdapat perintah untuk menginstall mysql. Lalu bagaimana jika kita ingin menambahkan software/component/lainnya ke dalam image laravel-docker kita?
Misalnya kita ingin menambahkan redis ke dalam image kita. Hal ini bisa kita lakukan dengan cara mengedit docker-compose.yml lalu menambahkan redis sehingga menjadi seperti ini.
- version: '2.1'
- services:
- laravel-docker:
- image: laravel-docker
- build:
- context: .
- dockerfile: .docker/DockerFile
- ports:
- - 8080:80
- volumes:
- - .:/var/www/html/laravel-docker
- links:
- - mysql
- environment:
- DB_HOST: mysql
- DB_DATABASE: laravel_docker
- DB_USERNAME: root
- DB_PASSWORD: moklet
- mysql:
- image: mysql:5.6
- ports:
- - 13306:3306
- environment:
- MYSQL_DATABASE: laravel_docker
- MYSQL_USER: root
- MYSQL_PASSWORD: moklet
- MYSQL_ROOT_PASSWORD: moklet
- redis:
- image: redis:4.0-alpine
- ports:
- - 16379:6379
Terlihat di paling akhir, ada penambahan redis dengan port 16379:6379.
Jangan lupa di build dulu ya dengan perintah
- docker-compose up --build
Dan jangan lupa juga menginstall component php-predis pada laravel kita.
Mengakses commandline di Docker yang aktif
Ketika docker-compose itu aktif atau sedang berjalan, kita bisa akses masuk ke environment docker tersebut. Untuk apa masuk?
Biasanya kita masuk ke environment tersebut untuk menjalankan perintah-perintah pada apps kita (laravel). Misalnya kita ingin membuat migrations. Karena membuat migration itu kaitan dengan MySQL, makanya kita perlu akses commandline environment docker.
Kalau kita akses pakai environment biasa? Bisa saja namun ingat, mungkin saja MySQL yang di docker dengan MySQL yang ada di laptop kita berbeda versi. Nah untuk itulah kita jalankan commandline di docker.
Perintah untuk masuk ke environment docker adalah:
- docker-compose exec laravel-docker /bin/bash
Sampai disini, kawan-kawan bisa menjalankan perintah seperti php artisan migrate atau lainnya.
Akses MySQL Docker
Telah disebutkan diawal bahwa di laptop saya terinstall MySQL versi 5.7. Sedangkan project yang berjalan itu membutuhkan MySQL versi 5.6. Oleh sebab itulah di docker-compose.yml saya set mysql versi 5.6.
Lalu apa MySQL tersebut bisa diakses? Bisa dong. Portnya aja akses sesuai dengan yang ada di docker-compse.yml.
Pada docker-compose.yml tersebut saya setting mysql ke port 13306: 3306 artinya jika diakses di luar docker mesti dengan port 13306 sedangkan di docker menggunakan port 3306.
Jika dijalankan akan memunculkan seperti ini
Nah dari sini kita bisa akses MySQL versi 5.6. Inget ya untuk pengembangan laravel-docker ini pastikan kita menggunakan versi ini. Jangan lupa nanti akses mysql yg default di local lagi.
Sampai disini kita udah bisa pakai nih docker dengan laravel dimana di dalam docker terinstall MySQL versi 5.6 sedangkan di local laptop kita terinstall MySQL versi 5.7.
Jangan seneng dulu, docker punya beberapa kasus dan fitur menarik lainnya lho. Baca terus dokumentasinya, terus mencoba dan kalau berminat ikut belajar bareng yuk 😀 di kursus training backend laravel.
Kode ini bisa dilihat di github: https://github.com/adiputra22/laravel-docker
Bye 🙂
Tidak ada komentar:
Posting Komentar