Docker Platform Update

表題の件。新しいversionがリリースされたのでUpdateしておく。

■ 環境

  • Docker 1.10.3
  • Docker Machine 0.6.0
  • Docker Compose 1.6.2
  • Mac OSX El Capitan

■ Homebrew

$ brew update
$ brew upgrade docker docker-machine docker-compose 

それぞれ下記versionにupgradeされた。

  • docker 1.11.0
  • docker-machine 0.7.0
  • docker-compose 1.7.0

■ 稼働中のDockerMachine

こちらもUpgradeする。

$ docker-machine upgrade local

下記のようになった。

$ docker-machine ls
NAME        ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER    ERRORS
local       *        virtualbox   Running   tcp://192.168.99.100:2376           v1.11.0
$
$ docker version
Client:
 Version:      1.11.0
 API version:  1.23
 Go version:   go1.6.1
 Git commit:   4dc5990
 Built:        Thu Apr 14 00:24:43 UTC 2016
 OS/Arch:      darwin/amd64

Server:
 Version:      1.11.0
 API version:  1.23
 Go version:   go1.5.4
 Git commit:   4dc5990
 Built:        Wed Apr 13 19:36:04 2016
 OS/Arch:      linux/amd64
$

以上。

■ 関連

Composeで作成されるネットワーク

Dockerにおいて表題の件についてメモ。

■ 環境

  • Docker 1.10.3
  • Docker Machine 0.6.0
  • Docker Compsoe 1.6.2
  • Mac OSX El Capitan

■ ネットワーク

Composeで起動したコンテナに見慣れないログが出ていた。

$ docker-compose up -d
Creating network "beat_default" with the default driver
Creating elasticsearch
Creating kibana
$ docker network ls

`docker-compose.yml`ではネットワークの設定を何もしていないのだが、ネットワークを勝手に作成しているようだ。またネットワークの名称は作業ディレクトリに”_default“が付けられている。

$ docker network ls
NETWORK ID          NAME                DRIVER
57690bbfada1        host                host
beed7829864c        beat_default        bridge
1460bebe2d7f        bridge              bridge
329123ebfee2        none                null
$

作成したコンテナは本当に作成されたネットワークにいるのだろうか?確認。

$ docker network inspect beat_default
[
    {
        "Name": "beat_default",
        "Id": "beed7829864c44191dc8f1a7c89c8ec54a82e9076859ed06513707f22b1325ae",
        "Scope": "local",
        "Driver": "bridge",
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.18.0.0/16",
                    "Gateway": "172.18.0.1/16"
                }
            ]
        },
        "Containers": {
            "7fd67d9c5f0b45699a8f484591cbba5dadbbcbb39e14544c876e4ff79cf62966": {
                "Name": "elasticsearch",
                "EndpointID": "d2d48ccc63a24300121c7e52b3aee0b6092f06f4bc197c09b66bad8987d65879",
                "MacAddress": "02:42:ac:12:00:02",
                "IPv4Address": "172.18.0.2/16",
                "IPv6Address": ""
            },
            "966a2efd4730420f0aecb21ff50dbb12111dbf0815aef817f5f3ea8252825a27": {
                "Name": "kibana",
                "EndpointID": "40aa21617581b7fea4bc7131ef7cdb6440ba59d51d94347ccc06f2fc4a310d4c",
                "MacAddress": "02:42:ac:12:00:03",
                "IPv4Address": "172.18.0.3/16",
                "IPv6Address": ""
            }
        },
        "Options": {}
    }
]
$

確かに2つのコンテナがこのネットワーク上にあるようだ。ということは、ネットワーク設定を特に指定せずに上げたコンテナからのアクセスはできないのだろう。確認。

$ docker run -ti --rm centos:7 bash
[root@6f62b52fef18 /]# cat /etc/hosts
127.0.0.1    localhost
::1    localhost ip6-localhost ip6-loopback
fe00::0    ip6-localnet
ff00::0    ip6-mcastprefix
ff02::1    ip6-allnodes
ff02::2    ip6-allrouters
172.17.0.3    6f62b52fef18
[root@6f62b52fef18 /]# ping 172.18.0.2
PING 172.18.0.2 (172.18.0.2) 56(84) bytes of data.
^C
--- 172.18.0.2 ping statistics ---
4 packets transmitted, 0 received, 100% packet loss, time 3015ms

