今天開始要來學習的是Docker compose時使用的YAML file的指令介紹跟格式。
昨天雖然決定今天要來實作Dockerfile,但是發現大多都是單純命令的使用or混雜shell等的使用,而不是各情境的命令使用方式,因此在了解完之後決定改來撰寫學習了compose file指令的文章。
不過有個可以介紹的是,Dokcer官方推薦在建立時使用alpine的image,特色在於其image大小不到5MB,因為它移除了大量不必要的套件,而image容量小建置速度自然快,不過這邊也有說如果要使用Python則不建議,有興趣這邊提供連結
如名,建置時的配置。
build包含以下幾種配置
build:
context: ./dir
# Dockerfile在當前路徑的dir資料夾裡
DOCKERFILE
用來當作備用Dockerfile的路徑
ARGS
如同Dockerfile的ARG可以用來當作變數使用
首先需要在Dockerfile做參數使用的設定
ARG param
RUN echo "ARGS TEST: $param"
再來從compose file設定數值
build:
context: ./dir
args:
param: 1
build:
context: ./dir
cache_from:
- alpine:latest
# 如例cache alpine的建置,如果有重複使用image的Dockerfile就可以更快被建置
也可以在build的時候用flag使用
$ docker build --cache-from=alpine:latest -t app/test .
LABELS
跟Dockerfile的LABELS同功能,標籤會被添加到之後建置完的image裡
NETWORK
作為最上層的網路配置管理,透過官方提供的例子就能了解,proxy、app以及db都有使用網路配置,而上層的networks則是統一管理的概念。
version: "3"
services:
proxy:
build: ./proxy
networks:
- frontend
app:
build: ./app
networks:
- frontend
- backend
db:
image: postgres
networks:
- backend
networks:
frontend:
# Use a custom driver
driver: custom-driver-1
backend:
# Use a custom driver which takes special options
driver: custom-driver-2
driver_opts:
foo: "1"
bar: "2"
/dev/shm
是一種共享內存的功能,可以讓Linux的程序能夠互相傳遞數據,假設A程序創建了一部分的內存,B程序可以透過共享訪問以增加處裡速度。build:
context: ./dir
shm_size: '1024kb'
# or
shm_size: 10000000
build:
context: ./dir
target: prod
Dockerfile內的prod就像這樣
FROM golang:1.7.3 AS prod
...
FROM alpine:latest
...
COPY --from=prod app/test .
今天學習完了實際應用Dokcerfile以及Docker compose file的build功能,看似compose file的命令有點多,明天會努力學習希望能寫到一半。
參考文獻:
docker官方文件