Thứ năm, 23/01/2020 | 00:00 GMT+7

Cách chứa một ứng dụng Laravel để phát triển với Docker Compose trên Ubuntu 18.04

Để chứa một ứng dụng đề cập đến quá trình điều chỉnh một ứng dụng và các thành phần của nó để có thể chạy nó trong môi trường nhẹ được gọi là vùng chứa . Những môi trường như vậy được tách biệt và sử dụng một lần, và có thể được tận dụng để phát triển, thử nghiệm và triển khai các ứng dụng vào production .

Trong hướng dẫn này, ta sẽ sử dụng Docker Compose để chứa một ứng dụng Laravel để phát triển. Khi bạn hoàn thành, bạn sẽ có một ứng dụng Laravel demo chạy trên ba containers dịch vụ riêng biệt:

  • Một dịch vụ app chạy PHP7.4-FPM;
  • Một dịch vụ db chạy MySQL 5.7;
  • Một dịch vụ nginx sử app dịch vụ app để phân tích cú pháp mã PHP trước khi cung cấp ứng dụng Laravel cho user cuối cùng.

Để cho phép quá trình phát triển được tổ chức hợp lý và tạo điều kiện gỡ lỗi ứng dụng, ta sẽ giữ cho các file ứng dụng được đồng bộ hóa bằng cách sử dụng dung lượng chia sẻ. Ta cũng sẽ xem cách sử dụng các lệnh thực thi của docker-compose exec để chạy ComposerArtisan trên containers app .

Yêu cầu

Bước 1 - Lấy ứng dụng Demo

Để bắt đầu, ta sẽ tìm nạp ứng dụng Laravel demo từ kho Github của nó. Ta quan tâm đến nhánh tutorial-01 , chứa ứng dụng Laravel cơ bản mà ta đã tạo trong hướng dẫn đầu tiên của loạt bài này .

Để lấy mã ứng dụng tương thích với hướng dẫn này, hãy download tutorial-1.0.1 phát hành tutorial-1.0.1 vào folder chính của bạn với:

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

Ta cần lệnh unzip để extract mã ứng dụng. Trong trường hợp bạn chưa cài đặt gói này trước đây, hãy làm như vậy ngay bây giờ với:

  • sudo apt update
  • sudo apt install unzip

Bây giờ, hãy extract nội dung của ứng dụng và đổi tên folder đã extract để truy cập dễ dàng hơn:

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

Điều hướng đến danh sách du lịch travellist-demo folder travellist-demo :

  • cd travellist-demo

Trong bước tiếp theo, ta sẽ tạo file cấu hình .env để cài đặt ứng dụng.

Bước 2 - Cài đặt file .env của ứng dụng

Các file cấu hình Laravel nằm trong một folder được gọi là config , bên trong folder root của ứng dụng. Ngoài ra, file .env được sử dụng để cài đặt cấu hình phụ thuộc vào môi trường , chẳng hạn như thông tin xác thực và bất kỳ thông tin nào có thể khác nhau giữa các lần triển khai. Tệp này không có trong kiểm soát sửa đổi.

Cảnh báo : Tệp cấu hình môi trường chứa thông tin nhạy cảm về server của bạn, bao gồm thông tin đăng nhập database và khóa bảo mật. Vì lý do đó, bạn không nên chia sẻ công khai file này.

Các giá trị có trong file .env sẽ được ưu tiên hơn các giá trị được đặt trong file cấu hình thông thường nằm tại folder config . Mỗi cài đặt trên môi trường mới yêu cầu file môi trường được điều chỉnh để xác định những thứ như cài đặt kết nối database , tùy chọn gỡ lỗi, URL ứng dụng, trong số các mục khác có thể thay đổi tùy thuộc vào môi trường ứng dụng đang chạy.

Bây giờ ta sẽ tạo một file .env mới để tùy chỉnh các tùy chọn cấu hình cho môi trường phát triển mà ta đang cài đặt . Laravel đi kèm với một file .env ví dụ mà ta có thể sao chép để tạo file của riêng mình:

  • cp .env.example .env

Mở file này bằng nano hoặc editor mà bạn chọn:

  • nano .env

