Docker 20.10.0についてまとめる

はじめに

だいぶ前ですがDokcer 20.10.0がリリースされています。かねてからやろうと思ってやってなかったのですが、リリースノートを眺めて、気になったところをかいつまんでまとめてみようと思います。
ものによっては動かしてみようかと。

やっていく

環境

$ uname -srvmpio
Linux 5.4.0-70-generic #78-Ubuntu SMP Fri Mar 19 13:29:52 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

$ lsb_release -a
LSB Version:    core-11.1.0ubuntu2-noarch:security-11.1.0ubuntu2-noarch
Distributor ID: Ubuntu
Description:    Ubuntu 20.04.2 LTS
Release:    20.04
Codename:   focal


$ docker version
Client: Docker Engine - Community
 Version:           20.10.5
 API version:       1.41
 Go version:        go1.13.15
 Git commit:        55c4c88
 Built:             Tue Mar  2 20:18:20 2021
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          20.10.5
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.13.15
  Git commit:       363e9a8
  Built:            Tue Mar  2 20:16:15 2021
  OS/Arch:          linux/amd64
  Experimental:     true
 containerd:
  Version:          1.4.4
  GitCommit:        05f951a3781f4f2c1911b05e61c160e9c30eaa8e
 runc:
  Version:          1.0.0-rc93
  GitCommit:        12644e614e25b05da6fd08a38ffa0cfe1903fdec
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

今回、使用するDockerは20.10.5ですが、20.10.0の変更点のみをまとめていこうと思います。

API

GET /eventspruneのイベントを取得できる

例えば、以下のようにcurl --unix-socket /var/run/docker.sock http:/v1.41/eventsにアクセスした状態で、docker system pruneコマンドを実行すると、以下のようにイベントを取得することができます。

$ curl --unix-socket /var/run/docker.sock http:/v1.41/events
{"status":"prune","Type":"container","Action":"prune","Actor":{"ID":"","Attributes":{"reclaimed":"0"}},"scope":"local","time":1618107008,"timeNano":1618107008756813704}
{"Type":"network","Action":"prune","Actor":{"ID":"","Attributes":{"reclaimed":"0"}},"scope":"local","time":1618107008,"timeNano":1618107008758330171}
{"status":"prune","Type":"image","Action":"prune","Actor":{"ID":"","Attributes":{"reclaimed":"0"}},"scope":"local","time":1618107008,"timeNano":1618107008798691967}
{"Type":"builder","Action":"prune","Actor":{"ID":"","Attributes":{"reclaimed":"0"}},"scope":"local","time":1618107008,"timeNano":1618107008866211129}

このエンドポイントはcontainernetworkvolumeimageそれぞれに対してreclaimed(回収したバイト数)を取得することができます。

GET /infoに対する変更点

以下のような変更点があります。

  • OSのVersionを取得できるようになった
  • DefaultAddressPoolsを取得できるようになった

Builder

#syntaxなしで、RUN --mountオプションを利用できるようになった

もともとBuildKitのRUN --mount拡張機能を利用したい場合は``のようなコメント行をDockerfileの先頭に追加する必要がありましたが不要になりました。

ARGENVのように複数の値を受け付けるように変更

ARGコマンドは変数を定義してビルド時に--build-arg <varname>=<value>のフラグを利用することによって引数を渡すことができます。このARGコマンドが今回の変更でENVと同じように複数定義を一行でできるように修正さています。

ADDコマンドに--chownパラメーター拡張を渡せるようになった

もともとADD/COPYコマンドでは--chownフラグを指定できファイルオーナーを設定できますしかし、ADDコマンドではARGENVで定義された変数からの指定ができないようになってました。しかし今回の修正でそれが行えるようになったようです。

Clientクライアントでは以下のような修正が行われています

  • -a/--all-tagsフラグですべてのタグをpushできるようになった
  • Kubernetesusername/password認証をサポート
  • runコマンドとcreateコマンドに--pull=missing|always|neverフラグを追加
  • docker exec--env-fileフラグがついかされ環境変数を渡せるようになった
  • log-driverが追加されPrettyオプションが利用可能になった
  • --cgroupnsフラグでネームスペースを指定できようになった
  • docker manifest rmローカルストレージのマニフェストリストドラフト(設定やレイヤーの情報を保持)を削除
  • docker infodocker versionにコンテキストの情報を出力するように変更

Runtime

ランタイムでは以下のような修正が行われています。

  • cgroup2のサポート
  • cgroup2がデフォルトでsystemdのcgroupを利用するようになった
  • 新しいストレージドライバfuse-overlayfs
  • containerdのバイナリを1.4.3にアップデート
  • docker pushのデフォルトがすべてのタグのPushからlatestに変更
  • イメージをPullする際のコネクションロスでリコネクトする回数を指定できるように変更
  • コンテナスタートアップのために、最低のメモリリミットを6Mへ変更。

Networking

  • host.docker.internalLinuxでのサポート

最後の方力尽きましたが、すべての変更に関してはこちらをご確認ください