Install Laravel Menggunakan Docker Compose di Ubuntu 20.04 - CRUDPRO

Install Laravel Menggunakan Docker Compose di Ubuntu 20.04

Kata pengantar

Containerization aplikasi mengacu pada proses mengadaptasi aplikasi dan komponennya dengan tujuan memungkinkan aplikasi berjalan di lingkungan yang ringan yang disebut Kontainer. Lingkungan terisolasi, dapat dikonsumsi, dan dapat dimanfaatkan lebih lanjut untuk pengembangan aplikasi, pengujian, dan penyebaran produksi.

Panduan ini menggunakan Docker Compose untuk menampung aplikasi Laravel Anda sebagai pengembangan. Setelah selesai, Anda akan memiliki aplikasi demo Laravel yang berjalan di tiga wadah layanan terpisah:

  • Layanan appuntuk mengopasikan PHP7.4-A FPM.
  • Layanan dbuntuk mengoperasikan MySQL 5.7.
  • Layanan nginxadalah web server untuk menjalankan app untuk mengurai kode PHP sebelum menyajikan aplikasi Laravel kepada pengguna akhir.

Gunakan volume bersama untuk menjaga file aplikasi tetap sinkron untuk memungkinkan proses pengembangan yang lebih efisien dan memfasilitasi peluncuran aplikasi. Ini juga menjelaskan cara menjalankan Composer dan Artisan di wadah aplikasi Anda menggunakan perintah docker-compose exec.

Prasyarat

  • Akses mesin Ubuntu 20.04 lokal atau server pengembangan sebagai pengguna non-root dengan hak sudo. Jika Anda menggunakan server jauh, kami sarankan Anda menginstal firewall aktif. Untuk mengatur ini.
  • Ikuti langkah 1 dan 2 dari Cara menginstal dan menggunakan Docker di Ubuntu 20.04 untuk menginstal Docker di server Anda.
  • Instal Docker Compose di server

Langkah Pertama Dapatkan aplikasi demo

Untuk memulai, dapatkan permintaan demonstrasi Laravel dari repositori GitHub. Saya tertarik pada cabang tutorial-01.

Untuk mendapatkan kode aplikasi yang kompatibel dengan tutorial ini, unduh rilis tutorial-1.0.1 ke direktori home Anda dengan perintah berikut:

cd ~
curl -L https://github.com/do-community/travellist-laravel-demo/archive/tutorial-1.0.1.zip -o travellist.zip

Anda memerlukan perintah unzip untuk membuka zip kode aplikasi. Jika Anda belum pernah menginstal paket ini sebelumnya, instal menggunakan perintah berikut:

sudo apt update
sudo apt install unzip

Kemudian unzip konten aplikasi Anda dan ganti nama direktori unzip agar lebih mudah diakses:

unzip travellist.zip
mv travellist-laravel-demo-tutorial-1.0.1 travellist-demo

Ubah ke direktori travellist-demo.

cd travellist-demo

Langkah selanjutnya adalah membuat file konfigurasi .env untuk mempersiapkan aplikasi Anda.

Langkah ke dua Siapkan file .env aplikasi Anda

File konfigurasi Laravel terletak di direktori bernama config di direktori root aplikasi Anda. Selain itu, file .env digunakan untuk menyiapkan konfigurasi yang bergantung pada lingkungan seperti kredensial dan informasi yang mungkin berbeda di antara penerapan. File ini tidak termasuk dalam kontrol revisi.

*Peringatan: File konfigurasi lingkungan berisi informasi sensitif tentang server, seperti kredensial database dan kunci keamanan. Oleh karena itu, mohon untuk tidak membagikan file ini secara publik.

Nilai yang terkandung dalam file .env lebih diutamakan daripada nilai yang ditentukan dalam file konfigurasi biasa di direktori konfigurasi. Setiap kali Anda menginstal di lingkungan baru, Anda memerlukan file lingkungan yang dibuat khusus untuk menentukan hal-hal yang mungkin berbeda tergantung pada lingkungan aplikasi yang berjalan, seperti pengaturan koneksi database, opsi waktu, dan URL aplikasi.