[root@6f62b52fef18 /]# ping 172.18.0.3
PING 172.18.0.3 (172.18.0.3) 56(84) bytes of data.
^C
--- 172.18.0.3 ping statistics ---
4 packets transmitted, 0 received, 100% packet loss, time 3007ms

[root@6f62b52fef18 /]#

サブネットが異なる。Composeで起動したコンテナは”172.18.0.0/16“のネットワークに接続されているが、何もネットワークの指定をしないでコマンドで起動したコンテナは、デフォルトの”bridge“ネットワークに起動されている。こちらは”172.17.0.0/16“のネットワークのようだ。

Composeで稼働させたコンテナ群でのみアクセス可能なようである。もちろん後からネットワークの接続を繋げることも可能なはずである。

以上。

docker-compose.ymlをversion2に

表題の通り。

■ 環境

  • Mac OSX El Capitan
  • Docker 1.10.2
  • Docker Machine 0.6.0
  • Docker Compose 1.6.2

■ Compose 1.6.2

Docker Composeを”1.6.2“にupgradeした。内容を確認していたところ、設定ファイルである”docker-compose.yml“の”version2“いうのがあるらしいので確認。Dockerは”1.10.0“系以上、Composeは”1.6.0“以上が対応しているそうである。

以前のエントリの内容を確認すると下記のようである。

$ docker-compose config
networks: {}
services:
  elasticsearch:
    container_name: elasticsearch
    image: elasticsearch
    ports:
    - 9200:9200
  kibana:
    container_name: kibana
    image: kibana
    links:
    - elasticsearch:elasticsearch
    ports:
    - 5601:5601
version: '1'
volumes: {}

$

現在は”version2“で書き方が少し変わっているようである。下記を参照した。

Conpose file reference > Versioning

これで以前の”Elasticsearch + Kibana“の”docker-compose.yml“を書き換えてみた。と言っても内容はたいしたことがないので単純な変換だけである。

version: '2'
services:
  elasticsearch:
    image: elasticsearch
    container_name: elasticsearch
    ports:
      - 9200:9200
  kibana:
    image: kibana
    container_name: kibana
    links:
      - elasticsearch:elasticsearch
    ports:
      - 5601:5601

書き方が正しいかは`config`で確認できるであろう。

$ docker-compose config
networks: {}
services:
  elasticsearch:
    container_name: elasticsearch
    image: elasticsearch
    ports:
    - 9200:9200
  kibana:
    container_name: kibana
    image: kibana
    links:
    - elasticsearch:elasticsearch
    ports:
    - 5601:5601
version: '2.0'
volumes: {}

$

問題なさそうである。

以上。

■ 関連

docker-compose pause/unpause

表題のコマンドについて試してみる。

■ 環境

  • Mac OSX El Capitan
  • Docker 1.10.2
  • Docker Machine 0.6.0
  • Docker Compose 1.6.0

■ pause

`docker pause`を”docker-compose.yml“で設定しているコンテナに対して行うものである。そもそも`pause`は何をしているのか、という疑問には下記のヘルプ。

$ docker pause -h

Usage:    docker pause [OPTIONS] CONTAINER [CONTAINER...]

Pause all processes within a container

  --help             Print usage
$

コンテナを一時的に停止(suspend)させるものである。”SIGSTOP“シグナルが与えられているようである。

$ docker-compose pause -h
Pause services.

Usage: pause [SERVICE...]
$

実際に行ってみる。対象のコンテナ群はいつも通りの”Elasticsearch + Kibana“である。

$ docker-compose pause
Pausing elasticsearch ... done
Pausing kibana ... done
$
$ docker-compose ps
    Name                   Command               State                 Ports
------------------------------------------------------------------------------------------
elasticsearch   /docker-entrypoint.sh elas ...   Paused   0.0.0.0:9200->9200/tcp, 9300/tcp
kibana          /docker-entrypoint.sh kibana     Paused   0.0.0.0:5601->5601/tcp
$
$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                  PORTS                              NAMES
7654ad8f188f        kibana              "/docker-entrypoint.s"   7 minutes ago       Up 7 minutes (Paused)   0.0.0.0:5601->5601/tcp             kibana
940da79434bd        elasticsearch       "/docker-entrypoint.s"   7 minutes ago       Up 7 minutes (Paused)   0.0.0.0:9200->9200/tcp, 9300/tcp   elasticsearch
$