Dòng điện .env file từ travellist ứng dụng demo chứa các tùy chọn để sử dụng một database MySQL local , với 127.0.0.1 như server database . Ta cần cập nhật biến DB_HOST để nó trỏ đến dịch vụ database mà ta sẽ tạo trong môi trường Docker của bạn . Trong hướng dẫn này, ta sẽ gọi dịch vụ database của ta là db . Hãy tiếp tục và thay thế giá trị được liệt kê của DB_HOST bằng tên dịch vụ database :

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

Vui lòng thay đổi tên database , tên user và password , nếu bạn muốn. Các biến này sẽ được tận dụng trong bước sau, nơi ta sẽ cài đặt file docker-compose.yml để cấu hình các dịch vụ của ta .

Lưu file khi bạn chỉnh sửa xong. Nếu bạn đã sử dụng nano , bạn có thể thực hiện bằng cách nhấn Ctrl+x , sau đó nhấn YEnter để xác nhận.

Bước 3 - Cài đặt Dockerfile của ứng dụng

Mặc dù cả hai dịch vụ MySQL và Nginx của ta sẽ dựa trên hình ảnh mặc định thu được từ Docker Hub , ta vẫn cần xây dựng hình ảnh tùy chỉnh cho containers ứng dụng. Ta sẽ tạo một Dockerfile mới cho điều đó.

Hình ảnh travellist của ta sẽ dựa trên php:7.4-fpm hình ảnh chính thức PHP từ Docker Hub. Trên môi trường PHP-FPM cơ bản đó, ta sẽ cài đặt một vài module PHP bổ sung và công cụ quản lý phụ thuộc của Trình soạn thảo .

Ta cũng sẽ tạo một user hệ thống mới; điều này là cần thiết để thực hiện các lệnh của artisancomposer trong khi phát triển ứng dụng. Cài đặt uid đảm bảo user bên trong containers có cùng uid với user hệ thống của bạn trên server của bạn, nơi bạn đang chạy Docker. Bằng cách này, các file nào được tạo bởi các lệnh này đều được sao chép trong server lưu trữ với các quyền chính xác. Điều này cũng nghĩa là bạn có thể sử dụng trình soạn thảo mã mà bạn chọn trong server để phát triển ứng dụng đang chạy bên trong các containers .

Tạo một Dockerfile mới với:

  • nano Dockerfile

Sao chép các nội dung sau vào Docker file :

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  

Đừng quên lưu file khi bạn hoàn tất.

Dockerfile của ta bắt đầu bằng cách xác định hình ảnh cơ sở mà ta đang sử dụng: php:7.4-fpm .

Sau khi cài đặt gói hệ thống và phần mở rộng PHP, ta cài đặt Composer bằng cách sao chép các composer thực thi từ mới nhất của nó hình ảnh chính thức để hình ảnh ứng dụng của ta .

Một user hệ thống mới sau đó được tạo và cài đặt bằng cách sử dụng các đối số useruid đã được khai báo ở phần đầu của Dockerfile. Các giá trị này sẽ được Docker Compose đưa vào tại thời điểm xây dựng.

Cuối cùng, ta đặt dir làm việc mặc định là /var/www và thay đổi thành user mới được tạo. Điều này sẽ đảm bảo bạn đang kết nối với quyền là regular user và bạn đang ở đúng folder khi chạy các lệnh của trình composerartisan trên containers ứng dụng.

Bước 4 - Cài đặt cấu hình Nginx và file kết xuất database

Khi tạo môi trường phát triển với Docker Compose, thông thường cần phải chia sẻ các file cấu hình hoặc khởi tạo với các containers dịch vụ, để cài đặt hoặc khởi động các dịch vụ đó. Thực tiễn này tạo điều kiện thuận lợi cho việc thay đổi file cấu hình để tinh chỉnh môi trường của bạn trong khi bạn đang phát triển ứng dụng.

Bây giờ ta sẽ cài đặt một folder với các file sẽ được sử dụng để cấu hình và khởi tạo containers dịch vụ của ta .

Để cài đặt Nginx, ta sẽ chia sẻ file travellist.conf sẽ cấu hình cách ứng dụng được phân phối. Tạo folder docker-compose/nginx với:

  • mkdir -p docker-compose/nginx

