有了第二篇《使用 Docker 搭建簡易的 Java Web 環境 (二)》,懂了如何經過單一鏡像建立 Docker 環境,這篇主要學習如何使用「docker-compose」。目標是:搭建 Laravel 開發環境php
Laravel 讓咱們書寫優雅的代碼
爲 Web 藝術家創造的 PHP 框架html
學習 Laravel,或者 PHP,不得不使用 composer。node
Composer 是 PHP 的一個依賴管理工具。它容許你申明項目所依賴的代碼庫,它會在你的項目中爲你安裝他們。
Composer 不是一個包管理器。是的,它涉及 "packages" 和 "libraries",但它在每一個項目的基礎上進行管理,在你項目的某個目錄中(例如 vendor)進行安裝。默認狀況下它不會在全局安裝任何東西。所以,這僅僅是一個依賴管理。mysql這種想法並不新鮮,Composer 受到了 node's npm 和 ruby's bundler 的強烈啓發。而當時 PHP 下並無相似的工具。laravel
Composer 將這樣爲你解決問題:git
a) 你有一個項目依賴於若干個庫。sql
b) 其中一些庫依賴於其餘庫。docker
c) 你聲明你所依賴的東西。數據庫
d) Composer 會找出哪一個版本的包須要安裝,並安裝它們(將它們下載到你的項目中)。
參考:docs.phpcomposer.com/00-intro.ht…apache
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 安裝工具:
composer global require "laravel/installer"複製代碼
而後就可使用 laravel new
命令安裝 Laravel 項目了,如:
laravel new blog複製代碼
也能夠經過 composer 建立:
composer create-project --prefer-dist laravel/laravel blog複製代碼
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」文檔
直接看代碼了,容易理解
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 實例很是簡單:
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 期待您關注
感謝您能看到這了