1. 1
Docker 17.06 Updates
Engineer / Technology Evangelist, SAKURA Internet, Inc.
@zembutsu 前佛 雅人 ZEMBUTSU Masahito
2017年7月19日(水) JAWS-UG 横浜 #jawsug
What’s new in new release
2. 2
Docker CE 17.06 stable の何が新しいの?
バージョン表記と名前
Community Edition / Edge and Stable
マルチステージ・ビルドと引数
Multi-stage builds support and build-time args
メトリクスとログの取得
Engine’s Metrics and service log
--volume オプション
mount type=bind
Swarmモード機能拡張
Swarm mode enhancement
ホスト用DNS名
Experimental DNS Name for the Host
for
client
Docker v1.13.1(17.03)以降の主な変更点をまとめました。
利用者サイドで大きな影響が考えられるのは、このあたりです。
4. “Docker allows you to package an application
with all of its dependencies into a standardized
unit for software development.”
www.docker.com
全ての依存関係をパッケージ化して、コンテナとして動かす
4
そもそもDocker(ドッカー)が登場した背景は、こちらです。2013年のPythonカンファレンスUSのライトニングトークで発表。
目的は、依存関係(関連するライブラリ、ソースコード、設定ファイル、ミドルウェア)をまとめて、簡単に動かせるように。
5. “Docker allows you to package an application
with all of its dependencies into a standardized
unit for software development.”
www.docker.com
全ての依存関係をパッケージ化して、コンテナとして動かす
5
なぜ、このような考えが必要に至ったのでしょうか?
39. 39
Docker CE 17.06 stable の何が新しいの?
バージョン表記と名前
Community Edition / Edge and Stable
マルチステージ・ビルドと引数
Multi-stage builds support and build-time args
メトリクスとログの取得
Engine’s Metrics and service log
--volume オプション
mount type=bind
Swarmモード機能拡張
Swarm mode enhancement
ホスト用DNS名
Experimental DNS Name for the Host
for
client
それでは、改めて変更点についてみていきましょう。
48. 48
マルチステージ・ビルド
multi-stage builds
1つの Dockerfile で複数の
イメージ(中間イメージ)を作成、
ASで名前付けし、必要なバイナリ等
のみ最終イメージに入れられる
開発段階のイメージと、実行時の
イメージを分けることで、イメージ
容量を小さくできる
これは何?
どう活用?
FROM <image>:<tag> AS A
RUN ...
FROM <image>:<tag> AS B
RUN ...
FROM alpine
COPY --from=A /<dir> .
COPY --from=B <dir2>/<file> .
ビルダーの名前を AS で定義
省略時は –from=0 のように
指定可能
注目すべきはこちらです。これまでもやろうと思えばできたのですが、1つの Dockerfile で扱えるようになったのが
ポイントです。目的は容量を小さくするため。より小さなイメージで、移動やCI/CDも速くしたい。
Dockerfile
50. 50
マルチステージ・ビルド
multi-stage builds
1 2
3
4
AS “A”
AS “B”
COPY --from
必要なものだけ
コピー可能
docker build --target=B
docker build --target=A
複数の FROM で AS を指定しておけば、「--target」指定で、そこからビルドさせることもできますし、
「--from」を使ってデータを参照可能になったところも大きいです。うまく活用できれば、ビルド時間の短縮に役立つでしょう。
51. 51
ビルド時の引数にFROMが対応
Allow using build-time args (ARG) in FROM
Dockerfile の中でビルド時に変数
を使う機能があり、FROM にも対応
した
複数イメージ(タグ)の動的な作成、
マルチステージ・ビルドとの併用で
構築時間の短縮・効率化
これは何?
どう活用?
ARG TAG=latest
FROM centos:${TAG}
Dockerfile デフォルト値の指定を忘れずに
そして地味にもう1つ。FROMでタグが使えるようになりました(従来は指定できませんでした)。
これにより、開発時のイメージ切り替えも、割とスムーズ委なります。
52. 52
ビルド時の引数にFROMが対応
Allow using build-time args (ARG) in FROM
ARG TAG=latest
FROM centos:${TAG}
$ docker image build --build-arg TAG=6 .
Sending build context to Docker daemon 2.048kB
Step 1/2 : ARG TAG=latest
--->
Step 2/2 : FROM centos:${TAG}
6: Pulling from library/centos
8b04204cfecd: Pull complete
Digest:
sha256:921219d7d53186068ca5043bf6d8922ac7646562b61478dd7f
e503f2fac45290
Status: Downloaded newer image for centos:6
---> 3e32556ae4ba
Successfully built 3e32556ae4ba
$ docker image build --build-arg TAG=7 .
Sending build context to Docker daemon 2.048kB
Step 1/2 : ARG TAG=latest
--->
Step 2/2 : FROM centos:${TAG}
7: Pulling from library/centos
7b6bb4652a1b: Pull complete
Digest:
sha256:c1010e2fe2b635822d99a096b1f4184becf5d1c98707cbccae
00be663a9b9131
Status: Downloaded newer image for centos:7
---> 36540f359ca3
Successfully built 36540f359ca3
「docker build –build-arg」でタグを指定しておけば、Dockerfileを編集したり、複数用意しなくても、
複数バージョンのイメージを選択したり、複数バージョンのタグを持つイメージ生成も容易です。
Dockerfile
53. 53
Alpine Linux
https://alpinelinux.org/
$ docker images ls
REPOSITORY TAG IMAGE ID CREATED SIZE
alpine latest a41a7446062d 11 days ago 3.96MB
そして、今年に入ってDocker公式イメージで「alpine」のタグ(文字)を頻繁に見るようになってきましたね。
魅力は、たった4MBでLinuxが動くところ。一般的なディストリビューションであれば100MB軽く超えてしまいますので・・・
60. “Docker allows you to package an application
with all of its dependencies into a standardized
unit for software development.”
www.docker.com
60
全ての依存関係をパッケージ化して、コンテナとして動かす
これって、Dockerの目指す所から離れています。
簡単に実行するのが目的だったのに・・・
61. 61
“Fast, isolated development environments
using Docker”
www.fig.sh
そこで Fig (フィグ)、イチジクですね、というツールが登場しました。
複数のコンテナ群をまとめて管理しようという、コマンドラインツール。
72. 72
$ docker stack deploy -c docker-compose.yml web
Creating service web_web
$ docker stack ps web
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE
ERROR PORTS
uhm1xxq1u70w web_web.1 zembutsu/docker-sample-nginx:latest frontend-01 Running Running 45
seconds ago
ccmokdadpjqx web_web.2 zembutsu/docker-sample-nginx:latest frontend-02 Running Running 28
seconds ago
cflckriidpt0 web_web.3 zembutsu/docker-sample-nginx:latest frontend-03 Running Running 33
seconds ago
$ docker stack services web
ID NAME MODE REPLICAS IMAGE PORTS
yunncblhngu6 web_web replicated 3/3 zembutsu/docker-sample-nginx:latest *:80->80/tcp
= docker service ps web
= docker service ls
swarm modeでは「docker service」コマンドでサービス群を管理していました。
同様に、docker deploy コマンドを使ったあとは互換性のある「docker stack」コマンドでサービス群を管理します。
85. Docker CE 17.06 stable の何が新しいの?
バージョン表記と名前
Community Edition / Edge and Stable
マルチステージ・ビルドと引数
Multi-stage builds support and build-time args
メトリクスとログの取得
Engine’s Metrics and service log
--volume オプション
mount type=bind
Swarmモード機能拡張
Swarm mode enhancement
ホスト用DNS名
Experimental DNS Name for the Host
for
client
他にも細かく追加された機能や変わっている所があります。
詳しくは、リリースノート https://github.com/docker/docker-ce/releases をご覧ください。
87. References
Announcing Docker 17.06 Community Edition (CE) - Docker Blog
https://blog.docker.com/2017/06/announcing-docker-17-06-community-edition-ce/
Docker CE release notes | Docker Documentation
https://docs.docker.com/release-notes/docker-ce/
What’s New in Docker - Victor Vieux, Docker
https://www.slideshare.net/Docker/whats-new-in-docker-victor-vieux-docker