Docker 一日工作坊Part3

Michael.K

關於第三階段

  • 最佳化你的Docker Image
    • size optimized
    • resources optimized
    • s6-overlay
  • 保護你的docker image

Size Optimized

目前主流兩種方式

  • docker-slim
  • alpine based image

什麼是docker slim

  • 不會改變docker image內的所有資料
  • 壓縮比可以到30倍
docker-slim build --http-probe my/sample-node-app

docker-slim不適合的場景

  • stateful volume
  • 使用alpine的前提下

Resource Optimized

對image限制

  • cpus
  • cpu-period
  • cpu-quota
  • memory
  • memory-swap

新問題

複習docker的特性

  • 將OS做為Application化
  • 所有container只能允許一個指令執行
  • 預設權限都會是root

假定情況

  • 擁有同樣的code base
  • 權限問題(mysql, nginx)

s6-overlay

什麼是s6-overlay

  • 類似supervisord
  • 一個常駐型daemon thread
  • 擁有一系列unix liked系統的工具
FROM ubuntu
ADD https://github.com/just-containers \
    /s6-overlay/releases/download/v1.21.7.0 \
    /s6-overlay-amd64.tar.gz /tmp/
RUN tar xzf /tmp/s6-overlay-amd64.tar.gz -C /
RUN apt-get update && \
    apt-get install -y nginx && \
    echo "daemon off;" >> /etc/nginx/nginx.conf
ENTRYPOINT ["/init"]
CMD ["nginx"]
docker-host $ docker build -t demo .
docker-host $ docker run --name s6demo -d -p 80:80 demo
docker-host $ docker top s6demo acxf
PID                 TTY                 STAT                TIME                COMMAND
3788                ?                   Ss                  0:00                \_ s6-svscan
3827                ?                   S                   0:00                | \_ foreground
3834                ?                   S                   0:00                | | \_ foreground
3879                ?                   S                   0:00                | | \_ nginx
3880                ?                   S                   0:00                | | \_ nginx
3881                ?                   S                   0:00                | | \_ nginx
3882                ?                   S                   0:00                | | \_ nginx
3883                ?                   S                   0:00                | | \_ nginx
3828                ?                   S                   0:00                | \_ s6-supervise
3829                ?                   S                   0:00                | \_ s6-supervise
3830                ?                   Ss                  0:00                | \_ s6-log

商業來說

docker適合做什麼

  • 方便部署
  • 可攜性

關於安全性問題

大前提: code不安全

falco

什麼是falco

  • 由sysdig所開發
  • 是系統內常駐daemon
  • docker檢測工具
program_output:
  enabled: true
  keep_alive: false
  program: mail -s "Falco Notification" someone@example.com

更多設定相關

docker slim也可以

seccomp

  • Linux上的安全元件
  • 可以限制呼叫指令

實際示範

Made with Slides.com