Sử dụng docker-compose cho dự án Laravel
Bài đăng này đã không được cập nhật trong 3 năm
Chủ đề mà mình muốn đề cập đến đó build một môi trường cho dự án Laravel một cách nhanh bằng docker-compose. Khỏi cần phải nhắc đến docker là gì nữa nhỉ, vì chỉ cần search key word "docker viblo" là đã ra một list những bài viết về docker rồi, nên mọi người có thể tìm hiểu căn bản trước nhé. Vậy nên mình sẽ đi sâu vào chủ đề của bài viết.
1. Bước đầu tiên để thực hiện đó là cài đặt docker-compose:
$ curl -L "https://github.com/docker/compose/releases/download/1.11.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
2. Cấp quyền thực thi cho docker-compose
$ chmod +x /usr/local/bin/docker-compose
Để chắc chắn docker-compose đã được cài đặt thành công trên máy chúng ta kiểm tra bằng lệnh:
docker-compose -v
Kết quả thế này hoặc tương đương nhưng khác version thì xem như đã cài đặt thành công docker-compose
docker-compose version 1.9.0, build 2585387
Tới đây xem như việc cài đặt docker-compose đã thành công. Tiếp theo ...
3. Cấu trúc thư mục cho dự án
Bây giờ thứ cần đã có, việc tiếp theo là mình sẽ đi tạo folder để lưu config của docker và source code: Cấu trúc thư mục có dạng như sau:
* demo
* conf.d
* vhosts.conf
* src (thư mục lưu source code của mình)
* Dockerfile
* docker-compose.yml
* readme.md
Bây giờ mình sẽ đi giải thích nội dung của từng file.
Trong file vhosts.conf sẽ lưu những nội dung config virtualhost trong docker-container mà mình sẽ tạo ra.
DirectoryIndex index.php index.html
<Directory /app/public/>
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
</Directory>
<VirtualHost *:80>
ServerName localhost
DocumentRoot /app/public
<Directory "/app/public">
AllowOverride All
Options -Indexes +FollowSymLinks
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
Như đã giải thích ở trên thư mục src là thư mục lưu source code, là tất cả những gì mà một dự án laravel cần.
Trong file Dockerfile sẽ lưu những config để build lên một image với những thứ mà mình đã config trong này. Ví dụ như PHP, apache2, composer ...
Nếu bạn muốn cài thêm bất cứ thứ gì vào image thì cứ thêm vào file này, ví dụ như nodejs, npm, bower chẳng hạn.
Nội dung của Dockerfile
FROM ubuntu:16.04
// Install apache, PHP, and supplimentary programs. openssh-server, curl,
// and lynx-cur are for debugging the container.
RUN apt-get update && apt-get -y upgrade && apt-get -y install \
apache2 php libapache2-mod-php php-mcrypt php-mysql curl php-cli php-mbstring git unzip php-xml \
libcurl4-openssl-dev pkg-config libssl-dev libsslcommon2-dev php-pear php-dev vim
RUN curl -sS https://getcomposer.org/installer -o composer-setup.php
RUN php composer-setup.php --install-dir=/usr/local/bin --filename=composer
// Enable apache mods.
RUN a2enmod rewrite
RUN a2enmod headers
// Manually set up the apache environment variables
ENV APACHE_RUN_USER www-data
ENV APACHE_RUN_GROUP www-data
ENV APACHE_LOG_DIR /var/log/apache2
ENV APACHE_LOCK_DIR /var/lock/apache2
ENV APACHE_PID_FILE /var/run/apache2.pid
// install nodejs, npm, bower
RUN apt-get -y install nodejs npm git
RUN npm install -g bower
RUN npm install --global gulp-cli
RUN apt-get install -y ruby-full rubygems
RUN gem install sass
RUN ln -s /usr/bin/nodejs /usr/bin/node
RUN mkdir /app
WORKDIR /app
// Expose apache.
EXPOSE 80
// Update the default apache site with the config we created.
ADD conf.d/vhosts.conf /etc/apache2/sites-enabled/000-default.conf
// By default start up apache in the foreground, override with /bin/bash for interative.
CMD systemctl restart apache2
CMD /usr/sbin/apache2ctl -D FOREGROUND
File docker-compose.yml sẽ định nghĩa các container mà chúng ta cần. Hiện tại, chúng ta cần một container Web và một container cho cơ sở dữ liệu. Để hiểu rõ hơn về file này các bạn có thể tham khảo thêm ở đây
version: '2'
services:
web:
build: .
container_name: demo-web
volumes:
- ./src:/app
ports:
- "90:80"
links:
- serverdb
serverdb:
image: mysql:5.7
container_name: demo-serverdb
volumes:
- ./data/mysql:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=admin
ports:
- 3406:3306
Trong file này có một config đó là links. Config này sẽ tự động liên kết tới container khác trong hệ thống docker. Ví dụ ở đây là container serverdb
. Trong file .env của project t chỉ cần khai báo DB_HOST=serverdb
là sẽ tự động hiểu được host database ở container serverdb
4. Cấp quyền cho thư mục
Mọi công tác chuẩn bị dường như đã đâu vào đấy, nhưng đừng quên phân quyền cho 2 thư mục src/storage và src/bootstrap/cache
sudo chmod 777 -R src/storage src/bootstrap/cache
5. Build docker image từ Dockerfile
Bây giờ chúng ta sẽ build image trong docker bằng lệnh :
docker-compose build
Tới đây thì hãy vui longf ngồi đợi vì lệnh build này sẽ kéo một image Ubuntu:16.04 về và cài đặt mọi thứ mà chúng ta config trong Dockerfile
lên nó nên sẽ khá tốn thời gian.
6. Build docker container
Sau khi chạy xong lệnh build thì chạy lệnh
docker-compose up
Lệnh này dùng để build ra container mà chúng ta cần.
Chạy lệnh đểdocker ps
để xem nó đang chạy những container nào nhé.
Bây giờ lên trình duyệt try cập vào localhost:90
để xem kết quả.
Chúc mọi người thành công
Link tham khảo :
https://viblo.asia/naa/posts/AQrMJbWNM40E https://docs.docker.com/compose/
All rights reserved