Kemudian buat file .env baru untuk menyesuaikan opsi konfigurasi lingkungan pengembangan yang telah Anda tetapkan. Laravel hadir dengan contoh file .env yang dapat Anda salin untuk membuatnya sendiri.

cp .env.example .env

Buka file ini menggunakan nano atau editor teks pilihan Anda:

nano .env

File .env saat ini untuk aplikasi demo travellist berisi pengaturan untuk menggunakan database MySQL lokal dengan 127.0.0.1 sebagai host database. Anda perlu memperbarui variabel DB_HOST untuk menunjuk ke layanan database yang Anda buat di lingkungan Docker Anda. Dalam panduan ini, kami akan memanggil layanan database db. Silakan ganti nilai yang tercantum di DB_HOST dengan nama layanan database:

//file : .env
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
...

Ubah nama database, nama pengguna, dan kata sandi sesuai kebutuhan. Variabel-variabel ini akan digunakan pada langkah berikutnya untuk menyiapkan file docker-compose.yml dan mengkonfigurasi layanan.

jangan lupa simpan file setelah Anda selesai mengedit. Jika Anda menggunakan nano, Anda dapat memeriksa dengan menekan Ctrl + x, Y, Enter.

Langkah ketiga Siapkan aplikasi Dockerfile

Layanan MySQL dan layanan Nginx didasarkan pada gambar default yang diambil dari Docker Hub, tetapi Anda perlu membuat gambar khusus untuk wadah aplikasi Anda. Buat Dockerfile baru untuk itu.

Gambar daftar perjalanan didasarkan pada gambar resmi Docker Hub PHP php: 7.4-fpm. Selain lingkungan PHP-FPM dasar, instal beberapa modul PHP tambahan dan alat manajemen ketergantungan Composer.

Itu juga menciptakan pengguna sistem baru. Ini diperlukan untuk menjalankan perintah pengrajin dan komposer saat mengembangkan aplikasi. Menyetel uid memastikan bahwa pengguna dalam wadah memiliki uid yang sama dengan pengguna sistem pada mesin host yang menjalankan Docker. Dengan cara ini, semua file yang dibuat oleh perintah ini akan direplikasi ke host dengan izin yang benar. Ini juga berarti bahwa Anda dapat menggunakan editor kode pilihan Anda pada mesin host untuk mengembangkan aplikasi yang berjalan dalam wadah.

Buat Dockerfile baru dengan perintah berikut:

nano Dockerfile

Salin konten berikut ke Dockerfile Anda.

FROM 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

Langkah Keempat Konfigurasi Nginx dan pengaturan file dump database

Saat menggunakan Docker Compose untuk membuat lingkungan pengembangan, sering kali diperlukan untuk berbagi file konfigurasi atau inisialisasi dengan wadah layanan untuk menyiapkan atau mem-bootstrap layanan. Metode ini memudahkan untuk membuat perubahan pada file konfigurasi untuk mengatur lingkungan saat mengembangkan aplikasi.

Selanjutnya, siapkan folder yang berisi file yang digunakan untuk mengkonfigurasi dan menginisialisasi wadah layanan.

Bagikan file travellist.conf yang mengonfigurasi bagaimana aplikasi Anda ditampilkan untuk mengonfigurasi Nginx. Buat folder docker-compose / nginx dengan perintah berikut:

mkdir -p docker-compose/nginx

Buka file baru bernama travellist.conf di direktori tersebut.

nano docker-compose/nginx/travellist.conf

Salin konfigurasi Nginx berikut ke file itu.

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 mendengarkan pada port 80 dan mengkonfigurasi Nginx untuk menggunakan index.php sebagai halaman indeks default. Ini akan mengatur root direktori ke /var/www/public dan *. Nginx dikonfigurasi untuk menggunakan layanan aplikasi pada port 9000, yang memproses file php.

Setelah selesai mengedit, kemudian simpan dan tutup file.

Bagikan dump database yang diimpor saat container diinisialisasi untuk menyiapkan database MySQL. Ini adalah fitur yang disediakan oleh gambar MySQL 5.7 yang digunakan dalam wadah itu.

