Docker merupakan tools yang populer digunakan untuk mengelola container. Isi container ini bisa berupa aplikasi, service, atau bahkan sistem operasi. Tentu kalian sudah mengetahui hal itu.
Penulis mencoba untuk menjalankan docker pada WSL dengan distro Debian. Hal ini penulis lakukan untuk menjalankan aplikasi laravel melalui Laravel Sail baca disini.
Kenapa laravel sail? karena terdapat fitur yang sangat membantu diantaranya sail dapat mempersiapkan container yang isinya sudah terinstall PHP, Composer, Node, dan database (entah mysql, dan lain-lain) hanya dengan menjalankan perintah
sail up
.
Lalu melibatkan octane untuk menjalankan php app server dari frankenphp.
Ya, penulis tahu, terlihat sangat rumit, lebih jelasnya:
- Laravel sail: library yang memudahkan kita dalam mengelola container untuk menjalankan aplikasi laravel.
- Octane: PHP runtime yang dikembangkan oleh laravel untuk meningkatkan performa aplikasi laravel dengan menjalankan aplikasi laravel dalam mode server (diletakan dalam memory)
- Frankenphp: Server PHP aplikasi web yang mendukung berbagai keperluan untuk menjalankan aplikasi ke mode production (biasanya karena sudah ada SSL Certificate, Support HTTP/1.1 hingga HTTP/3, membuat aplikasi dapat melayani request secepat kilat, dll.)
OKe balik lagi ke topik, penulis kedapatan error seperti berikut ketika ingin menjalankan sail up
:
rachyharkov@MSI:~/$ sudo ./vendor/bin/sail up
[sudo] password for rachyharkov:
Docker is not running.
Kalian sampai sini mungkin bingung, dan mungkin kalian akan mengira “ini kan WSL” yang artinya limitasi pasti ada, biasanya docker daemon dapat mudah dijalankan di OS Linux, Mac, maupun Windows secara natively menggunakan docker desktop.
Karena penulis memiliki file docker-compose.yml pada project laravel (hasil dari perintah sail:install
), penulis coba docker compose up
:
rachyharkov@MSI:~/$ sudo docker compose up
WARN[0000] The "PWD" variable is not set. Defaulting to a blank string.
WARN[0000] The "WWWUSER" variable is not set. Defaulting to a blank string.
WARN[0000] The "WWWGROUP" variable is not set. Defaulting to a blank string.
unable to get image 'mysql/mysql-server:8.0': Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
Yap, semua error terkait ke docker daemon yang tidak berjalan.
Lalu penulis coba cek docker services
terlebih dahulu dengan perintah service --status-all
Gunakan
sudo
jika perintah tidak berjalan, mungkin karena perintah tersebut memerlukan akses root.
rachyharkov@MSI:~/$ sudo service --status-all
[ - ] apparmor
[ - ] cron
[ - ] dbus
[ - ] docker
[ ? ] hwclock.sh
[ ? ] kmod
[ ? ] networking
[ - ] procps
[ - ] sudo
[ - ] udev
docker
terlihat minus, artinya tidak jalan
Maka dari itu, perlu diaktifkan dahulu docker daemon dengan perintah
rachyharkov@MSI:~/$ sudo service docker start
Starting Docker: docker.
rachyharkov@MSI:~/$
Yap, tidak terjadi apa-apa, tapi jika kamu coba cek lagi:
rachyharkov@MSI:~/$ sudo service --status-all
[ - ] apparmor
[ - ] cron
[ - ] dbus
[ - ] docker
[ ? ] hwclock.sh
[ ? ] kmod
[ ? ] networking
[ - ] procps
[ - ] sudo
[ - ] udev
Status pada docker tidak berubah.
Singkat saja, ketika penulis mencari tahu dengan bermodalkan error yang ditimbulkan oleh perintah compose up
, tiba-tiba ketemu forum diskusi berikut:
Ketika membaca secara seksama, seseorang (shout out to him quansangle) memberi solusi untuk “benar-benar” mengaktifkan docker daemon.
rachyharkov@MSI:~/$ sudo update-alternatives --config iptables
There are 2 choices for the alternative iptables (providing /usr/sbin/iptables).
Selection Path Priority Status
------------------------------------------------------------
* 0 /usr/sbin/iptables-nft 20 auto mode
1 /usr/sbin/iptables-legacy 10 manual mode
2 /usr/sbin/iptables-nft 20 manual mode
Press <enter> to keep the current choice[*], or type selection number: 1
update-alternatives: using /usr/sbin/iptables-legacy to provide /usr/sbin/iptables (iptables) in manual mode
Ketik perintah update-alternatives --config iptables
, lalu ketik angka 1, dan enter.
Ketika kamu jalankan ulang service docker start
, dan cek kembali service --status-all
, maka docker daemon sudah berjalan.
rachyharkov@MSI:~/$ sudo service docker start
Starting Docker: docker.
rachyharkov@MSI:~/$ sudo service --status-all
[ - ] apparmor
[ - ] cron
[ - ] dbus
[ + ] docker
[ ? ] hwclock.sh
[ ? ] kmod
[ ? ] networking
[ - ] procps
[ - ] sudo
[ - ] udev
Ketika menjalankan ulang compose up
, maka tidak akan ada error lagi.
rachyharkov@MSI:~/projects/thumbnail-blog-api$ sudo docker compose up
[sudo] password for rachyharkov:
WARN[0000] The "WWWGROUP" variable is not set. Defaulting to a blank string.
WARN[0000] The "PWD" variable is not set. Defaulting to a blank string.
WARN[0000] The "WWWUSER" variable is not set. Defaulting to a blank string.
[+] Running 7/9
⠼ mysql [⣿⣿⣦⣿⣿⣿⣿] 131.2MB / 165.9MB Pulling 26.5s
✔ 6a4a3ef82cdc Pull complete 15.3s
✔ 5518b09b1089 Pull complete 15.4s
⠙ b6b576315b62 Downloading [==================================> ]... 22.2s
✔ 349b52643cc3 Download complete 3.0s
✔ abe8d2406c31 Download complete 4.2s
✔ c7668948e14a Download complete 6.0s
✔ c7e93886e496 Download complete 6.8s
! laravel.test Warning Get "https://sail-8.4/v2/": dial tcp: lookup sail-8.4 on ...
Selesai.
Seharusnya ketika kamu menjalankan hal-hal berkaitan dengan container, semuanya berjalan dengan baik.