by Devin Yang

建立于: 5年前 ( 更新: 5年前 )

前言

D-Laravel是一个采用Docker进行的PHP运行环境,将所有的服务放入容器中运行,
数据库的服务(db),网页伺服器的服务(web),PHP-FPM的服务(php)...等,
经由定义docker-compose.yml档,我们能轻易调整数据库的版本或PHP版本。
D-Laravel同时创建了简易的bash,可帮我们更快速的采用docker,来创建Laravel的项目,并且完成数据库设置。
就算您单纯只是个PHP的开发著,其实也是可以透过D-Laravel,打造自己的开发环境的。
接下来,让我们借由Docker官方文档,来理解D-Laravel做了那些设置。

关於docker-compose.yml设置

以下为D-Laravel v1.6.10版之docker-compose-normal.yml档。
请点下方蓝色连结查看说明: (往下卷动提供简易的中文说明
version: '3.6'
services:
#=== 网页伺服器的container ======================
 web:
  image: nginx
  dns: 8.8.8.8
  ports:
    - "80:80"
    - "443:443"
  volumes:
  - ./sites:/var/www/html
  - ./etc:/etc/nginx/conf.d
  - ./var/log/web:/var/log/nginx
  hostname: web
  networks:
    - dlaravel_net
  
#=== PHP-FPM container ==========================
### Laravel 5.6/5.7 >= 7.1.3
### Laravel 5.5 >= 7.0.0
### Laravel 5.4 >= 5.6.4
### Laravel 5.3 between 5.6.4 & 7.1.*
 php:
  network_mode: "service:web"
  image: deviny/fpm:7.2.10
  #image: deviny/fpm:7.1.22
  #image: deviny/fpm:7.0.32
  #image: deviny/fpm:5.6.38
  volumes:
  - ./etc/php:/usr/local/etc/php/conf.d
  - ./sites:/var/www/html
  - ./etc/php-fpm.d/www.conf:/usr/local/etc/php-fpm.d/www.conf
  ###创建composer cache###
  - ./etc/cache:/home/dlaravel/.composer/cache
  #- ./var/log/php:/var/log
  #- ./etc/supervisor:/etc/supervisor/conf.d
  #- ./var/log/supervisor:/var/log/supervisor
  environment:
   - TZ=Asia/Taipei
  #- PHP_IDE_CONFIG=serverName=dlaravel
  #- XDEBUG_CONFIG="remote_host=???? profiler_enable=1"
  #创建bash_aliases在etc下,可用来自定义dlaravel使用者的环境变量
  #- ./etc/bash_aliases:/home/dlaravel/.bash_aliases

#=== 数据库 container ===========================
 db:
  image: mysql:5.7.19
  hostname: db
  ports:
    - "127.0.0.1:3306:3306"
  volumes:
    - ./etc/mysql/my.cnf:/etc/mysql/my.cnf
    - ./data:/var/lib/mysql
  environment:
   #- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD-secret}
   - MYSQL_ALLOW_EMPTY_PASSWORD= "yes"
   - TZ=Asia/Taipei
  networks:
    - dlaravel_net

#=== top-level netowks key ======================
networks:
    dlaravel_net:
 
简短的中文说明
 语法 中文说明
version: '3.6' 非常明显,就是compose-file的版本罗,不同docker-compose文件版本会使用不同的Docker释出版本。关於版本的相容请参看此文档
 
services 在分布式应用进程中,应用进程的不同部分称为“服务”。例如,如果您想像一个视频共享站点,它可能包括一个用於将应用进程数据存储在数据库中的服务,一个用於在后台进行视频转码的服务。 用户上传内容,前端服务等。

服务实际上就是“创建出的容器”。服务会运行一个映像(image)档,但服务中编写了映像(Image)档的运行方式 - 像是应该使用哪些连接埠(ports),应该运行多少个容器副本,及服务具有所需容量等等。 扩展服务会调整运行在该应用进程中的容器实例的数量,从而为流程中的服务分配更多计算资源。

幸运的是,使用Docker平台定义,运行和扩展服务非常容易 - 只需编写一个docker-compose.yml文档即可。
(作者注: 我想这里指的服务是在Docker swarm mode下的服务,一个Service有多个Task,所以可以Scale,在D-Laravel的stack.yml中,有类似的定义像是一个web的服务replicas了4个task,这属於高级的运用,我们可以不需理会。)
=====
上面我用Goolge翻译后,小调整的,所以看了是不是觉的头昏了,简单说,services的字面上看,有s嘛,复数,所以services下是有多个服务的,以D-Laravel为例,主要有三个服务,分别是webphpdb
这也是为何,在D-Laravel建好的Project中,会把Laravel的.env的数据库主机(DB_HOST)指到了db服务,非127.0.0.1罗。
DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=test1
DB_USERNAME=test1
DB_PASSWORD=test1
image 定义要使用那个映象档。docker的映像档主要是由dockerfile生成的。
我可以在DockerHub上搜寻不同的印象档,但请尽量选择标示为官方版本的印像档才是安全的。
dns

自定义的DNS伺服器。可以一个或多个。

dns: 8.8.8.8
dns:
  - 8.8.8.8
  - 9.9.9.9
ports 定义要暴露的连接埠(Expose ports)。
在docker文档中,host指的,就是我们运行docker的主机。透过了posts的设置,我们才能连到container内开启的连接埠。
volumes 挂载主机端的目录到容器内。在docker-compose的环境,当我们运行docker-compose down时,容器是会被移掉的,所以透过volumes的挂载,我们才能保留我们的数据。
当然Volume(卷宗)的使用决对不仅於此,请自行查看官方文档说明
environment 新建环境变量,在container中打env即可看到我们定义的环境变量。
hostname 直接翻译主机名称,非常明显罗,定义了容器运行时使用的称,而非显示Container ID。
networks 在docker-compose的设置中,相同网络下的"服务"是可以互ping的,所以,我们可以看见,web及db服务都是使用了
  networks:
    - dlaravel_net
这代表了,我们在web的容器内能ping到db的服务。
我们可以发现到--links的方式以列为不建议使用了,所以D-Laravel的设置,并不采用links的方式,进行container之间的连接。
 
  network_mode: "service:web" 在php的服务下,是否发觉了这个network_mode的设置呢?
 php:
  network_mode: "service:web"
php的服务主要是php-fpm,他会开启port 9000,这里的策略上将他开启的连接埠绑到了,
web的服务了,这样在集成Laravel Dusk运用时才不会有问题。
并无规定php-fpm一定要采用此方式,当然如果您调整为networks的方式时,您必需手动变更nginx的设置。
例如: etc/default.conf。
将原来的web变更为php如下,代表了php的服务已不是使用network_mode绑定在web的服务上了。
fastcgi_pass web:9000;
变更为
fastcgi_pass php:9000;
最后,期盼本文可以让您理解docker-compose.yml的设置方式,
进而生成或调整出符合您需求的环境设置。

Tags:

Devin Yang

文章内容无法一一说明,如果您有什么不了解处,欢印提问哦:)

No Comment

Post your comment

需要登入才可留言!

类似文章


config,vim

Vim在Ubuntu上的中文环境

如果Vim设置是中文环境,但Ubuntu安装时未设置为zh_TW.UTF-8,那要如何安装这个环境?

docker

如何简单的用Docker创建internet命令行的测速进程呢?

如何简单的用Docker创建internet命令行的测速进程呢? 这里我们使用python的进程speedtest-cli 会用Docker主要的用例,例如我想要在我的NAS内进行测速, 虽然我的NAS内有python,但没有pip命令,这时用Docker感觉上安全很多, 当然前题您的NAS需能跑Docker:)。 或者,我在MacOS的环境,我不想安装speedtest-cli到我的MacOS中。 这时用Docker简单的自建简单的运行环境还满不错的。

docker

Docker image的封存及取回

如何封存docker的image成为tar档,并且载回docker image。 我们可以用docker save及docker load进行。