Pengantar
Untuk menampung aplikasi mengacu pada proses mengadaptasi aplikasi dan komponennya agar dapat menjalankannya di lingkungan ringan yang dikenal sebagai wadah. Lingkungan tersebut terisolasi dan sekali pakai, dan dapat dimanfaatkan untuk mengembangkan, menguji, dan menerapkan aplikasi ke produksi.
Dalam panduan ini, kami akan menggunakan Docker Compose untuk menampung aplikasi Laravel untuk pengembangan. Setelah selesai, Anda akan memiliki aplikasi demo Laravel yang berjalan di tiga wadah layanan terpisah:
- Sebuah
app
layanan yang menjalankan PHP7.4-FPM; - Sebuah
db
layanan yang menjalankan MySQL 5.7; - Sebuah
nginx
layanan yang menggunakanapp
service untuk mengurai kode PHP sebelum menyajikan aplikasi Laravel ke pengguna akhir.
Untuk memungkinkan proses pengembangan yang disederhanakan dan memfasilitasi debugging aplikasi, kami akan menjaga file aplikasi tetap sinkron dengan menggunakan volume bersama. Kita juga akan melihat cara menggunakan docker-compose exec
perintah untuk menjalankan Komposer dan Artisan di app
wadah.
Prasyarat
- Akses ke mesin lokal Ubuntu 22.04 atau server pengembangan sebagai pengguna non-root dengan hak sudo. Jika Anda menggunakan server jarak jauh, disarankan untuk memasang firewall aktif. Untuk mengaturnya, silakan merujuk ke Panduan Pengaturan Server Awal kami untuk Ubuntu 22.04.
- Docker terinstal di server Anda, ikuti Langkah 1 dan 2 dari Cara Menginstal dan Menggunakan Docker di Ubuntu 22.04.
- Docker Compose terinstal di server Anda, ikuti Langkah 1 Cara Menginstal dan Menggunakan Docker Compose di Ubuntu 22.04.
Langkah 1 — Mendapatkan Aplikasi Demo
Untuk memulai, kami akan mengambil aplikasi demo Laravel dari repositori Github-nya. Kami tertarik dengan tutorial-01
branch, yang berisi aplikasi Laravel dasar yang kami buat di panduan pertama seri ini.
Untuk mendapatkan kode aplikasi yang kompatibel dengan tutorial ini, unduh rilis tutorial-1.0.1
ke direktori home Anda dengan:
- cd ~
- curl -L https://github.com/do-community/travellist-laravel-demo/archive/tutorial-1.0.1.zip -o travellist.zip
Kami membutuhkan unzip
perintah untuk membongkar kode aplikasi. Jika Anda belum pernah menginstal paket ini sebelumnya, lakukan sekarang dengan:
- sudo apt update
- sudo apt install unzip
Sekarang, unzip konten aplikasi dan ganti nama direktori yang belum dibongkar untuk akses yang lebih mudah:
- unzip travellist.zip
- mv travellist-laravel-demo-tutorial-1.0.1 travellist-demo
Navigasikan ke travellist-demo
direktori:
- cd travellist-demo
Pada langkah selanjutnya, kita akan membuat .env
file konfigurasi untuk mengatur aplikasi.
Langkah 2 — Menyiapkan .env
Aplikasi Berkas
File konfigurasi Laravel terletak di direktori bernama config
, di dalam direktori root aplikasi. Selain itu, sebuah .env
file digunakan untuk menyiapkan konfigurasi yang bergantung pada lingkungan, seperti kredensial dan informasi apa pun yang mungkin berbeda di antara penerapan. File ini tidak termasuk dalam kontrol revisi.
Peringatan :File konfigurasi lingkungan berisi informasi sensitif tentang server Anda, termasuk kredensial basis data dan kunci keamanan. Oleh karena itu, Anda tidak boleh membagikan file ini secara publik.
Nilai yang terkandung dalam .env
file akan didahulukan dari nilai yang ditetapkan dalam file konfigurasi biasa yang terletak di config
direktori. Setiap penginstalan pada lingkungan baru memerlukan file lingkungan yang disesuaikan untuk menentukan hal-hal seperti pengaturan koneksi database, opsi debug, URL aplikasi, di antara item lain yang dapat bervariasi tergantung pada lingkungan mana aplikasi berjalan.
Sekarang kita akan membuat .env
baru file untuk menyesuaikan opsi konfigurasi untuk lingkungan pengembangan yang kami siapkan. Laravel hadir dengan sebuah contoh.env
file yang dapat kita salin untuk membuat kita sendiri:
- cp .env.example .env
Buka file ini menggunakan nano
atau editor teks pilihan Anda:
- nano .env
.env
saat ini file dari travellist
aplikasi demo berisi pengaturan untuk menggunakan database MySQL lokal, dengan 127.0.0.1
sebagai tuan rumah basis data. Kita perlu memperbarui DB_HOST
variabel sehingga menunjuk ke layanan database yang akan kita buat di lingkungan Docker kita. Dalam panduan ini, kami akan memanggil layanan basis data kami db
. Silakan dan ganti nilai DB_HOST
yang terdaftar dengan nama layanan basis data:
APP_NAME=Travellist
APP_ENV=dev
APP_KEY=
APP_DEBUG=true
APP_URL=http://localhost:8000
LOG_CHANNEL=stack
DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=travellist
DB_USERNAME=travellist_user
DB_PASSWORD=password
...
Jangan ragu untuk juga mengubah nama database, nama pengguna, dan kata sandi, jika Anda mau. Variabel ini akan dimanfaatkan pada langkah selanjutnya di mana kita akan menyiapkan docker-compose.yml
file untuk mengonfigurasi layanan kami.
Simpan file setelah Anda selesai mengedit. Jika Anda menggunakan nano
, Anda dapat melakukannya dengan menekan Ctrl+x
, lalu Y
dan Enter
untuk mengonfirmasi.
Langkah 3 — Menyiapkan Dockerfile Aplikasi
Meskipun layanan MySQL dan Nginx kami akan didasarkan pada gambar default yang diperoleh dari Docker Hub, kami masih perlu membuat gambar khusus untuk wadah aplikasi. Kami akan membuat Dockerfile baru untuk itu.
Daftar wisata Our kami gambar akan didasarkan pada php:7.4-fpm
gambar PHP resmi dari Docker Hub. Di atas lingkungan PHP-FPM dasar itu, kami akan menginstal beberapa modul PHP tambahan dan alat manajemen ketergantungan Composer.
Kami juga akan membuat pengguna sistem baru; ini diperlukan untuk menjalankan artisan
dan composer
perintah saat mengembangkan aplikasi. uid
pengaturan memastikan bahwa pengguna di dalam wadah memiliki uid yang sama dengan pengguna sistem Anda di mesin host Anda, tempat Anda menjalankan Docker. Dengan cara ini, file apa pun yang dibuat oleh perintah ini direplikasi di host dengan izin yang benar. Ini juga berarti bahwa Anda akan dapat menggunakan editor kode pilihan Anda di mesin host untuk mengembangkan aplikasi yang berjalan di dalam container.
Buat Dockerfile baru dengan:
- nano Dockerfile
Salin konten berikut ke Dockerfile Anda:
DockerfileFROM php:7.4-fpm
# Arguments defined in docker-compose.yml
ARG user
ARG uid
# Install system dependencies
RUN apt-get update && apt-get install -y \
git \
curl \
libpng-dev \
libonig-dev \
libxml2-dev \
zip \
unzip
# Clear cache
RUN apt-get clean && rm -rf /var/lib/apt/lists/*
# Install PHP extensions
RUN docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd
# Get latest Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
# Create system user to run Composer and Artisan Commands
RUN useradd -G www-data,root -u $uid -d /home/$user $user
RUN mkdir -p /home/$user/.composer && \
chown -R $user:$user /home/$user
# Set working directory
WORKDIR /var/www
USER $user
Jangan lupa untuk menyimpan file setelah selesai.
Dockerfile kami dimulai dengan mendefinisikan gambar dasar yang kami gunakan:php:7.4-fpm
.
Setelah menginstal paket sistem dan ekstensi PHP, kami menginstal Komposer dengan menyalin composer
dapat dieksekusi dari gambar resmi terbaru ke gambar aplikasi kita sendiri.
Pengguna sistem baru kemudian dibuat dan diatur menggunakan user
dan uid
argumen yang dideklarasikan di awal Dockerfile. Nilai-nilai ini akan dimasukkan oleh Docker Compose pada waktu pembuatan.
Terakhir, kami menetapkan direktori kerja default sebagai /var/www
dan ubah ke pengguna yang baru dibuat. Ini akan memastikan Anda terhubung sebagai pengguna biasa, dan Anda berada di direktori yang benar, saat menjalankan composer
dan artisan
perintah pada wadah aplikasi.
Langkah 4 — Menyiapkan Konfigurasi Nginx dan File Dump Database
Saat membuat lingkungan pengembangan dengan Docker Compose, sering kali diperlukan untuk berbagi file konfigurasi atau inisialisasi dengan wadah layanan, untuk menyiapkan atau mem-bootstrap layanan tersebut. Praktik ini memfasilitasi perubahan pada file konfigurasi untuk menyempurnakan lingkungan Anda saat Anda mengembangkan aplikasi.
Kami sekarang akan menyiapkan folder dengan file yang akan digunakan untuk mengonfigurasi dan menginisialisasi wadah layanan kami.
Untuk menyiapkan Nginx, kami akan membagikan travellist.conf
file yang akan mengonfigurasi cara aplikasi disajikan. Buat docker-compose/nginx
folder dengan:
- mkdir -p docker-compose/nginx
Buka file baru bernama travellist.conf
dalam direktori itu:
- nano docker-compose/nginx/travellist.conf
Salin konfigurasi Nginx berikut ke file itu:
docker-compose/nginx/travellist.conf
server {
listen 80;
index index.php index.html;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
root /var/www/public;
location ~ \.php$ {
try_files $uri =404;
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;
}
location / {
try_files $uri $uri/ /index.php?$query_string;
gzip_static on;
}
}
File ini akan mengonfigurasi Nginx untuk mendengarkan pada port 80
dan gunakan index.php
sebagai halaman indeks default. Ini akan mengatur root dokumen ke /var/www/public
, lalu konfigurasikan Nginx untuk menggunakan app
layanan pada port 9000
untuk memproses *.php
file.
Simpan dan tutup file setelah Anda selesai mengedit.
Untuk menyiapkan database MySQL, kami akan membagikan dump database yang akan diimpor saat container diinisialisasi. Ini adalah fitur yang disediakan oleh image MySQL 5.7 yang akan kita gunakan pada container tersebut.
Buat folder baru untuk file inisialisasi MySQL Anda di dalam docker-compose
map:
- mkdir docker-compose/mysql
Buka .sql
baru berkas:
- nano docker-compose/mysql/init_db.sql
Dump MySQL berikut ini didasarkan pada database yang telah kami siapkan di panduan Laravel on LEMP kami. Ini akan membuat tabel baru bernama places
. Kemudian, tabel akan diisi dengan sekumpulan tempat sampel.
Tambahkan kode berikut ke file:
docker-compose/mysql/db_init.sqlDROP TABLE IF EXISTS `places`;
CREATE TABLE `places` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`visited` tinyint(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
INSERT INTO `places` (name, visited) VALUES ('Berlin',0),('Budapest',0),('Cincinnati',1),('Denver',0),('Helsinki',0),('Lisbon',0),('Moscow',1),('Nairobi',0),('Oslo',1),('Rio',0),('Tokyo',0);
places
tabel berisi tiga bidang:id
, name
, dan visited
. visited
field adalah bendera yang digunakan untuk mengidentifikasi tempat-tempat yang masih untuk dikunjungi . Jangan ragu untuk mengubah tempat sampel atau memasukkan yang baru. Simpan dan tutup file setelah selesai.
Kami telah selesai menyiapkan Dockerfile aplikasi dan file konfigurasi layanan. Selanjutnya, kami akan menyiapkan Docker Compose untuk menggunakan file-file ini saat membuat layanan kami.
Langkah 5 — Membuat Lingkungan Multi-Container dengan Docker Compose
Docker Compose memungkinkan Anda membuat lingkungan multi-kontainer untuk aplikasi yang berjalan di Docker. Ini menggunakan definisi layanan untuk membangun lingkungan yang sepenuhnya dapat disesuaikan dengan beberapa wadah yang dapat berbagi jaringan dan volume data. Hal ini memungkinkan integrasi yang mulus antar komponen aplikasi.
Untuk menyiapkan definisi layanan kami, kami akan membuat file baru bernama docker-compose.yml
. Biasanya, file ini terletak di root folder aplikasi, dan mendefinisikan lingkungan kemas Anda, termasuk gambar dasar yang akan Anda gunakan untuk membangun penampung Anda, dan bagaimana layanan Anda akan berinteraksi.
Kami akan mendefinisikan tiga layanan berbeda di docker-compose.yml
kami file:app
, db
, dan nginx
.
app
layanan akan membuat gambar yang disebut travellist
, berdasarkan Dockerfile yang telah kita buat sebelumnya. Wadah yang ditentukan oleh layanan ini akan menjalankan php-fpm
server untuk mengurai kode PHP dan mengirimkan hasilnya kembali ke nginx
layanan, yang akan berjalan pada wadah terpisah. mysql
service mendefinisikan wadah yang menjalankan server MySQL 5.7. Layanan kami akan berbagi jaringan jembatan bernama travellist
.
File aplikasi akan disinkronkan pada kedua app
dan nginx
layanan melalui bind mount . Bind mount berguna dalam lingkungan pengembangan karena memungkinkan sinkronisasi dua arah yang berkinerja antara mesin host dan container.
Buat docker-compose.yml
baru file di root folder aplikasi:
- nano docker-compose.yml
Tipikal docker-compose.yml
file dimulai dengan definisi versi, diikuti dengan services
node, di mana semua layanan didefinisikan. Jaringan bersama biasanya ditentukan di bagian bawah file itu.
Untuk memulai, salin kode boilerplate ini ke docker-compose.yml
. Anda berkas:
version: "3.7"
services:
networks:
travellist:
driver: bridge
Sekarang kita akan mengedit services
simpul untuk menyertakan app
, db
dan nginx
layanan.
app
Layanan
app
service akan menyiapkan wadah bernama travellist-app
. Itu membangun image Docker baru berdasarkan Dockerfile yang terletak di jalur yang sama dengan docker-compose.yml
mengajukan. Gambar baru akan disimpan secara lokal dengan nama travellist
.
Meskipun root dokumen yang disajikan sebagai aplikasi terletak di nginx
container, kita memerlukan file aplikasi di suatu tempat di dalam app
container juga, jadi kami dapat menjalankan tugas baris perintah dengan alat Laravel Artisan.
Salin definisi layanan berikut di bawah services
simpul, di dalam docker-compose.yml
berkas:
app:
build:
args:
user: sammy
uid: 1000
context: ./
dockerfile: Dockerfile
image: travellist
container_name: travellist-app
restart: unless-stopped
working_dir: /var/www/
volumes:
- ./:/var/www
networks:
- travellist
Pengaturan ini melakukan hal berikut:
build
:Konfigurasi ini memberi tahu Docker Compose untuk membuat gambar lokal untukapp
service, menggunakan jalur yang ditentukan (konteks) dan Dockerfile untuk instruksi. Argumenuser
danuid
disuntikkan ke dalam Dockerfile untuk menyesuaikan perintah pembuatan pengguna pada waktu pembuatan.image
:Nama yang akan digunakan untuk gambar yang sedang dibuat.container_name
:Menyetel nama penampung untuk layanan ini.restart
:Selalu restart, kecuali layanan dihentikan.working_dir
:Menetapkan direktori default untuk layanan ini sebagai/var/www
.volumes
:Membuat volume bersama yang akan menyinkronkan konten dari direktori saat ini ke/var/www
di dalam wadah. Perhatikan bahwa ini bukan root dokumen Anda, karena itu akan hidup dinginx
wadah.networks
:Mengatur layanan ini untuk menggunakan jaringan bernamatravellist
.
db
Layanan
db
service menggunakan gambar MySQL 8.0 yang sudah dibuat sebelumnya dari Docker Hub. Karena Docker Compose secara otomatis memuat .env
file variabel yang terletak di direktori yang sama dengan docker-compose.yml
file, kita bisa mendapatkan pengaturan database kita dari Laravel .env
file yang kita buat di langkah sebelumnya.
Sertakan definisi layanan berikut dalam services
Anda simpul, tepat setelah app
layanan:
db:
image: mysql:8.0
container_name: travellist-db
restart: unless-stopped
environment:
MYSQL_DATABASE: ${DB_DATABASE}
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
MYSQL_PASSWORD: ${DB_PASSWORD}
MYSQL_USER: ${DB_USERNAME}
SERVICE_TAGS: dev
SERVICE_NAME: mysql
volumes:
- ./docker-compose/mysql:/docker-entrypoint-initdb.d
networks:
- travellist
Pengaturan ini melakukan hal berikut:
image
:Mendefinisikan image Docker yang harus digunakan untuk container ini. Dalam hal ini, kami menggunakan gambar MySQL 5.7 dari Docker Hub.container_name
:Mengatur nama penampung untuk layanan ini:travellist-db
.restart
:Selalu mulai ulang layanan ini, kecuali jika dihentikan secara eksplisit.environment
:Mendefinisikan variabel lingkungan dalam wadah baru. Kami menggunakan nilai yang diperoleh dari.env
Laravel file untuk mengatur layanan MySQL kami, yang secara otomatis akan membuat database dan pengguna baru berdasarkan variabel lingkungan yang disediakan.volumes
:Membuat volume untuk berbagi.sql
database dump yang akan digunakan untuk menginisialisasi database aplikasi. Gambar MySQL akan secara otomatis mengimpor.sql
file yang ditempatkan di/docker-entrypoint-initdb.d
direktori di dalam wadah.networks
:Mengatur layanan ini untuk menggunakan jaringan bernamatravellist
.
nginx
Layanan
nginx
service menggunakan gambar Nginx yang sudah dibuat sebelumnya di atas Alpine, distribusi Linux yang ringan. Itu membuat wadah bernama travellist-nginx
, dan menggunakan ports
definisi untuk membuat pengalihan dari port 8000
pada sistem host ke port 80
di dalam wadah.
Sertakan definisi layanan berikut dalam services
Anda simpul, tepat setelah db
layanan:
nginx:
image: nginx:1.17-alpine
container_name: travellist-nginx
restart: unless-stopped
ports:
- 8000:80
volumes:
- ./:/var/www
- ./docker-compose/nginx:/etc/nginx/conf.d
networks:
- travellist
Pengaturan ini melakukan hal berikut:
image
:Mendefinisikan image Docker yang harus digunakan untuk container ini. Dalam hal ini, kami menggunakan gambar Alpine Nginx 1.17.container_name
:Menyiapkan nama penampung untuk layanan ini:travellist-nginx .restart
:Selalu mulai ulang layanan ini, kecuali jika dihentikan secara eksplisit.ports
:Menyiapkan pengalihan port yang memungkinkan akses eksternal melalui port8000
ke server web yang berjalan pada port80
di dalam wadah.volumes
:Membuat dua volume bersama. Yang pertama akan menyinkronkan konten dari direktori saat ini ke/var/www
di dalam wadah. Dengan cara ini, ketika Anda membuat perubahan lokal pada file aplikasi, mereka akan dengan cepat tercermin dalam aplikasi yang dilayani oleh Nginx di dalam wadah. Volume kedua akan memastikan file konfigurasi Nginx kita, terletak didocker-compose/nginx/travellist.conf
, disalin ke folder konfigurasi Nginx container.networks
:Mengatur layanan ini untuk menggunakan jaringan bernamatravellist
.
Selesai docker-compose.yml
Berkas
Beginilah docker-compose.yml
kami yang telah selesai file terlihat seperti:
version: "3.7"
services:
app:
build:
args:
user: sammy
uid: 1000
context: ./
dockerfile: Dockerfile
image: travellist
container_name: travellist-app
restart: unless-stopped
working_dir: /var/www/
volumes:
- ./:/var/www
networks:
- travellist
db:
image: mysql:8.0
container_name: travellist-db
restart: unless-stopped
environment:
MYSQL_DATABASE: ${DB_DATABASE}
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
MYSQL_PASSWORD: ${DB_PASSWORD}
MYSQL_USER: ${DB_USERNAME}
SERVICE_TAGS: dev
SERVICE_NAME: mysql
volumes:
- ./docker-compose/mysql:/docker-entrypoint-initdb.d
networks:
- travellist
nginx:
image: nginx:alpine
container_name: travellist-nginx
restart: unless-stopped
ports:
- 8000:80
volumes:
- ./:/var/www
- ./docker-compose/nginx:/etc/nginx/conf.d/
networks:
- travellist
networks:
travellist:
driver: bridge
Pastikan Anda menyimpan file setelah selesai.
Langkah 6 — Menjalankan Aplikasi dengan Docker Compose
Sekarang kita akan menggunakan docker-compose
perintah untuk membangun image aplikasi dan menjalankan layanan yang kami tentukan dalam pengaturan kami.
Bangun app
gambar dengan perintah berikut:
- docker-compose build app
Perintah ini mungkin membutuhkan waktu beberapa menit untuk diselesaikan. Anda akan melihat output seperti ini:
OutputBuilding app
Sending build context to Docker daemon 377.3kB
Step 1/11 : FROM php:7.4-fpm
---> 8c08d993542f
Step 2/11 : ARG user
---> e3ce3af04d87
Step 3/11 : ARG uid
---> 30cb921ef7df
Step 4/11 : RUN apt-get update && apt-get install -y git curl libpng-dev libonig-dev libxml2-dev zip unzip
. . .
---> b6dbc7a02e95
Step 5/11 : RUN apt-get clean && rm -rf /var/lib/apt/lists/*
---> 10ef9dde45ad
. . .
Step 6/11 : RUN docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd
. . .
---> 920e4f09ec75
Step 7/11 : COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
---> dbbcd44e44af
Step 8/11 : RUN useradd -G www-data,root -u $uid -d /home/$user $user
---> db98e899a69a
Step 9/11 : RUN mkdir -p /home/$user/.composer && chown -R $user:$user /home/$user
---> 5119e26ebfea
Step 10/11 : WORKDIR /var/www
---> 699c491611c0
Step 11/11 : USER $user
---> cf250fe8f1af
Successfully built cf250fe8f1af
Successfully tagged travellist:latest
Saat pembangunan selesai, Anda dapat menjalankan lingkungan dalam mode latar belakang dengan:
- docker-compose up -d
OutputCreating travellist-db ... done
Creating travellist-app ... done
Creating travellist-nginx ... done
Ini akan menjalankan wadah Anda di latar belakang. Untuk menampilkan informasi tentang status layanan aktif Anda, jalankan:
- docker-compose ps
Anda akan melihat output seperti ini:
Output Name Command State Ports
-----------------------------------------------------------------------------------------------
travellist-app docker-php-entrypoint php-fpm Up 9000/tcp
travellist-db docker-entrypoint.sh mysqld Up 3306/tcp, 33060/tcp
travellist-nginx nginx -g daemon off; Up 0.0.0.0:8000->80/tcp,:::8000->80/tcp
Lingkungan Anda sekarang aktif dan berjalan, tetapi kami masih perlu menjalankan beberapa perintah untuk menyelesaikan penyiapan aplikasi. Anda dapat menggunakan docker-compose exec
perintah untuk mengeksekusi perintah dalam wadah layanan, seperti ls -l
untuk menampilkan informasi rinci tentang file di direktori aplikasi:
- docker-compose exec app ls -l
Outputtotal 256
-rw-r--r-- 1 sammy sammy 737 Apr 18 14:21 Dockerfile
-rw-r--r-- 1 sammy sammy 101 Jan 7 2020 README.md
drwxr-xr-x 6 sammy sammy 4096 Jan 7 2020 app
-rwxr-xr-x 1 sammy sammy 1686 Jan 7 2020 artisan
drwxr-xr-x 3 sammy sammy 4096 Jan 7 2020 bootstrap
-rw-r--r-- 1 sammy sammy 1501 Jan 7 2020 composer.json
-rw-r--r-- 1 sammy sammy 179071 Jan 7 2020 composer.lock
drwxr-xr-x 2 sammy sammy 4096 Jan 7 2020 config
drwxr-xr-x 5 sammy sammy 4096 Jan 7 2020 database
drwxr-xr-x 4 sammy sammy 4096 Apr 18 14:22 docker-compose
-rw-r--r-- 1 sammy sammy 1017 Apr 18 14:29 docker-compose.yml
-rw-r--r-- 1 sammy sammy 1013 Jan 7 2020 package.json
-rw-r--r-- 1 sammy sammy 1405 Jan 7 2020 phpunit.xml
drwxr-xr-x 2 sammy sammy 4096 Jan 7 2020 public
-rw-r--r-- 1 sammy sammy 273 Jan 7 2020 readme.md
drwxr-xr-x 6 sammy sammy 4096 Jan 7 2020 resources
drwxr-xr-x 2 sammy sammy 4096 Jan 7 2020 routes
-rw-r--r-- 1 sammy sammy 563 Jan 7 2020 server.php
drwxr-xr-x 5 sammy sammy 4096 Jan 7 2020 storage
drwxr-xr-x 4 sammy sammy 4096 Jan 7 2020 tests
-rw-r--r-- 1 sammy sammy 538 Jan 7 2020 webpack.mix.js
Sekarang kita akan menjalankan composer install
untuk menginstal dependensi aplikasi:
- docker-compose exec app rm -rf vendor composer.lock
- docker-compose exec app composer install
Anda akan melihat output seperti ini:
OutputNo composer.lock file present. Updating dependencies to latest instead of installing from lock file. See https://getcomposer.org/install for more information.
. . .
Lock file operations: 89 installs, 0 updates, 0 removals
- Locking doctrine/inflector (2.0.4)
- Locking doctrine/instantiator (1.4.1)
- Locking doctrine/lexer (1.2.3)
- Locking dragonmantank/cron-expression (v2.3.1)
- Locking egulias/email-validator (2.1.25)
- Locking facade/flare-client-php (1.9.1)
- Locking facade/ignition (1.18.1)
- Locking facade/ignition-contracts (1.0.2)
- Locking fideloper/proxy (4.4.1)
- Locking filp/whoops (2.14.5)
. . .
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 89 installs, 0 updates, 0 removals
- Downloading doctrine/inflector (2.0.4)
- Downloading doctrine/lexer (1.2.3)
- Downloading dragonmantank/cron-expression (v2.3.1)
- Downloading symfony/polyfill-php80 (v1.25.0)
- Downloading symfony/polyfill-php72 (v1.25.0)
- Downloading symfony/polyfill-mbstring (v1.25.0)
- Downloading symfony/var-dumper (v4.4.39)
- Downloading symfony/deprecation-contracts (v2.5.1)
. . .
Generating optimized autoload files
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover --ansi
Discovered Package: facade/ignition
Discovered Package: fideloper/proxy
Discovered Package: laravel/tinker
Discovered Package: nesbot/carbon
Discovered Package: nunomaduro/collision
Package manifest generated successfully.
Hal terakhir yang perlu kita lakukan sebelum menguji aplikasi adalah membuat kunci aplikasi unik dengan artisan
Alat baris perintah Laravel. Kunci ini digunakan untuk mengenkripsi sesi pengguna dan data sensitif lainnya:
- docker-compose exec app php artisan key:generate
OutputApplication key set successfully.
Sekarang buka browser Anda dan akses nama domain atau alamat IP server Anda pada port 8000:
http://server_domain_or_IP:8000
Catatan :Jika Anda menjalankan demo ini di komputer lokal Anda, gunakan http://localhost:8000
untuk mengakses aplikasi dari browser Anda.
Anda akan melihat halaman seperti ini:
Anda dapat menggunakan logs
perintah untuk memeriksa log yang dihasilkan oleh layanan Anda:
- docker-compose logs nginx
Attaching to travellist-nginx
. . .
travellist-nginx | 172.24.9.1 - - [18/Apr/2022:14:49:16 +0000] "GET / HTTP/1.1" 200 627 "-" "curl/7.82.0"
travellist-nginx | 172.24.9.1 - - [18/Apr/2022:14:51:27 +0000] "GET / HTTP/1.1" 200 627 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:89.0) Gecko/20100101 Firefox/89.0"
travellist-nginx | 172.24.9.1 - - [18/Apr/2022:14:51:27 +0000] "GET /favicon.ico HTTP/1.1" 200 0 "http://localhost:8000/" "Mozilla/5.0 (X11; Linux x86_64; rv:89.0) Gecko/20100101 Firefox/89.0"
Jika Anda ingin menjeda lingkungan Docker Compose sambil mempertahankan status semua layanannya, jalankan:
- docker-compose pause
OutputPausing travellist-db ... done
Pausing travellist-nginx ... done
Pausing travellist-app ... done
Anda kemudian dapat melanjutkan layanan Anda dengan:
- docker-compose unpause
OutputUnpausing travellist-app ... done
Unpausing travellist-nginx ... done
Unpausing travellist-db ... done
Untuk mematikan lingkungan Docker Compose dan menghapus semua container, jaringan, dan volumenya, jalankan:
- docker-compose down
OutputStopping travellist-nginx ... done
Stopping travellist-db ... done
Stopping travellist-app ... done
Removing travellist-nginx ... done
Removing travellist-db ... done
Removing travellist-app ... done
Removing network travellist-laravel-demo_travellist
For an overview of all Docker Compose commands, please check the Docker Compose command-line reference.
Conclusion
In this guide, we’ve set up a Docker environment with three containers using Docker Compose to define our infrastructure in a YAML file.
From this point on, you can work on your Laravel application without needing to install and set up a local web server for development and testing. Moreover, you’ll be working with a disposable environment that can be easily replicated and distributed, which can be helpful while developing your application and also when moving towards a production environment.