当每个Class(Image)都写的简洁有力又好用、且权责都分得乾乾净净的时候就可以加入一个Service层让整个服务更容易地被使用,而这个Service层的功能就由docker-compose来担任,先建立一个资料夹然後按照下图将档案建立好。
.
├── Backend
│ ├── index.php
│ ├── Dockerfile
│ └── nginx
│ └── default.conf
└── docker-compose.yaml
default.conf这个档案内容为以下
server {
listen 80;
index index.php index.html;
server_name localhost;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
root /var/www/daythirteen;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass php:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
default.conf这个档案是属於Nginx的设定,Nginx是一套与Apache相似的服务,负责处理网页的request与response,在本篇章就不多叙述。
index.php 内容为以下
<?php
echo 'Hello World';
?>
docker-compose 内容为以下
version: '3'
networks:
laravel:
services:
nginx:
image: nginx:stable-alpine
container_name: nginx-laravel
ports:
- "8080:80"
volumes:
- ./Backend/index.php:/var/www/daythirteen/index.php
- ./Backend/nginx/default.conf:/etc/nginx/conf.d/default.conf
depends_on:
- php
- postgresql
networks:
- laravel
php:
image: kurt6783/iron_man
container_name: php
ports:
- "9000:9000"
volumes:
- ./Backend/index.php:/var/www/daythirteen/index.php
networks:
- laravel
postgresql:
image: mdillon/postgis:10
container_name: postgresql
tty: true
ports:
- "5432:5432"
environment:
- POSTGRES_PASSWORD=1234
volumes:
- ./Backend/postgresql:/var/lib/postgresql/data
networks:
- laravel
下面说明一些重要的属性。
前面有提到每一个实体化的container都是一个独立的个体,但因为Nginx、php、postgresql这三个服务是需要串起来才能发挥功用的,所以需要利用networks来让他们建立一个内网,可以看到在每个服务的下面都会搭配一个networks属性。
功能如其名,container要由哪一个image实体化就是从这里设定,PHP的部分就是使用昨天制作的Image
build:
context: .
dockerfile: ./Backend/Dockerfile
替这个实例化的container取一个名字,方便辨识、取log、关闭、重启。
开一个port让外部可以连入,例如Day11的SQL就是用此方法让Navicate可以连线的。
从外部挂载档案到内部,冒号左边为外部位置,冒号右边为内部位置,启动时会将资料挂载进去container,运行中即关闭时会将资料同步至外部,如果没有挂载档案的话当container关闭後在期间有变化的档案就不会有纪录。
必须要先启动指定container才能继续实体化该container,以此案例来说,如果要启用Nginx必须要先启用php与postgresql,毕竟不可能没有厨师跟服务生还开门做生意。
环境变数设定,与Day11 SQL下指令的 -e 是同一个指令,每个Image有属於自己的环境参数设定,可至DockerHub上查询。
要使用docker-compose是需要安装软件的,所以打开terminal打上
curl -L "https://github.com/docker/compose/releases/download/1.10.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compos
替docker-compose设定操作权限
chmod +x /usr/local/bin/docker-compose
确定是否有安装成功
docker-compose -v
查询docker-compose 有哪些服务
docker-compose -h
最後就是三个最常用的docker-compose 指令。
docker-compose up -d
docker-compose down
docker ps
只要利用docker ps 确认container皆有顺利运行的话就可利用Chrome打上localhost:8080或是127.0.0.1:8080即可确认服务成功运行了(8080port是因为Ningx设定的外部port为8080)。
这次的Docker介绍就到这边告一段落了,谢谢观看的各位,请记得按赞分享开启小铃铛,你的支持会让按赞数+1。
<<: 从 IT 技术面细说 Search Console 的 27 组数字 KPI (13) :网页体验 - 行动装置可用性
现在有不少的sensor传输都是用I2C协议在做传输的,在教学用I²C如何撰写前,我认为要先了解协议...
上一篇[我们的基因体时代-AI, Data和生物资讯 Day25- 再深一点:AnnotationH...
▉A.17 Information Security Aspects Of Business营运持续...
开始之前 既然 Load/Store 都写完了,就来讲讲 Memory 吧! 相信看到这边的读者在学...
接续上一篇的故事,阿明跟小美又经过了几次的对话与讨论,在便利贴专案中整理归纳了下列这几个关键字: C...