Mở một file mới có tên travellist.conf trong folder đó:

  • nano docker-compose/nginx/travellist.conf

Sao chép cấu hình Nginx sau vào file đó:

docker-compile / 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;     } } 

Tệp này sẽ cấu hình Nginx để lắng nghe trên cổng 80 và sử dụng index.php làm trang index mặc định. Nó sẽ đặt root tài liệu thành /var/www/public , sau đó cấu hình Nginx để sử app dịch vụ app trên cổng 9000 để xử lý các file *.php .

Lưu file khi bạn chỉnh sửa xong.

Để cài đặt database MySQL, ta sẽ chia sẻ một kết xuất database sẽ được nhập khi containers được khởi tạo. Đây là một tính năng được cung cấp bởi hình ảnh MySQL 5.7 mà ta sẽ sử dụng trên containers đó.

Tạo một folder mới cho các file khởi tạo MySQL của bạn bên trong folder docker-compose :

  • mkdir docker-compose/mysql

Mở file .sql mới:

  • nano docker-compose/mysql/init_db.sql

Kết xuất MySQL sau đây dựa trên database mà ta đã cài đặt trong hướng dẫn Laravel về LEMP của ta . Nó sẽ tạo một bảng mới có tên các places . Sau đó, nó sẽ điền vào bảng một tập hợp các vị trí mẫu.

Thêm mã sau vào file :

docker -omp / 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); 

Bảng places chứa ba trường: id , namevisited . Trường visited là một lá cờ được sử dụng để xác định các địa điểm vẫn phải đến . Hãy thay đổi địa điểm mẫu hoặc bao gồm những địa điểm mới. Lưu file khi bạn hoàn tất.

Ta đã hoàn tất việc cài đặt Dockerfile của ứng dụng và các file cấu hình dịch vụ. Tiếp theo, ta sẽ cài đặt Docker Compose để sử dụng các file này khi tạo dịch vụ của ta .

Bước 5 - Tạo môi trường nhiều containers với Docker Compose

Docker Compose cho phép bạn tạo môi trường nhiều containers cho các ứng dụng chạy trên Docker. Nó sử dụng các định nghĩa dịch vụ để xây dựng các môi trường hoàn toàn có thể tùy chỉnh với nhiều containers có thể chia sẻ mạng và data volumes . Điều này cho phép tích hợp liền mạch giữa các thành phần ứng dụng.

Để cài đặt các định nghĩa dịch vụ của ta , ta sẽ tạo một file mới có tên là docker-compose.yml . Thông thường, file này nằm ở folder root của folder ứng dụng và nó xác định môi trường được chứa trong containers của bạn, bao gồm các hình ảnh cơ sở mà bạn sẽ sử dụng để tạo containers của bạn và cách các dịch vụ của bạn sẽ tương tác.

Ta sẽ xác định ba dịch vụ khác nhau trong file docker-compose.yml : app , dbnginx .

Các app dịch vụ này sẽ xây dựng một hình ảnh gọi là travellist , dựa trên Dockerfile ta đã tạo trước đó. Vùng chứa được dịch vụ này xác định sẽ chạy một server php-fpm để phân tích cú pháp mã PHP và gửi kết quả trở lại dịch vụ nginx , dịch vụ này sẽ chạy trên một containers riêng biệt. Dịch vụ mysql định nghĩa một containers đang chạy server MySQL 5.7. Các dịch vụ của ta sẽ chia sẻ một mạng lưới cầu nối có tên là travellist .

Các file ứng dụng sẽ được đồng bộ hóa trên cả app và dịch vụ nginx thông qua mount ràng buộc . Các liên kết liên kết hữu ích trong môi trường phát triển vì chúng cho phép đồng bộ hai chiều hiệu quả giữa server và containers .

Tạo file docker-compose.yml ở folder root của folder ứng dụng:

  • nano docker-compose.yml

Tệp docker-compose.yml điển hình bắt đầu bằng định nghĩa version , theo sau là nút services , theo đó tất cả các dịch vụ được định nghĩa. Mạng được chia sẻ thường được xác định ở cuối file đó.

