Submit Search
DockerCon参加報告 (`docker build`が30倍以上速くなる話など)
•
Download as PPTX, PDF
•
26 likes
•
20,726 views
A
Akihiro Suda
Follow
Docker Meetup Tokyo #24 https://dockerjp.connpass.com/event/93140/
Read less
Read more
1 of 25
Download now
Downloaded 37 times
More Related Content
DockerCon参加報告 (`docker build`が30倍以上速くなる話など)
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 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 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 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 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 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 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 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 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 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 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 Copyright©2018 NTT Corp.
All Rights Reserved. https://t.co/aUKqQCVmXa より引用
13.
13 Copyright©2018 NTT Corp.
All Rights Reserved. https://t.co/aUKqQCVmXa より引用
14.
14 Copyright©2018 NTT Corp.
All Rights Reserved. https://t.co/aUKqQCVmXa より引用
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 Copyright©2018 NTT Corp.
All Rights Reserved. https://t.co/aUKqQCVmXa より引用
17.
17 Copyright©2018 NTT Corp.
All Rights Reserved. • `RUN –-mount`は今のところキャッシュ用途にのみ利用可能 • キャッシュ以外の用途のサポートも計画中 • クライアント上のSSH agentに繋がるソケットを,コンテナ内にマウント • コンテナ内から安全にscpできる • S3のシークレットキーなどを安全にマウント BuildKitの新しいDockerfile構文
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 Copyright©2018 NTT Corp.
All Rights Reserved. https://t.co/aUKqQCVmXa より引用
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 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
25.
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
Download