■ unpause

`pause`で一時的に停止しているコンテナを再開させる。

$ docker-compose unpause
Unpausing kibana ... done
Unpausing elasticsearch ... done
$
$ docker-compose ps
    Name                   Command               State                Ports
-----------------------------------------------------------------------------------------
elasticsearch   /docker-entrypoint.sh elas ...   Up      0.0.0.0:9200->9200/tcp, 9300/tcp
kibana          /docker-entrypoint.sh kibana     Up      0.0.0.0:5601->5601/tcp
$
$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                              NAMES
7654ad8f188f        kibana              "/docker-entrypoint.s"   8 minutes ago       Up 8 minutes        0.0.0.0:5601->5601/tcp             kibana
940da79434bd        elasticsearch       "/docker-entrypoint.s"   9 minutes ago       Up 8 minutes        0.0.0.0:9200->9200/tcp, 9300/tcp   elasticsearch
$

今までは一時的に不要になったものを`stop`して置いておいたりしたのだが、今後は`pause`をしておいてみることにする。

ちなみに`unpause`していない状態(“STATUS“が”Paused“)で`start`をしてもコンテナは開始されないし、`down`で停止と削除をしようとしたら下記のようにエラーとなった。

$ docker-compose down
Stopping kibana ... error
Stopping elasticsearch ... error

ERROR: for elasticsearch  Cannot stop container 940da79434bdb050056405ab28565c1f1c52c04727a5631728934f1b00c10106: unpausecontainer: Container 940da79434bdb050056405ab28565c1f1c52c04727a5631728934f1b00c10106 is paused. Unpause the container before stopping
ERROR: for kibana  Cannot stop container 7654ad8f188f717c4487fb9e6fe5924feb7886c5d650c67f4455deaf42c18623: unpausecontainer: Container 7654ad8f188f717c4487fb9e6fe5924feb7886c5d650c67f4455deaf42c18623 is paused. Unpause the container before stopping
$

以上。

■ 関連

docker-compose events

表題のコマンドを試してみる。

■ 環境

  • Mac OSX El Capitan
  • Docker 1.10.2
  • Docker Machine 0.6.0
  • Docker Compose 1.6.0

■ Docker

Docker/Docker Machine共に先日リリースされた”1.10.2“にupgradeしている。”1.10.1“の時のであるが下記エントリ。

docker/docker-machine upgrade

■ events

各コンテナに対するイベントを取得できるようである。どんなイベントが存在するのかよくわからないので試しながらやってみる。

端末1:

$ docker-compose events
 

何も返答が返っていないで固まっているのかと思ったが、どうやらイベントを待っているようである。別の端末から各操作を行ってみる。使用する”docker-compose.yml“はいつも通りの”Elasticsearch + Kibana“のものである。

端末2:

$ docker-compose up -d
Creating elasticsearch
Creating kibana
$

この時に取得できたイベントは下記。

端末1:

2016-02-24 19:18:15.234321 container create 88e08bb891f1c04108032a372c2121643fd5e646172e68599aecf3c993bc8c8a (image=elasticsearch, name=elasticsearch)
2016-02-24 19:18:15.289717 container start 88e08bb891f1c04108032a372c2121643fd5e646172e68599aecf3c993bc8c8a (image=elasticsearch, name=elasticsearch)
2016-02-24 19:18:15.396868 container create c891b553ff6c66661678e02a5634940cd4f023728efb8f24e7fb4052c6db2264 (image=kibana, name=kibana)
2016-02-24 19:18:15.499875 container start c891b553ff6c66661678e02a5634940cd4f023728efb8f24e7fb4052c6db2264 (image=kibana, name=kibana)

`up`に対して、”create“と”start“のイベントが取得できるようである。

同様に調べていくと`docker-compose`の各コマンドに対して下記のようにイベントが取得できた。

  • create -> create
  • down -> ERROR
  • kill -> unpause + kill + die
  • pause -> pause
  • restart -> kill + die + stop + start + restart
  • start -> start
  • stop -> kill + die + stop
  • unpause -> unpause
  • up -> create + start
  • rm -> ERROR

`down`と`rm`の時に`docker-compose events`コマンドの実行でERRORとなりストップした。また`docker-compose events`を実行して以降のイベントしか取得はできないようである。

以上。

■ 関連