Để bắt đầu, hãy sao chép mã soạn sẵn này vào file docker-compose.yml của bạn:

docker-compos.yml
version: "3.7" services:   networks:   travellist:     driver: bridge 

Bây giờ ta sẽ chỉnh sửa nút services để bao gồm các services app , dbnginx .

Dịch vụ app

Dịch vụ app sẽ cài đặt một containers có tên là travellist-app . Nó xây dựng một Docker image mới dựa trên một Dockerfile nằm trong đường dẫn giống như docker-compose.yml file . Những hình ảnh mới sẽ được lưu tại local dưới cái tên travellist .

Mặc dù root tài liệu đang được phân phát dưới dạng ứng dụng nằm trong containers nginx , ta cũng cần các file ứng dụng ở đâu đó bên trong containers app , vì vậy ta có thể thực thi các việc dòng lệnh bằng công cụ Laravel Artisan.

Sao chép định nghĩa dịch vụ sau trong nút services của bạn, bên trong file docker-compose.yml :

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

Các cài đặt này thực hiện như sau:

  • build : Cấu hình này yêu cầu Docker Compose xây dựng hình ảnh local cho dịch vụ app , sử dụng đường dẫn (ngữ cảnh) và Dockerfile được chỉ định để biết hướng dẫn. Các đối số useruid được đưa vào Dockerfile để tùy chỉnh các lệnh tạo của user tại thời điểm xây dựng.
  • image : Tên sẽ được sử dụng cho hình ảnh đang được xây dựng.
  • container_name : Cài đặt tên containers cho dịch vụ này.
  • restart : Luôn khởi động lại, trừ khi dịch vụ bị dừng.
  • working_dir : Đặt folder mặc định cho dịch vụ này là /var/www .
  • volumes : Tạo một volume chia sẻ sẽ đồng bộ hóa nội dung từ folder hiện tại sang /var/www bên trong containers . Lưu ý đây không phải là root tài liệu của bạn, vì nó sẽ nằm trong containers nginx .
  • networks : Bộ lên dịch vụ này sử dụng một mạng lưới tên travellist .

Dịch vụ db

Dịch vụ db sử dụng hình ảnh MySQL 5.7 được tạo sẵn từ Docker Hub. Bởi vì Docker Soạn tự động tải .env file biến nằm trong folder giống như docker-compose.yml file , ta có thể có được các cài đặt database của ta từ Laravel .env file ta tạo ra trong một bước trước.

Bao gồm định nghĩa dịch vụ sau trong nút services của bạn, ngay sau dịch vụ app :

docker-compos.yml
  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 

Các cài đặt này thực hiện như sau:

  • image : Xác định Docker image sẽ được sử dụng cho containers này. Trong trường hợp này, ta đang sử dụng hình ảnh MySQL 5.7 từ Docker Hub.
  • container_name : Cài đặt tên containers cho dịch vụ này: travellist-db .
  • restart : Luôn khởi động lại dịch vụ này, trừ khi nó bị dừng rõ ràng.
  • environment : Xác định các biến môi trường trong containers mới. Ta đang sử dụng các giá trị thu được từ file .env để cài đặt dịch vụ MySQL của bạn , dịch vụ này sẽ tự động tạo database và user mới dựa trên các biến môi trường được cung cấp.
  • volumes : Tạo một volume để chia sẻ kết xuất database .sql sẽ được sử dụng để khởi tạo database ứng dụng. Hình ảnh MySQL sẽ tự động nhập các file .sql được đặt trong folder /docker-entrypoint-initdb.d bên trong containers .
  • networks : Bộ lên dịch vụ này sử dụng một mạng lưới tên travellist .

Dịch vụ nginx

Dịch vụ nginx sử dụng hình ảnh Nginx dựng sẵn trên đỉnh Alpine , một bản phân phối Linux nhẹ. Nó tạo một containers có tên là travellist-nginx và nó sử dụng định nghĩa ports để tạo chuyển hướng từ cổng 8000 trên hệ thống server sang cổng 80 bên trong containers .

Bao gồm định nghĩa dịch vụ sau trong nút services của bạn, ngay sau dịch vụ db :

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

