有了第二篇《使用 Docker 搭建簡易的 Java Web 環境 (二)》,懂了如何通過單一映象建立 Docker 環境,這篇主要學習如何使用「docker-compose」。目標是:搭建 Laravel 開發環境
Laravel 安裝
Laravel 讓我們書寫優雅的程式碼
為 Web 藝術家創造的 PHP 框架
學習 Laravel,或者 PHP,不得不使用 composer。
Composer 是 PHP 的一個依賴管理工具。它允許你申明專案所依賴的程式碼庫,它會在你的專案中為你安裝他們。
Composer 不是一個包管理器。是的,它涉及 “packages” 和 “libraries”,但它在每個專案的基礎上進行管理,在你專案的某個目錄中(例如 vendor)進行安裝。預設情況下它不會在全域性安裝任何東西。因此,這僅僅是一個依賴管理。這種想法並不新鮮,Composer 受到了 node`s npm 和 ruby`s bundler 的強烈啟發。而當時 PHP 下並沒有類似的工具。
Composer 將這樣為你解決問題:
a) 你有一個專案依賴於若干個庫。
b) 其中一些庫依賴於其他庫。
c) 你宣告你所依賴的東西。
d) Composer 會找出哪個版本的包需要安裝,並安裝它們(將它們下載到你的專案中)。
參考:docs.phpcomposer.com/00-intro.ht…
composer
1.使用 php 命令安裝
php -r "copy(`https://getcomposer.org/installer`, `composer-setup.php`);"
php -r "if (hash_file(`SHA384`, `composer-setup.php`) === `544e09ee996cdf60ece3804abc52599c22b1f40f4323403c44d44fdfdd586475ca9813a858088ffbc1f233e9b180f061`) { echo `Installer verified`; } else { echo `Installer corrupt`; unlink(`composer-setup.php`); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink(`composer-setup.php`);"複製程式碼
2.使用 Packagist / Composer 中國全量映象加速
修改 composer 的全域性配置檔案(推薦方式)
composer config -g repo.packagist composer https://packagist.phpcomposer.com複製程式碼
更多檢視:pkg.phpcomposer.com/
3.並行 composer install
composer global require hirak/prestissimo複製程式碼
下載如有神助!!!
建立 Laravel 專案
可以通過 Laravel 安裝工具:
composer global require "laravel/installer"複製程式碼
然後就可以使用 laravel new
命令安裝 Laravel 專案了,如:
laravel new blog複製程式碼
也可以通過 composer 建立:
composer create-project --prefer-dist laravel/laravel blog複製程式碼
構建 php + apache 映象
1.選擇 DaoCloud 提供的 PHP 映象作為專案的基礎映象。
FROM daocloud.io/php:7.1.8-apache複製程式碼
2.更換 163 源:
#更新apt-get源 使用163的源
RUN mv /etc/apt/sources.list /etc/apt/sources.list.bak &&
echo "deb http://mirrors.163.com/debian/ jessie main non-free contrib" >/etc/apt/sources.list &&
echo "deb http://mirrors.163.com/debian/ jessie-proposed-updates main non-free contrib" >>/etc/apt/sources.list &&
echo "deb-src http://mirrors.163.com/debian/ jessie main non-free contrib" >>/etc/apt/sources.list &&
echo "deb-src http://mirrors.163.com/debian/ jessie-proposed-updates main non-free contrib" >>/etc/apt/sources.list複製程式碼
3.通過安裝指令碼安裝 Laravel 應用所需要的 PHP 依賴。
# APT 自動安裝 PHP 相關的依賴包,如需其他依賴包在此新增
RUN apt-get update
&& apt-get install -y
libmcrypt-dev
libz-dev
git
wget
libpcre3-dev
# 官方 PHP 映象內建命令,安裝 PHP 依賴
&& docker-php-ext-install
mcrypt
mbstring
pdo_mysql
zip
# 用完包管理器後安排打掃衛生可以顯著的減少映象大小
&& apt-get clean
&& apt-get autoclean
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
# 安裝 Composer,此物是 PHP 用來管理依賴關係的工具
&& curl -sS https://getcomposer.org/installer
| php -- --install-dir=/usr/local/bin --filename=composer
# 國內映象加速
&& composer config -g repo.packagist composer https://packagist.phpcomposer.com
&& composer global require hirak/prestissimo複製程式碼
4.建立 Laravel 目錄結構:
# 開啟 URL 重寫模組
# 配置預設放置 App 的目錄
RUN a2enmod rewrite
&& mkdir -p /app
&& rm -fr /var/www/html
&& ln -s /app/public /var/www/html
WORKDIR /app複製程式碼
5.載入 composer 依賴包
# 預先載入 Composer 包依賴,優化 Docker 構建映象的速度
COPY ./composer.json /app/
COPY ./composer.lock /app/
RUN composer install --no-autoloader --no-scripts複製程式碼
最終整個 Dockerfile 如下所示:
FROM daocloud.io/php:7.1.8-apache
#更新apt-get源 使用163的源
RUN mv /etc/apt/sources.list /etc/apt/sources.list.bak &&
echo "deb http://mirrors.163.com/debian/ jessie main non-free contrib" >/etc/apt/sources.list &&
echo "deb http://mirrors.163.com/debian/ jessie-proposed-updates main non-free contrib" >>/etc/apt/sources.list &&
echo "deb-src http://mirrors.163.com/debian/ jessie main non-free contrib" >>/etc/apt/sources.list &&
echo "deb-src http://mirrors.163.com/debian/ jessie-proposed-updates main non-free contrib" >>/etc/apt/sources.list
# APT 自動安裝 PHP 相關的依賴包,如需其他依賴包在此新增
RUN apt-get update
&& apt-get install -y
libmcrypt-dev
libz-dev
git
wget
libpcre3-dev
# 官方 PHP 映象內建命令,安裝 PHP 依賴
&& docker-php-ext-install
mcrypt
mbstring
pdo_mysql
zip
# 用完包管理器後安排打掃衛生可以顯著的減少映象大小
&& apt-get clean
&& apt-get autoclean
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
# 安裝 Composer,此物是 PHP 用來管理依賴關係的工具
&& curl -sS https://getcomposer.org/installer
| php -- --install-dir=/usr/local/bin --filename=composer
# 國內映象加速
&& composer config -g repo.packagist composer https://packagist.phpcomposer.com
&& composer global require hirak/prestissimo
# 開啟 URL 重寫模組
# 配置預設放置 App 的目錄
RUN a2enmod rewrite
&& mkdir -p /app
&& rm -fr /var/www/html
&& ln -s /app/public /var/www/html
WORKDIR /app
# 預先載入 Composer 包依賴,優化 Docker 構建映象的速度
COPY ./composer.json /app/
COPY ./composer.lock /app/
RUN composer install --no-autoloader --no-scripts
# 複製程式碼到 App 目錄
COPY . /app
# 執行 Composer 自動載入和相關指令碼
# 修改目錄許可權
RUN composer install
&& chown -R www-data:www-data /app
&& chmod -R 0777 /app/storage複製程式碼
如果根據上一篇文章的寫法,修改.env 將資料庫指向上一篇所寫的 MySQL 容器,然後產生映象,最後建立容器,執行起來,但這不是本文的目標,本文的目標是利用「docker composer」來結合多個映象,配置 Laravel 環境。
Compose is a tool for defining and running multi-container Docker applications. With Compose, you use a Compose file to configure your application’s services. Then, using a single command, you create and start all the services from your configuration.
所以下一步需要編寫「docker-compose.yml」文件
「docker-compose.yml」文件
直接看程式碼了,容易理解
version: `3`
services:
app:
build: .
restart: always
depends_on:
- mysql
ports:
- "8000:80"
networks:
- app
mysql:
image: daocloud.io/mysql:latest
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: homestead
MYSQL_USER: homestead
MYSQL_PASSWORD: secret
ports:
- 8002:3306
networks:
- app
networks:
app:
volumes:
db_data:複製程式碼
執行構建命令:
docker-compose up -d複製程式碼
執行結果如下:
在瀏覽器輸入:http://localhost:8000,執行如下:
總結
這裡還剩下一個小尾巴有待於各位去檢驗:建立了 MySQL 容器,但具體和 Laravel 專案怎麼結合?
注:由於通過命令 laravel new
建立 blog 專案時,就已經把 composer 依賴包下載回來了,由於大家的本地環境和 docker 環境不一致,所以我把 vendor 整個資料夾刪除了,這也好理解,因為我們和別人配合時,在版本庫中也不會有 vendor 依賴包資料夾的。
「docker-compose.yml」文件寫法規則請聽下回分解
附:使用 MySQL 映象
啟動一個 MySQL 例項非常簡單:
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=000000 -e MYSQL_DATABASE=yemeishu_database daocloud.io/mysql:latest複製程式碼
我們進入該容器看看,是不是已經建立了資料庫:yemeishu_database,以及是否設定了 root 的密碼為:000000。
如果使用資料庫客戶端,也可以看到建立的資料庫:yemeishu_database
coding01 期待您關注
感謝您能看到這了