當每個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。