Các cài đặt này thực hiện như sau:

  • image : Xác định Docker image sẽ được sử dụng cho containers này. Trong trường hợp này, ta đang sử dụng hình ảnh Alpine Nginx 1.17.
  • container_name : Cài đặt tên containers cho dịch vụ này: travellist-nginx .
  • restart : Luôn khởi động lại dịch vụ này, trừ khi nó bị dừng rõ ràng.
  • ports : Cài đặt chuyển hướng cổng sẽ cho phép truy cập bên ngoài qua cổng 8000 tới web server đang chạy trên cổng 80 bên trong containers .
  • volumes : Tạo hai tập dùng chung. Cái đầu tiên sẽ đồng bộ hóa nội dung từ folder hiện tại sang /var/www bên trong containers . Bằng cách này, khi bạn áp dụng các thay đổi local đối với file ứng dụng, chúng sẽ nhanh chóng được phản ánh trong ứng dụng đang được cung cấp bởi Nginx bên trong containers . Tập thứ hai sẽ đảm bảo file cấu hình Nginx của ta , nằm tại docker-compose/nginx/travellist.conf , được sao chép vào folder cấu hình Nginx của containers .
  • networks : Bộ lên dịch vụ này sử dụng một mạng lưới tên travellist .

Đã hoàn thành file docker-compose.yml

Đây là cách file docker-compose.yml đã hoàn thành của ta trông giống như sau:

docker-compos.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: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 

Đảm bảo rằng bạn lưu file khi hoàn tất.

Bước 6 - Chạy ứng dụng với Docker Compose

Bây giờ, ta sẽ sử dụng các lệnh do docker-compose để xây dựng hình ảnh ứng dụng và chạy các dịch vụ mà ta đã chỉ định trong cài đặt của bạn .

Xây dựng hình ảnh app bằng lệnh sau:

  • docker-compose build app

Lệnh này có thể mất vài phút để hoàn thành. Bạn sẽ thấy kết quả tương tự như sau:

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

Khi quá trình xây dựng hoàn tất, bạn có thể chạy môi trường ở chế độ nền với:

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

Điều này sẽ chạy các containers của bạn trong nền. Để hiển thị thông tin về trạng thái của các dịch vụ đang hoạt động của bạn, hãy chạy:

  • docker-compose ps

Bạn sẽ thấy kết quả như thế này:

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

Môi trường của bạn hiện đã được cài đặt và đang chạy, nhưng ta vẫn cần thực hiện một vài lệnh để hoàn tất việc cài đặt ứng dụng. Bạn có thể sử dụng lệnh docker-compose exec thực thi các lệnh trong containers dịch vụ, chẳng hạn như ls -l để hiển thị thông tin chi tiết về các file trong folder ứng dụng:

  • docker-compose exec app ls -l
Output
total 256 -rw-rw-r-- 1 sammy 1001 738 Jan 15 16:46 Dockerfile -rw-rw-r-- 1 sammy 1001 101 Jan 7 08:05 README.md drwxrwxr-x 6 sammy 1001 4096 Jan 7 08:05 app -rwxr-xr-x 1 sammy 1001 1686 Jan 7 08:05 artisan drwxrwxr-x 3 sammy 1001 4096 Jan 7 08:05 bootstrap -rw-rw-r-- 1 sammy 1001 1501 Jan 7 08:05 composer.json -rw-rw-r-- 1 sammy 1001 179071 Jan 7 08:05 composer.lock drwxrwxr-x 2 sammy 1001 4096 Jan 7 08:05 config drwxrwxr-x 5 sammy 1001 4096 Jan 7 08:05 database drwxrwxr-x 4 sammy 1001 4096 Jan 15 16:46 docker-compose -rw-rw-r-- 1 sammy 1001 1015 Jan 15 16:45 docker-compose.yml -rw-rw-r-- 1 sammy 1001 1013 Jan 7 08:05 package.json -rw-rw-r-- 1 sammy 1001 1405 Jan 7 08:05 phpunit.xml drwxrwxr-x 2 sammy 1001 4096 Jan 7 08:05 public -rw-rw-r-- 1 sammy 1001 273 Jan 7 08:05 readme.md drwxrwxr-x 6 sammy 1001 4096 Jan 7 08:05 resources drwxrwxr-x 2 sammy 1001 4096 Jan 7 08:05 routes -rw-rw-r-- 1 sammy 1001 563 Jan 7 08:05 server.php drwxrwxr-x 5 sammy 1001 4096 Jan 7 08:05 storage drwxrwxr-x 4 sammy 1001 4096 Jan 7 08:05 tests -rw-rw-r-- 1 sammy 1001 538 Jan 7 08:05 webpack.mix.js