Buat folder baru untuk file inisialisasi MySQL di folder docker-compose, ikuti langkah berikut pada

mkdir docker-compose/mysql

Buka file .sql baru.

nano docker-compose/mysql/init_db.sql

Dump MySQL berikut ini didasarkan pada database yang diatur dalam panduan Laravel untuk LEMP. Ini akan membuat tabel baru bernama tempat. Tabel tersebut kemudian diisi dengan sekumpulan lokasi sampel.

Tambahkan kode berikut ke file.

DROP 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);

Tabel Tempat berisi tiga bidang: id, nama, dan dikunjungi. Field yang dikunjungi adalah flag yang digunakan untuk mengidentifikasi tempat yang masih perlu *dikunjungi*. Harap ubah pemegang sampel atau masukkan yang baru. Setelah selesai, simpan dan tutup file.

Aplikasi Dockerfile dan file konfigurasi layanan telah disiapkan. Kemudian konfigurasikan Docker Compose untuk menggunakan file-file ini saat membuat layanan.

Langkah Kelima Buat lingkungan multi-kontainer dengan Docker Compose

Docker Compose memungkinkan Anda membuat lingkungan multi-kontainer untuk aplikasi yang berjalan di Docker. Gunakan definisi layanan untuk membuat lingkungan yang sepenuhnya dapat disesuaikan dengan beberapa wadah yang dapat berbagi volume data dan jaringan. Hal ini memungkinkan integrasi tanpa batas antara komponen aplikasi.

Buat file baru dengan nama docker-compose.yml untuk mengatur definisi layanan. File ini biasanya terletak di root folder aplikasi dan mendefinisikan lingkungan kemas, seperti gambar dasar yang digunakan untuk membangun wadah dan interaksi layanan.

Tentukan tiga layanan berbeda, app, db, dan nginx dalam file docker-compose.yml.

Layanan aplikasi membuat gambar yang disebut daftar perjalanan berdasarkan Dockerfile yang Anda buat sebelumnya. Wadah yang ditentukan oleh layanan ini menjalankan server php-fpm, mem-parsing kode PHP dan mengirimkan hasilnya kembali ke layanan nginx. Layanan nginx berjalan dalam wadah terpisah. Layanan mysql mendefinisikan wadah yang menjalankan server MySQL 5.7. Layanan kami berbagi jaringan jembatan yang disebut travellist.

File aplikasi disinkronkan ke layanan aplikasi dan nginx melalui bind mount. Bind mount berguna dalam lingkungan pengembangan karena memungkinkan sinkronisasi dua arah kinerja yang baik antara mesin host dan mesin container.

Buat file docker-compose.yml baru di root folder aplikasi Anda.

nano docker-compose.yml

File docker-compose.yml kustom dimulai dengan definisi versi, diikuti oleh node layanan yang mendefinisikan semua layanan. Jaringan bersama biasanya ditentukan di bagian bawah file.

Untuk memulai, salin kode boilerplate ini ke file docker-compose.yml Anda.

version: "3.7"
services:


networks:
  travellist:
    driver: bridge

Kemudian edit layanan simpul untuk menyertakan layanan aplikasi, db, dan nginx.

Layanan app

Layanan aplikasi menyiapkan wadah bernama travellist-app. Ini akan membangun image Docker baru berdasarkan Dockerfile yang terletak di jalur yang sama dengan file docker-compose.yml. Gambar baru akan disimpan secara lokal dengan nama travellist.

Akar dokumen yang bertindak sebagai aplikasi ada di dalam wadah nginx, tetapi Anda juga memerlukan file aplikasi di suatu tempat di dalam wadah aplikasi sehingga Anda dapat menggunakan alat Laravel Artisan untuk melakukan tugas baris perintah.

