Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

DockerCon参加報告 (`docker build`が30倍以上速くなる話など)

19.181 Aufrufe

Veröffentlicht am

Docker Meetup Tokyo #24 https://dockerjp.connpass.com/event/93140/

Veröffentlicht in: Software
  • Dating direct: ❤❤❤ http://bit.ly/2Qu6Caa ❤❤❤
       Antworten 
    Sind Sie sicher, dass Sie …  Ja  Nein
    Ihre Nachricht erscheint hier
  • Follow the link, new dating source: ♥♥♥ http://bit.ly/2Qu6Caa ♥♥♥
       Antworten 
    Sind Sie sicher, dass Sie …  Ja  Nein
    Ihre Nachricht erscheint hier

DockerCon参加報告 (`docker build`が30倍以上速くなる話など)

  1. 1. Copyright©2018 NTT Corp. All Rights Reserved. NTT ソフトウェアイノベーションセンタ 須田 瑛大 DockerCon参加報告 (`docker build`が30倍以上速くなる話など) Docker Meetup Tokyo #24 (2018/07/19) https://slideshare.net/AkihiroSuda
  2. 2. 2 Copyright©2018 NTT Corp. All Rights Reserved. • コンテナ関連OSSのメンテナ(いわゆるコミッタ)を務めている • Docker Moby メンテナ (2016年11月~) • 2017年4月,OSSプロジェクトとしてのDockerはMobyに名前が変わった • 商用製品としてのDockerはMobyをベースとして開発されている • Moby BuildKitメンテナ (2017年夏 プロジェクト発足時~) • 次世代 `docker build` • CNCF containerdメンテナ (2017年9月~) • Kubernetesなどで利用できる次世代コンテナランタイム : ≒ : RHEL Fedora 自己紹介
  3. 3. 3 Copyright©2018 NTT Corp. All Rights Reserved. • 参加者数: 約5,000名 • 日本からは20名程度? • 参考: • DockerCon 17 US: 5,000名 • 同 EU: 2,500名 • 開催期間: 6/12-6/15 • 開催地: Moscone Center, San Francisco • DockerCon 2019 USも同じ会場の予定 (2019年4月末-5月初) • Docker本社から徒歩圏内 • 次回: 12/3-12/5 @ Barcelona 会議概要
  4. 4. 4 Copyright©2018 NTT Corp. All Rights Reserved. • BuildKit: https://github.com/moby/buildkit • 次世代`docker build` • https://t.co/aUKqQCVmXa • Docker Application Packages: https://github.com/docker/app • `docker-compose.yaml`をDocker Hubで共有できるようにするツール • https://dockercon2018.hubs.vidyard.com/watch/8Ux4S7ZeeWTcByUghGXmnr (54分ころ) • 何故か軽くしか触れられていない.. 紹介する発表
  5. 5. 5 Copyright©2018 NTT Corp. All Rights Reserved. • Dockerfileのキャッシュが効きにくい • DockerfileのN行目を書き換えると,N+1行目以降のキャッシュは破棄される • ユーザはDockerfileの命令の順序に気をつける必要がある • コンパイラやパッケージマネージャのキャッシュが保存されない • ~/.m2 (Maven), ~/.cache/go-build (Go), /var/cache/apt (apt) など 従来の`docker build`に対する不満 FROM debian EXPOSE 80 RUN apt update && apt install –y HEAVY-PACKAGES EXPOSEを書き換えるだけでRUNのキャッシュが効かなくなる
  6. 6. 6 Copyright©2018 NTT Corp. All Rights Reserved. • 並列実行できるはずの命令を,並列実行してくれない 従来の`docker build`に対する不満 FROM golang AS stage0 ... RUN go build –o /foo ... FROM clang AS stage1 ... RUN clang –o /bar ... FROM debian AS stage2 COPY --from=stage0 /foo /usr/local/bin/foo COPY --from=stage1 /bar /usr/local/bin/bar 0 2 1 各ステージの依存性は DAGとして表現できる
  7. 7. 7 Copyright©2018 NTT Corp. All Rights Reserved. • 並列実行できるはずの命令を,並列実行してくれない 従来の`docker build`に対する不満 FROM golang AS stage0 ... RUN go build –o /foo ... FROM clang AS stage1 ... RUN clang –o /bar ... FROM debian AS stage2 COPY --from=stage0 /foo /usr/local/bin/foo COPY --from=stage1 /bar /usr/local/bin/bar 0 2 1 0 1 2 シーケンシャルにしか 実行してくれない
  8. 8. 8 Copyright©2018 NTT Corp. All Rights Reserved. • プライベートなGitやS3などへのアクセスが困難 • `COPY`命令で鍵を置くのは危ない • ステージを分けるか `--squash` しないと鍵が漏れる • 環境変数を使うのも危ない 従来の`docker build`に対する不満 FROM ... COPY id_rsa ~/.ssh RUN git clone ssh://... RUN rm –f ~/.ssh/id_rsa rmしてもレイヤの tarからは消えない
  9. 9. 9 Copyright©2018 NTT Corp. All Rights Reserved. • DAG構造を備える中間言語であるLLBを用いる • 依存性を正確に表現できるので,キャッシュがよく効く • 命令を並列実行できる • LLBは主にDockerfileからコンパイルされる • Dockerfile以外の言語からのコンパイルも可能 BuildKit: 次世代 `docker build` コンパイル Dockerfile LLB DAG サードパーティ言語 docker-image://alpine Image git://foo/bar docker-image://gcc Run("apk add ..")Run("make") 3命令を同時に実行できる 2
  10. 10. 10 Copyright©2018 NTT Corp. All Rights Reserved. • DAGはマルチステージDockerfileを用いて記述できる BuildKit: 次世代 `docker build` FROM golang AS stage0 ... RUN go build –o /foo ... FROM clang AS stage1 ... RUN clang –o /bar ... FROM debian AS stage2 COPY --from=stage0 /foo /usr/local/bin/foo COPY --from=stage1 /bar /usr/local/bin/bar 0 2 1
  11. 11. 11 Copyright©2018 NTT Corp. All Rights Reserved. • DAGはマルチステージDockerfileを用いて記述できる BuildKit: 次世代 `docker build` FROM golang AS stage0 ... RUN go build –o /foo ... FROM clang AS stage1 ... RUN clang –o /bar ... FROM debian AS stage2 COPY --from=stage0 /foo /usr/local/bin/foo COPY --from=stage1 /bar /usr/local/bin/bar 0 2 1 https://t.co/aUKqQCVmXa より引用
  12. 12. 12 Copyright©2018 NTT Corp. All Rights Reserved. https://t.co/aUKqQCVmXa より引用
  13. 13. 13 Copyright©2018 NTT Corp. All Rights Reserved. https://t.co/aUKqQCVmXa より引用
  14. 14. 14 Copyright©2018 NTT Corp. All Rights Reserved. https://t.co/aUKqQCVmXa より引用
  15. 15. 15 Copyright©2018 NTT Corp. All Rights Reserved. • Dockerfileの最初の行に `# syntax = ...` を指定すると,非標準の命令 を利用できる • 例: `RUN --mount` • 独自の構文追加も可能 (APIをしゃべるコンテナイメージとして実装) BuildKitの新しいDockerfile構文 # syntax = tonistiigi/dockerfile:runmount20180610 ... RUN --mount=target=/root/.cache,type=cache go build コンパイラやパッケージマネージャのキャッシュディ レクトリを保持できる
  16. 16. 16 Copyright©2018 NTT Corp. All Rights Reserved. https://t.co/aUKqQCVmXa より引用
  17. 17. 17 Copyright©2018 NTT Corp. All Rights Reserved. • `RUN –-mount`は今のところキャッシュ用途にのみ利用可能 • キャッシュ以外の用途のサポートも計画中 • クライアント上のSSH agentに繋がるソケットを,コンテナ内にマウント • コンテナ内から安全にscpできる • S3のシークレットキーなどを安全にマウント BuildKitの新しいDockerfile構文
  18. 18. 18 Copyright©2018 NTT Corp. All Rights Reserved. • root権限なしで実行可能 • user namespaceを使うので,予め/etc/subuidを設定しておく必要がある • overlayfsは基本的には使えない • Ubuntuではカーネルにパッチを当てているので使える • 複数のアーキテクチャに対応したイメージをビルドできる (例:amd64+arm) • amd64上でarmの`RUN`命令を実行する場合は,QEMUのusermode emulationが使 われる • full system emulation (いわゆるVM) は不要 • https://asciinema.org/a/GYOx4B88r272HWrLTyFwo156s • 将来的には分散実行もサポート その他
  19. 19. 19 Copyright©2018 NTT Corp. All Rights Reserved. https://t.co/aUKqQCVmXa より引用
  20. 20. 20 Copyright©2018 NTT Corp. All Rights Reserved. • Docker v18.06に実験的に統合された • 本日7/19(日本時間)リリース • 備考: 従来は毎月リリースされていたが,次はv18.09,その次はv19.03で,以降は6ヶ 月毎のリリース予定.各リリースは7ヶ月間サポートされる. • コマンドラインは従来の `docker build` と同じ • クライアント側で `export DOCKER_BUILDKIT=1` すると有効になる BuildKitの使い方
  21. 21. 21 Copyright©2018 NTT Corp. All Rights Reserved. • `docker-compose.yaml`をDocker Hubで共有できるようにするツール • 環境に依存する部分はパラメータとして切り離されている • Helm パッケージの出力も可能 • ただしDocker EEやDocker for Mac/Winに含まれる,プロプラなモジュールに依存 • 2016年ころから示されていた"Distributed Application Bundle"構想 の後継と思われる Docker Application Packages
  22. 22. 25 Copyright©2018 NTT Corp. All Rights Reserved. • `docker-app render`: 変数を`docker-compose.yaml`に反映 • `docker-app push`: Appをレジストリにpush • rootfsの内容がyamlだけのイメージがpushされる • `docker-app deploy`: レジストリ上のAppをSwarmまたは Kubernetesにデプロイ • `docker-app helm`: Chartを出力 • 将来的には`docker` CLIに統合されると思われる Docker Application Packages

×