Bây giờ ta sẽ chạy composer install để cài đặt các phụ thuộc ứng dụng:

  • docker-compose exec app composer install

Bạn sẽ thấy kết quả như thế này:

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.

Điều cuối cùng ta cần làm trước khi kiểm tra ứng dụng là tạo một khóa ứng dụng duy nhất bằng công cụ dòng lệnh Laravel artisan công. Khóa này được sử dụng để mã hóa phiên user và dữ liệu nhạy cảm khác:

  • docker-compose exec app php artisan key:generate
Output
Application key set successfully.

Bây giờ hãy truy cập trình duyệt của bạn và truy cập domain hoặc địa chỉ IP của server của bạn trên cổng 8000:

http://server_domain_or_IP:8000 

Bạn sẽ thấy một trang như thế này:

Demo ứng dụng Laravel

Bạn có thể sử dụng lệnh logs để kiểm tra log được tạo bởi các dịch vụ của bạn:

  • docker-compose logs nginx
Attaching to travellist-nginx travellist-nginx | 192.168.160.1 - - [23/Jan/2020:13:57:25 +0000] "GET / HTTP/1.1" 200 626 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36" travellist-nginx | 192.168.160.1 - - [23/Jan/2020:13:57:26 +0000] "GET /favicon.ico HTTP/1.1" 200 0 "http://localhost:8000/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36" travellist-nginx | 192.168.160.1 - - [23/Jan/2020:13:57:42 +0000] "GET / HTTP/1.1" 200 626 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36" … 

Nếu bạn muốn tạm dừng môi trường Docker Compose của bạn trong khi vẫn giữ trạng thái của tất cả các dịch vụ của nó, hãy chạy:

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

Sau đó, bạn có thể tiếp tục các dịch vụ của bạn với:

  • docker-compose unpause
Output
Unpausing travellist-app ... done Unpausing travellist-nginx ... done Unpausing travellist-db ... done

Để tắt môi trường Docker Compose của bạn và xóa tất cả các containers , mạng và dung lượng của nó, hãy chạy:

  • 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

Để biết tổng quan về tất cả các lệnh Docker Compose, vui lòng kiểm tra tham chiếu dòng lệnh Docker Compose .

Kết luận

Trong hướng dẫn này, ta đã cài đặt môi trường Docker với ba containers bằng Docker Compose để xác định cơ sở hạ tầng của ta trong một file YAML.

Từ thời điểm này, bạn có thể làm việc trên ứng dụng Laravel của bạn mà không cần cài đặt và cài đặt web server local để phát triển và thử nghiệm. Hơn nữa, bạn sẽ làm việc với môi trường dùng một lần có thể dễ dàng sao chép và phân phối, điều này có thể hữu ích trong khi phát triển ứng dụng của bạn và cả khi hướng tới môi trường production .


Tags:

Các tin liên quan

Cách chứa một ứng dụng Laravel để phát triển với Docker Compose trên Ubuntu 18.04
2020-01-23
Lưu trữ một ứng dụng Ruby on Rails để phát triển với Docker Compose
2019-12-27
Làm việc với nhiều container bằng Docker Compose
2019-12-20
Cách sử dụng Plugin Docker cho Visual Studio Code
2019-12-12
Cách sử dụng Ansible để cài đặt và thiết lập Docker trên Ubuntu 18.04
2019-12-05
Cách tạo ứng dụng Django và Gunicorn với Docker
2019-10-25
Cách thiết lập Flask với MongoDB và Docker
2019-10-11
Cách cài đặt và sử dụng Docker trên Debian 10
2019-07-08
Cách sử dụng server Docker từ xa để tăng tốc quy trình làm việc của bạn
2019-06-25
Cách cài đặt WordPress với Docker Compose
2019-05-24