LoginSignup
14
6

More than 5 years have passed since last update.

Docker 17.XX 予想 (2017/03/22時点)

Last updated at Posted at 2017-03-22

TLDR

バージョン番号について

2017年3月,1.13.1から飛んで17.03.0がリリースされた.(実質1.13.2)
今後はEdge版が毎月,Stable版が3ヶ月毎にリリースされる.

次のEdge版は17.04,Stable版は17.06になる見込み.

image

(画像出典: https://blog.docker.com/2017/03/docker-enterprise-edition/)

17.04 に入ることが確定しているもの

17.04.0-CE RC1 リリースノートも参照: https://github.com/docker/docker/releases/tag/v17.04.0-ce-rc1

bind mount consistency (主にDocker for Mac向け)

bind mount (ホストのファイルシステムをコンテナ内にマウントする機能.docker run -v /foo:/bar)について,"consistency"を指定できるようになった.consistent, cached, delegatedの3種類.(e.g. docker run -v /foo:/bar:cached)

12倍近く速くなることがある.
https://gist.github.com/yallop/d4af9dd1bb33ae61d48adf86692cdf9e

performing many small writes (dd 100,000 1k blocks, write-only):
with a consistent shared directory: 22.7s
with preliminary delegated semantics: 1.9s (11.95×)

今のところDocker for Mac向け.将来的にはDocker for Windowsも対応するかもしれない.
Linuxではホストのファイルシステムがosxfsを経由せず,直接mount(2)されるので,関係ない.

--security-opt=no-new-privilegesのデフォルトでの有効化

/etc/docker/daemon.json{no-new-privileges: true}と書いておくと,全てのコンテナがデフォルトで--security-opt=no-new-privileges付きで起動する.

--security-opt=no-new-privileges自体は1.11から存在している.
--security-opt=no-new-privilegesの詳細は http://www.projectatomic.io/blog/2016/03/no-new-privs-docker/ を参照.

例えばsuidとかを無効化できる.

$ docker run -it --rm --user=1000  testnnp
Effective uid: 0
$ docker run -it --rm --user=1000 --security-opt=no-new-privileges testnnp
Effective uid: 1000

non-blockingなlogging

コンテナのloggingのモードとして,blockingnon-blockingを選べるようになった(--log-opt mode=non-blocking).

stdout/stderrがブロックしてコンテナが動けない問題が解消される.

docker service create --read-only ...

Swarm-modeタスクのrootfsを,強制的にread-onlyに出来る.
意図せずしてrootfs上にstateを持つことを避けられる.

topology-aware scheduling

https://github.com/docker/docker/pull/30725
https://github.com/docker/swarmkit/pull/1473
https://github.com/docker/swarmkit/pull/1512

Swarm-modeのタスクを,複数のDCやラックに均等にまたがるように配置できるようになる.

17.XX 予想

17.XXに近い将来入りそうなPRをいくつか紹介する.
確実に入ると決まったわけではないし,入るとしても仕様は変更される可能性があることに注意されたい.

FROM行のパラメータ化

ベースイメージのバージョンを,ビルド時に簡単に切り替えられる.

例えば,デフォルトではgolang:1.8をベースイメージとして指定しておき,

ARG GO_VERSION=1.8
FROM golang:${GO_VERSION}

ビルド時に任意のバージョン(例えばgolang:1.7)に切り替えたりできる.

$ docker build --build-arg GO_VERSION=1.7 .

コンパイラやソースを最終イメージに残さない

イメージにコンパイラやソースが残る問題が解決される.

例: (FROMが複数あるが,単一のDockerfile)

FROM golang:1.8 AS builder
COPY . /go/src/github.com/foo/bar
RUN go build -o /app --ldflags '-extldflags "-static"' github.com/foo/bar

FROM scratch
COPY --context=builder /app /app

最終的なイメージは,/appファイルだけを含み,Goコンパイラや,アプリのソースは含まない.busyboxさえ含まない.(もちろん必要に応じて含めてよい)

docker build --build-secret

gitのキーなどをdocker build時に/run/secretsに注入できるようになる.
multi-stage build (31257)と組み合わせると,秘密の資材を扱いやすくなりそう.

docker psが刺さらない

コンテナオブジェクトに対するロックのため,docker psを実行すると返ってこないことがよくある.

go-memdbを用いることで,ロックが減る見込み.

17.XX 予想 (未実装)

まだ実装に至ってはいないが,実装される可能性が高いと思われるもの.

新containerdの採用 (予想と言うか決定事項)

overlayfsなどのstorage driver及び,イメージのpull/push機能は,従来はDocker本体に実装されていたが,containerdへの移植が進んでいる.

containerdは,現時点ではDocker社が開発しているが,近々CNCFに正式に移管される.
https://github.com/docker/containerd
https://blog.docker.com/2017/03/docker-donates-containerd-to-cncf/

containerdは,Kubernetesからも(Docker APIを経由せずに)Container Runtime Interface (CRI)を通じて利用可能となる予定.

話が脱線するが,CRIに対応したランタイムとしては,以下のようなものがある.

CRIランタイム 更に下位のランタイム
containerd runc
cri-o runc
dockershim Docker(を経由してcontainerdを経由してrunc)
rktlet rkt
frakti hyperdを経由してKVMなど
virtlet libvirtを経由してKVMなど

Container Storage Interface (CSI)

Docker, Kubernetes, Mesosphere, Cloud Foundry関係者を中心に,ストレージ用の新しい標準APIの策定が進められている.

従来のDocker Volumes APIを置き換えるものとなりそう.

14
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
6