Salin definisi layanan berikut di bawah layanan simpul di file docker-compose.yml.

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 image lokal dari layanan aplikasi menggunakan jalur (konteks) dan Dockerfile yang ditentukan. Argumen pengguna dan uid diteruskan ke Dockerfile selama build agar sesuai dengan perintah yang dibuat pengguna.
  • image: Nama yang digunakan untuk gambar yang sedang dibuat.
  • container_name: Menyetel nama container untuk layanan ini.
  • container_name: Menyetel nama container untuk layanan ini.
  • Reboot: Selalu reboot kecuali layanan dihentikan.
  • working_dir: Setel direktori default untuk layanan ini sebagai /var/www.
  • Volume: Membuat volume bersama yang menyinkronkan konten direktori saat ini dengan / var / www dalam wadah. Perhatikan bahwa ini bukan root dokumen karena berada di dalam wadah nginx.
  • Jaringan: Konfigurasikan layanan ini untuk menggunakan jaringan yang disebut daftar perjalanan.

layanan db

Layanan db menggunakan gambar MySQL 5.7 yang telah disiapkan sebelumnya dari Docker Hub. Docker Compose secara otomatis memuat file variabel .env di direktori yang sama dengan file docker-compose.yml, sehingga Anda bisa mendapatkan pengaturan database dari file Laravel.env yang dibuat pada langkah sebelumnya.

Segera setelah layanan aplikasi, sertakan definisi layanan berikut di node layanan.

db:
  image: mysql:5.7
  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: Menentukan image Docker yang akan digunakan untuk container ini. Dalam hal ini, saya menggunakan gambar Docker Hub MySQL 5.7.
  • container_name: Menyetel nama container untuk layanan ini: travellist-db.
  • restart: Selalu restart layanan ini kecuali telah dihentikan secara eksplisit.
  • lingkungan: Tetapkan variabel lingkungan untuk wadah baru. Siapkan layanan MySQL menggunakan nilai yang diperoleh dari file .env Laravel. Layanan ini secara otomatis membuat pengguna dan database baru berdasarkan variabel lingkungan yang disediakan.
  • Volume: Membuat volume untuk berbagi dump database .sql yang digunakan untuk menginisialisasi database aplikasi. Gambar MySQL secara otomatis mengimpor file .sql yang terletak di direktori /docker-entrypoint-initdb.d container. Jaringan: Konfigurasikan layanan ini untuk menggunakan jaringan yang disebut daftar perjalanan.

layanan nginx

Layanan nginx menggunakan gambar Nginx yang telah disiapkan sebelumnya di atas Alpine, distribusi Linux yang ringan. Ini membuat container bernama travellist-nginx dan menggunakan definisi port untuk membuat pengalihan dari port 8000 pada sistem host ke port 80 pada container.

Sertakan definisi layanan berikut di node layanan segera setelah layanan db:

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: Menentukan image Docker yang akan digunakan untuk container ini. Dalam hal ini, kami menggunakan gambar Alpine Nginx 1.17.
  • container_name: Menyetel nama container untuk layanan ini: travellist-nginx.
  • restart: Selalu restart layanan ini kecuali telah dihentikan secara eksplisit.
  • Port: Siapkan pengalihan port yang memungkinkan akses eksternal melalui port 8000 ke server web yang berjalan pada port 80 dalam wadah.
  • Volume: Buat dua volume bersama-sama. Yang pertama menyinkronkan isi direktori saat ini dengan /var/www dalam wadah. Seperti yang Anda lihat, ketika Anda membuat perubahan lokal pada file aplikasi Anda, perubahan tersebut dengan cepat tercermin dalam aplikasi yang disediakan kontainer Nginx. Volume kedua memastikan bahwa file konfigurasi Nginx yang terletak di docker-compose /nginx/travellist.conf disalin ke folder konfigurasi Nginx di dalam container.

Networks: Konfigurasikan layanan ini untuk menggunakan jaringan yang disebut daftar travellist.

file docker-compose.yml sudah selesai

File docker-compose.yml yang sudah selesai terlihat seperti ini:

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:5.7
    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 untuk menyimpan file setelah selesai.

Langkah ke Enam Jalankan aplikasi Anda menggunakan Docker Compose

Kemudian gunakan perintah docker-compose untuk membangun image aplikasi dan menjalankan layanan yang ditentukan dalam pengaturan.

