GNU/Linux >> Belajar Linux >  >> Panels >> Docker

Cara Menginstal dan Mengatur Laravel dengan Docker Compose di Ubuntu 22.04

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 menggunakan app 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:

  1. cd ~
  2. 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:

  1. sudo apt update
  2. sudo apt install unzip

Sekarang, unzip konten aplikasi dan ganti nama direktori yang belum dibongkar untuk akses yang lebih mudah:

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

Navigasikan ke travellist-demo direktori:

  1. 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:

  1. cp .env.example .env

Buka file ini menggunakan nano atau editor teks pilihan Anda:

  1. 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:

.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
...

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:

  1. nano Dockerfile

Salin konten berikut ke Dockerfile Anda:

Dockerfile
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

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:

  1. mkdir -p docker-compose/nginx

Buka file baru bernama travellist.conf dalam direktori itu:

  1. 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:

  1. mkdir docker-compose/mysql

Buka .sql baru berkas:

  1. 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.sql
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);

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:

  1. 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:

docker-compose.yml
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:

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 gambar lokal untuk app service, menggunakan jalur yang ditentukan (konteks) dan Dockerfile untuk instruksi. Argumen user dan uid 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 di nginx wadah.
  • networks :Mengatur layanan ini untuk menggunakan jaringan bernama travellist .

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:

docker-compose.yml
  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 bernama travellist .

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:

docker-compose.yml
  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 port 8000 ke server web yang berjalan pada port 80 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 di docker-compose/nginx/travellist.conf , disalin ke folder konfigurasi Nginx container.
  • networks :Mengatur layanan ini untuk menggunakan jaringan bernama travellist .

Selesai docker-compose.yml Berkas

Beginilah docker-compose.yml kami yang telah selesai file terlihat seperti:

docker-compose.yml
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:

  1. 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:

  1. 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:

  1. 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:

  1. 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:

  1. docker-compose exec app rm -rf vendor composer.lock
  2. 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:

  1. 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:

  1. 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:

  1. docker-compose pause
OutputPausing travellist-db    ... done
Pausing travellist-nginx ... done
Pausing travellist-app   ... done

Anda kemudian dapat melanjutkan layanan Anda dengan:

  1. 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:

  1. 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.


Docker
  1. Cara Menginstal dan Menggunakan Docker di Ubuntu 20.04

  2. Cara Menginstal dan Menggunakan Docker Compose di CentOS

  3. Cara Menginstal Docker dan Menjalankan Wadah Docker di Ubuntu

  1. Cara Menginstal Docker Compose di Ubuntu 18.04

  2. Cara Menginstal Docker Compose di Ubuntu 20.04

  3. Cara Menginstal Docker Compose di Ubuntu 18.04

  1. Cara Menginstal dan Menggunakan Docker Compose di Ubuntu 18.04

  2. Cara Menginstal dan Mengatur Docker di Ubuntu 18.04

  3. Cara menginstal ONLYOFFICE 8.9.0 dengan Docker di Ubuntu