Docker v1.13.0 が公開されたので、Barge で利用する方法をご紹介。
Barge の起動
VirtualBox と Vagrant を使って簡単にお試しする方法です。
$ vagrant box add ailispaw/barge
$ vagrant init -m ailispaw/barge
$ vagrant up
Docker のバージョンの切り替え
Barge VM にログインして、sudo /etc/init.d/docker restart v1.13.0
と打つだけで切り替わります。
$ vagrant ssh
Welcome to Barge 2.3.4, Docker version 1.10.3, build 20f81dd
[bargee@barge ~]$ sudo /etc/init.d/docker restart v1.13.0
docker[426]: Loading /etc/default/docker
WARNING: Possible Forward-Incompatibility of libnetwork
Once you upgrade Docker to v1.12 or newer, if you downgrade back,
you may need to initialize /var/lib/docker/network/files/local-kv.db.
Downloading v1.13.0 ...
docker[426]: Stopping Docker daemon
docker[426]: Setting ulimit 1048576
docker[426]: DOCKER_RAMDISK=
docker[426]: Docker version 1.13.0, build 49bf474
docker[426]: Starting Docker daemon -D -s overlay -g "/var/lib/docker" -H unix:// -H tcp://0.0.0.0:2375 --userland-proxy=false
[bargee@barge ~]$ docker info
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 1.13.0
Storage Driver: overlay
Backing Filesystem: extfs
Supports d_type: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host macvlan null overlay
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 03e5862ec0d8d3b3f750e19fca3ee367e13c090e
runc version: 2f7393a47307a16f8cee44a37b262e8b81021e3e
init version: 949e6fa
Security Options:
seccomp
Profile: default
Kernel Version: 4.4.42-barge
Operating System: Barge 2.3.4
OSType: linux
Architecture: x86_64
CPUs: 1
Total Memory: 999.2 MiB
Name: barge-test
ID: X6XR:UCA3:B6TZ:JZYJ:Y7PM:YWSP:6Z3I:ERDV:QA22:JEO3:HRBG:5G7B
Docker Root Dir: /mnt/data/var/lib/docker
Debug Mode (client): false
Debug Mode (server): true
File Descriptors: 14
Goroutines: 22
System Time: 2017-01-19T04:55:35.7986026Z
EventsListeners: 0
Registry: https://index.docker.io/v1/
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false
experimental 機能のアクティベイト
v1.13.0 から experimental のバイナリが統合されて Docker デーモンのパラメタで切り替えられるようになりました。
[bargee@barge ~]$ cat /etc/default/docker
# DOCKER_STORAGE="overlay"
# DOCKER_DIR="/var/lib/docker"
# DOCKER_HOST="-H unix://"
DOCKER_HOST="-H unix:// -H tcp://0.0.0.0:2375"
# DOCKER_EXTRA_ARGS="--userland-proxy=false"
# DOCKER_ULIMITS=1048576
# DOCKER_LOGFILE="/var/log/docker/docker.log"
# DOCKER_TIMEOUT=5
この DOCKER_EXTRA_ARGS
に --experimental
を加えてリスタートさせます。
(ちなみに、コメント行はデフォルト値を表しています。)
[bargee@barge ~]$ sudo vi /etc/default/docker
# DOCKER_STORAGE="overlay"
# DOCKER_DIR="/var/lib/docker"
# DOCKER_HOST="-H unix://"
DOCKER_HOST="-H unix:// -H tcp://0.0.0.0:2375"
# DOCKER_EXTRA_ARGS="--userland-proxy=false"
DOCKER_EXTRA_ARGS="--userland-proxy=false --experimental"
# DOCKER_ULIMITS=1048576
# DOCKER_LOGFILE="/var/log/docker/docker.log"
# DOCKER_TIMEOUT=5
[bargee@barge ~]$ sudo /etc/init.d/docker restart
docker[623]: Loading /etc/default/docker
docker[623]: Stopping Docker daemon
docker[623]: Setting ulimit 1048576
docker[623]: DOCKER_RAMDISK=
docker[623]: Docker version 1.13.0, build 49bf474
docker[623]: Starting Docker daemon -D -s overlay -g "/var/lib/docker" -H unix:// -H tcp://0.0.0.0:2375 --userland-proxy=false --experimental
[bargee@barge ~]$ docker info
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 1.13.0
Storage Driver: overlay
Backing Filesystem: extfs
Supports d_type: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 03e5862ec0d8d3b3f750e19fca3ee367e13c090e
runc version: 2f7393a47307a16f8cee44a37b262e8b81021e3e
init version: 949e6fa
Security Options:
seccomp
Profile: default
Kernel Version: 4.4.42-barge
Operating System: Barge 2.3.4
OSType: linux
Architecture: x86_64
CPUs: 1
Total Memory: 999.2 MiB
Name: barge-test
ID: X6XR:UCA3:B6TZ:JZYJ:Y7PM:YWSP:6Z3I:ERDV:QA22:JEO3:HRBG:5G7B
Docker Root Dir: /mnt/data/var/lib/docker
Debug Mode (client): false
Debug Mode (server): true
File Descriptors: 14
Goroutines: 22
System Time: 2017-01-19T04:57:31.104280608Z
EventsListeners: 0
Registry: https://index.docker.io/v1/
Experimental: true
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false
Experimental: true
になりました。
以上になります。
追記:Checkpoint & Restore
折角なので、experimental 機能の Checkpoint & Restore を使ってみましょう。
https://github.com/docker/docker/blob/master/experimental/checkpoint-restore.md
下準備
実行には CRIU が必要なので、criu
パッケージをインストールします。
[bargee@barge ~]$ sudo pkg install criu
これで、docker checkpoint
コマンドが使えるはずですが、checkpoint 作成時に binfmt_misc
のマウントを要求するエラーがありました。
Docker v1.13.0-rc6 ではエラーが無くなっていました。以下は必要無くなりました。
[bargee@barge ~]$ sudo mount binfmt_misc -t binfmt_misc /proc/sys/fs/binfmt_misc
コンテナの起動
公式ドキュメントにならって単純なコンテナを起動させます。
[bargee@barge ~]$ docker run --name cr -d --init busybox /bin/sh -c 'i=0; while true; do echo $i; i=$(expr $i + 1); sleep 1; done'
[bargee@barge ~]$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
104a30437d06 busybox "/bin/sh -c 'i=0; ..." 4 seconds ago Up 3 seconds cr
checkpoiint
[bargee@barge ~]$ docker checkpoint create cr test
[bargee@barge ~]$ docker logs cr
0
1
2
3
4
5
6
7
8
9
10
[bargee@barge ~]$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
104a30437d06 busybox "/bin/sh -c 'i=0; ..." 2 minutes ago Exited (137) About a minute ago cr
上手く行ったような行ってないような。。。
カウンタは 10
で止まりました。
[bargee@barge ~]$ docker checkpoint ls cr
CHECKPOINT NAME
test
docker checkpoint
コマンドは、コンテナ毎に NAME(ID) で管理するようです。
restore
[bargee@barge ~]$ docker start --checkpoint test cr
[bargee@barge ~]$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
104a30437d06 busybox "/bin/sh -c 'i=0; ..." 4 minutes ago Up 3 seconds cr
[bargee@barge ~]$ docker logs cr
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
おお〜生き返ったw
ちゃんと 11
から再開しています。
ちなみに、--checkpoint
なしの docker start
だと、
[bargee@barge ~]$ docker start cr
cr
[bargee@barge ~]$ docker logs cr
0
1
2
3
4
5
6
7
8
9
10
0
1
2
3
4
5
0
からの再起動になりました。