Bangun gambar aplikasi menggunakan perintah berikut.

docker-compose build app

Perintah ini mungkin memerlukan waktu beberapa menit untuk diselesaikan. Anda akan melihat output yang mirip dengan berikut ini:

Output
Building app
Step 1/11 : FROM php:7.4-fpm
 ---> fa37bd6db22a
Step 2/11 : ARG user
 ---> Running in f71eb33b7459
Removing intermediate container f71eb33b7459
 ---> 533c30216f34
Step 3/11 : ARG uid
 ---> Running in 60d2d2a84cda
Removing intermediate container 60d2d2a84cda
 ---> 497fbf904605
Step 4/11 : RUN apt-get update && apt-get install -y     git     curl     libpng-dev     libonig-dev     ...
Step 7/11 : COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
 ---> e499f74896e3
Step 8/11 : RUN useradd -G www-data,root -u $uid -d /home/$user $user
 ---> Running in 232ef9c7dbd1
Removing intermediate container 232ef9c7dbd1
 ---> 870fa3220ffa
Step 9/11 : RUN mkdir -p /home/$user/.composer &&     chown -R $user:$user /home/$user
 ---> Running in 7ca8c0cb7f09
Removing intermediate container 7ca8c0cb7f09
 ---> 3d2ef9519a8e
Step 10/11 : WORKDIR /var/www
 ---> Running in 4a964f91edfa
Removing intermediate container 4a964f91edfa
 ---> 00ada639da21
Step 11/11 : USER $user
 ---> Running in 9f8e874fede9
Removing intermediate container 9f8e874fede9
 ---> fe176ff4702b

Successfully built fe176ff4702b
Successfully tagged travellist:latest

Setelah proses build selesai, Anda dapat menjalankan lingkungan Anda dalam mode latar belakang dengan cara berikut:

docker-compose up -d
Output
Creating travellist-db    ... done
Creating travellist-app   ... done
Creating travellist-nginx ... done

Ini akan menjalankan wadah di latar belakang. Untuk melihat informasi tentang status layanan aktif, jalankan perintah berikut:

docker-compose ps

Anda akan melihat keluaran 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   /docker-entrypoint.sh ngin ...   Up      0.0.0.0:8000->80/tcp

Lingkungan Anda sekarang aktif dan berjalan, tetapi Anda masih perlu menjalankan beberapa perintah untuk menyelesaikan penyiapan aplikasi. Anda dapat menggunakan perintah docker-compose exec untuk menjalankan perintah di wadah layanan, seperti ls -l, untuk melihat informasi lebih lanjut tentang file di direktori aplikasi.

docker-compose exec app ls -l
Output
total 260
-rw-rw-r--  1 sammy sammy    737 Jun  9 11:19 Dockerfile
-rw-rw-r--  1 sammy sammy    101 Jan  7 08:05 README.md
drwxrwxr-x  6 sammy sammy   4096 Jan  7 08:05 app
-rwxr-xr-x  1 sammy sammy   1686 Jan  7 08:05 artisan
drwxrwxr-x  3 sammy sammy   4096 Jan  7 08:05 bootstrap
-rw-rw-r--  1 sammy sammy   1501 Jan  7 08:05 composer.json
-rw-rw-r--  1 sammy sammy 179071 Jan  7 08:05 composer.lock
drwxrwxr-x  2 sammy sammy   4096 Jan  7 08:05 config
drwxrwxr-x  5 sammy sammy   4096 Jan  7 08:05 database
drwxrwxr-x  4 sammy sammy   4096 Jun  9 11:19 docker-compose
-rw-rw-r--  1 sammy sammy    965 Jun  9 11:27 docker-compose.yml
-rw-rw-r--  1 sammy sammy   1013 Jan  7 08:05 package.json
-rw-rw-r--  1 sammy sammy   1405 Jan  7 08:05 phpunit.xml
drwxrwxr-x  2 sammy sammy   4096 Jan  7 08:05 public
-rw-rw-r--  1 sammy sammy    273 Jan  7 08:05 readme.md
drwxrwxr-x  6 sammy sammy   4096 Jan  7 08:05 resources
drwxrwxr-x  2 sammy sammy   4096 Jan  7 08:05 routes
-rw-rw-r--  1 sammy sammy    563 Jan  7 08:05 server.php
drwxrwxr-x  5 sammy sammy   4096 Jan  7 08:05 storage
drwxrwxr-x  4 sammy sammy   4096 Jan  7 08:05 tests
drwxrwxr-x 41 sammy sammy   4096 Jun  9 11:32 vendor
-rw-rw-r--  1 sammy sammy    538 Jan  7 08:05 webpack.mix.js

