docker v1.9の新機能、ネットワークを@zembutsuさんのスライドを見て、
手元の環境で試してみました。
公式:https://docs.docker.com/v1.5/contributing/devenvironment/
experimental機能を利用する
https://github.com/docker/docker/tree/master/experimental
1.gitからcloneします。
# git clone https://git@github.com/docker/docker
Cloning into 'docker'...
remote: Counting objects: 124196, done.
remote: Compressing objects: 100% (10/10), done.
remote: Total 124196 (delta 6), reused 2 (delta 2), pack-reused 124184
Receiving objects: 100% (124196/124196), 74.52 MiB | 303.00 KiB/s, done.
Resolving deltas: 100% (82606/82606), done.
# cat VERSION
1.10.0-dev
2.ここで公式通り、make buildとしたいところですが、このコマンドの中でdockerコマンドを叩いており、まだインストールをしていない段階なので、command not foundとなります。
# make build
/bin/sh: docker: command not found
mkdir bundles
/bin/sh: docker: command not found
/bin/sh: docker: command not found
/bin/sh: docker: command not found
docker build -t "docker-dev:master" -f Dockerfile .
/bin/sh: docker: command not found
/bin/sh: docker: command not found
/bin/sh: docker: command not found
/bin/sh: docker: command not found
make: *** [build] Error 127
コマンドを使えるようにしたいのでdockerをyumから入れます。
参考:
http://stackoverflow.com/questions/24182901/how-to-set-up-docker-development-environment-on-debian
#yum install docker
#systemctl start docker
# make DOCKER_EXPERIMENRAL=1 binary
docker build -t "docker-dev:master" -f Dockerfile .
Sending build context to Docker daemon 108.7 MB
Step 0 : FROM ubuntu:14.04
Trying to pull repository docker.io/library/ubuntu ... 14.04: Pulling from library/ubuntu
9377ad319b00: Downloading 54.06 MB/65.67 MB
a82f81f25750: Download complete
b207c06aba70: Download complete
d55e68e6cc9c: Download complete
略 この後goのコンパイルが続きます。
yumでインストールしたdockerとgitからcloneしたdockerを入れ替えます。
#cd /usr/bin
#mv docker docker.old
#cd /home/vagrant/docker/bundles/1.10.0-dev/binary/
#cp docker-1.10.0-dev /usr/bin/
#mv docker-1.10.0-dev docker
これでdockerが使えるようになったので、適当なimageをpullします。
# docker pull ansible/centos7-ansible
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ansible/centos7-ansible latest fb3ef4e58b05 29 minutes ago 416.1 MB
docker-dev master b120a2605ece About an hour ago 1.774 GB
docker.io/ubuntu 14.04 d59bdb51bb5c 5 days ago 187.9 MB
pullしたansible imageをrunし、デフォルトのネットワークを確認します。
# docker run -it ansible/centos7-ansible
# ip a
lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
link/ether 02:42:ac:11:00:01 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::42:acff:fe11:1/64 scope link
valid_lft forever preferred_lft forever
また、ホストの通常時のネットワークを確認します。
# docker network ls
NETWORK ID NAME DRIVER
f2d8bed96ec7 none null
55a5cd67c642 host host
abd8037d618e bridge bridge
hogeネットワークを作ります。
# docker network create hoge
787e10bb2e6f309845f7df34806fc68f8d9e5bcb1c056197aad8b5bd9361ed0e
# docker network ls
NETWORK ID NAME DRIVER
787e10bb2e6f hoge bridge
f2d8bed96ec7 none null
55a5cd67c642 host host
abd8037d618e bridge bridge
hogeネットワークの詳細をinspectオプションで確認
# docker network inspect hoge
[
{
"Name": "hoge",
"Id": "5c18c10469063f396a50f699e4b0a75ae0036f55da190b7447726d8a51334eb1",
"Scope": "local",
"Driver": "bridge",
"IPAM": {
"Driver": "default",
"Config": [
{}
]
},
"Containers": {},
"Options": {}
}
]
このように起動すると、hogeネットワークを使える。
#docker run --net=hoge -it ansible/centos7-ansible
# ip a
lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
link/ether 02:42:ac:12:00:02 brd ff:ff:ff:ff:ff:ff
inet 172.18.0.2/16 scope global eth0 ★
valid_lft forever preferred_lft forever
inet6 fe80::42:acff:fe12:2/64 scope link
valid_lft forever preferred_lft forever
# cat /etc/hosts
172.18.0.2 42bbea885190
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
上で設定したネットワークをホスト側から見てみる。
# docker network inspect hoge
[
{
"Name": "hoge",
"Id": "5c18c10469063f396a50f699e4b0a75ae0036f55da190b7447726d8a51334eb1",
"Scope": "local",
"Driver": "bridge",
"IPAM": {
"Driver": "default",
"Config": [
{}
]
},
"Containers": {
"42bbea885190484a555cf7785adbae50ccdd05590ba8737b006a63f78ed88177": {
"Name": "jovial_mahavira",
"EndpointID": "ccb7c7eb3b908a55d4e4825724e084d160b89e35ea9ddaf624acbf95cbdb882c",
"MacAddress": "02:42:ac:12:00:02",
"IPv4Address": "172.18.0.2/16",
"IPv6Address": ""
}
},
"Options": {}
}
]
もう1つ、ansible/centos7-ansibleを別のターミナルで開き、172.18.0.3のIPが振られていることを確認する。
# ping 172.18.0.3
PING 172.18.0.3 (172.18.0.3) 56(84) bytes of data.
64 bytes from 172.18.0.3: icmp_seq=1 ttl=64 time=0.088 ms
64 bytes from 172.18.0.3: icmp_seq=2 ttl=64 time=0.075 ms
64 bytes from 172.18.0.3: icmp_seq=3 ttl=64 time=0.065 ms
172.17.0.2から疎通できる。ホスト間通信ができる。
docker swarmを使わないでoverlayNWは作れないぽい。
http://qiita.com/ma2saka/items/bd4a846bdb5a4ee75d42
https://docs.docker.com/swarm/discovery/