Kemudian jalankan composer install untuk menginstal dependensi aplikasi.

docker-compose exec app composer install

Anda akan melihat output yang mirip dengan berikut ini:

 Output
Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
Package operations: 85 installs, 0 updates, 0 removals
  - Installing doctrine/inflector (1.3.1): Downloading (100%)         
  - Installing doctrine/lexer (1.2.0): Downloading (100%)         
  - Installing dragonmantank/cron-expression (v2.3.0): Downloading (100%)         
  - Installing erusev/parsedown (1.7.4): Downloading (100%)         
  - Installing symfony/polyfill-ctype (v1.13.1): Downloading (100%)         
  - Installing phpoption/phpoption (1.7.2): Downloading (100%)         
  - Installing vlucas/phpdotenv (v3.6.0): Downloading (100%)         
  - Installing symfony/css-selector (v5.0.2): Downloading (100%)             
…
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 Anda lakukan sebelum menguji aplikasi ini adalah menggunakan alat baris perintah pengrajin Laravel untuk menghasilkan kunci aplikasi yang unik. Kunci ini digunakan untuk mengenkripsi sesi pengguna dan data sensitif lainnya.

docker-compose exec app php artisan key:generate

Output
Application key set successfully.
Kemudian buka browser dan akses nama domain atau alamat IP server pada port 8000.
http://server_domain_or_IP:8000
Catatan: Jika Anda menjalankan demo ini di komputer localhost, gunakan http://localhost:8000 untuk mengakses aplikasi Anda dari browser Anda.

jika anda ingin melihat perintah logs yang dihasilkan oleh layanan gunakan perintah command berikut:

docker-compose logs nginx
Attaching to travellist-nginx
…
travellist-nginx | /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
travellist-nginx | /docker-entrypoint.sh: Configuration complete; ready for start up
travellist-nginx | 192.168.0.1 - - [09/Jun/2020:11:46:34 +0000] "GET / HTTP/1.1" 200 627 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36"
travellist-nginx | 192.168.0.1 - - [09/Jun/2020:11:46:35 +0000] "GET / HTTP/1.1" 200 627 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36"

kemungkinan anda juga akan menangguhkan Docker Compose sembari mempertahankan kondisi semua layanan, lakukan hal berikut:

docker-compose pause
Output
Pausing travellist-db    ... done
Pausing travellist-nginx ... done
Pausing travellist-app   ... done

Anda kemudian dapat memulai ulang layanan dengan cara berikut:

docker-compose unpause

Unpausing travellist-app   ... done
Unpausing travellist-nginx ... done
Unpausing travellist-db    ... done

Untuk menonaktifkan Docker Compose dan menghapus semua kontainer, volume, dan jaringannya, jalankan perintah berikut:

docker-compose down

Output
Stopping 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

Lihat referensi baris perintah Docker Compose untuk ikhtisar semua perintah Docker Compose.

Setelah mengikuti paduan ini langkah demi langkah, kita telah menyiapkan docker dengan tiga kontainer yang menggunakan Docker Compose untuk mendefinisikan infrastruktur dalam berkas YAML.

Setelah anda mengikuti paduan ini program anda bisa berjalan tanpa harus instal dan mengatur web server lokal anda untuk melakukan pengembangan maupun pengujian. Lebih jauh lagi, Anda memungkinkan bekerja dengan lingkungan yang dapat dibuang serta mudah direplikasi dan didistribusikan, yang dapat membantu saat mengembangkan aplikasi Anda dan menjelang pembuatan suatu lingkungan.