Dockerに買収されて間もないsocketplaneですが、 ちょっと試してみます。
socketplane/socketplane · GitHub
続きを読むいろいろ統計情報まとめ
$ sudo yum install -y dstat
topの拡張版
$ sudo yum install -y epel-release $ sudo yum install -y htop
ネットワークパフォーマンス測定
$ sudo yum install -y iperf3
sar(System Admin Reporter:システム管理者向けレポーター)
$ sudo yum install -y sysstat $ sudo systemctl start sysstat $ sudo systemctl enable sysstat
Docker Hubには公式・非公式含め、いろいろと便利そうなイメージが、 たくさんあがっています。
docker pull
で、簡単に取得できるのはいいのですが、
これってpullし終わるまでイメージのサイズがわからないのでしょうか?
...なさそうなんで、いくつかpullしたイメージをメモ。
[2016/5/14追記] タグのページ見に行けばわかるようです。 https://hub.docker.com/r/library/redmine/tags/
docker images
)ubuntu latest 5ba9dab47459 2 weeks ago 192.7 MB centos latest dade6cb4530a 12 days ago 210.1 MB
一般的なコマンドを一通りいれるとこれくらいなのかな。
nginx latest 4b5657a3d162 3 weeks ago 91.64 MB
100MB 切るとシンプルだなぁと思う。
sameersbn/redmine latest 4d0b53e01808 2 weeks ago 612.9 MB
→ よく紹介されているけど、起動しなかった... 以下、フロントエンドで起動したときのログ。
$ docker run -it -p 80:80 -v /home/core/redmine/files:/redmine/files -v /home/core/redmine/mysql:/var/lib/mysql sameersbn/redmine ERROR: Please configure the database connection. Refer http://git.io/JkE-cw for more information. Cannot continue without a database. Aborting...
[2015/2/25追記]
単にDBサーバーが立ち上がってないだけでした。 公式ページを参考にMySQLサーバーのコンテナを立ち上げて、link指定したら、無事起動しました。
$ mkdir -p /opt/mysql/data $ sudo chcon -Rt svirt_sandbox_file_t /opt/mysql/data $ docker run --name=mysql -d \ -e 'DB_NAME=redmine_production' -e 'DB_USER=redmine' -e 'DB_PASS=password'\ -v /opt/mysql/data:/var/lib/mysql \ sameersbn/mysql:latest $ mkdir -p /opt/redmine/data $ sudo chcon -Rt svirt_sandbox_file_t /opt/redmine/data $ docker run --name=redmine -it --rm --link mysql:mysql \ -v /opt/redmine/data:/home/redmine/data \ sameersbn/redmine:2.6.2
jenkins 1.580.2 41001f44325b 6 weeks ago 661.5 MB jenkins latest 41001f44325b 6 weeks ago 661.5 MB
ysaotome/devhub latest 96b89a8369e1 8 weeks ago 857.8 MB
→ すんなり動きました!
永続化するためのディレクトリはどこだろう...
zettio/weavetools 0.9.0 6c2dd751b59c 2 weeks ago 5.138 MB zettio/weavetools latest 6c2dd751b59c 2 weeks ago 5.138 MB zettio/weave 0.9.0 efb52cb2a3b8 2 weeks ago 11.35 MB zettio/weave latest efb52cb2a3b8 2 weeks ago 11.35 MB
→ 軽い!本当に小さなバイナリ入っているだけなんだろうなぁ。 イメージの中身、goでコンパイルされたたstaticなELFがひとつと、設定ファイル?が数個あるだけのようでした。
【翻訳】いいDockerイメージを構築するには? ーDockerfileのベストプラクティス | インフラ・ミドルウェア | POSTD
気づいたらガジェ獣: docker exportとdocker importでdockerイメージのサイズを小さくする
docker export
は、最新のスナップショットを吐き出すのに対し、docker save
は履歴情
報も保存するのですね。
正確には、コンテナ(実行状態or実行結果)を保存するのが export、イメージを保存するのが saveのようです。
2014/12/4に、Docker公式で発表されたオーケストレーションツール
について、理解したことと、参考サイトをメモ。
■公式発表記事
Announcing Docker Machine, Swarm, and Compose for Orchestrating Distributed Apps | Docker Blog
全然関係ないけど、記事内にある英語のa.k.a.
は、also known as
の略で、"~で知られている"という意味だそうな。別名とか、通称とか、ニックネーム・あだ名という意味も。
cloud native, microservices architecture, twelve-factor apps あたりは、さらっと説明できるといいですね。。
Cloud Native at Netflix: What Changed? - Gartner Catalyst 2013
AWS、Azure、SoftLayerの名前も:Dockerが新機能・サービスを続々発表、主要クラウドプレーヤーとの距離も緊密に - @IT
仮想マシン(VirtualBox)や、クラウド(Azure、EC2、Digital Ocean)上に、Dockerが動く環境を作るツール? 導入を容易にするものかな。別にインストールすればいい話にも思えるけど。
docker machine/swarm を使ってみる - Cloud Penguins
Docker MachineでDigital OceanにDocker環境を構築する - Qiita
複数ホスト上に、コンテナを起動するクラスタを作ることができる。
手順としては、
swarm create
swarm join
swarm manage
DOCKER_HOST
をマネージャーのポートに設定して、docker run
これで、クラスタに紐づいたノードに、分散されてコンテナが起動するらしい。 スケジューリングとか呼ばれるものは、まだまだ制限が多いみたい。
Docker Swarmでクラスタを構築する - Qiita
Dockerが買収したfigそのもの(?)。
YAMLでコンテナ(複数コンテナ可)の構成をgroup.yml
を記述して、docker up
すれば、
対象のコンテナが立ち上がる。
現時点の情報だと、まだまだ開発途上という感じがします。
オーケストレーションツール絡みで、 rebuildで話に出てた、HashiCorpのConsulも気になる今日この頃。
Consulを使ってみた | Pocketstudio.jp log3
オーケストレーション入門 – 多種多様化するサービスをConsulで連携させる | GREE Engineers' Blog
ガチガチにネットワーク設計されたマルチコンテナな環境を作りたい。 しかも、DSLとかで記述してコマンド一発でいけるとうれしい。
感覚的には vagrant up で、複数VM立ち上げられるdocker版。VMの細かいカスタマイズはVagrantfileでできるように。
結論まで辿りついていないのですが、ファーストトライの個人メモです。
はじめに。固定IPを振るのに、docker単体じゃできないみたいな記事があるけど、
--privileged
で、ipコマンド打てば特に問題なく設定でき、
他コンテナとの通信もできました。
開発環境限定とかなら、これでもいいかなという気もします。
以下、Docker環境構築から順次メモ。
いつもはFedora使うけど、CoreOSで試しました。
$ git clone https://github.com/coreos/coreos-vagrant/ $ cd coreos-vagrant $ vagrant up
起動後の情報いくつか。
core-01 ~ # uname -a Linux core-01 3.18.4 #2 SMP Thu Feb 5 02:39:49 UTC 2015 x86_64 Intel(R) Celeron(R) CPU N2830 @ 2.16GHz GenuineIntel GNU/Linux core-01 ~ # df Filesystem 1K-blocks Used Available Use% Mounted on rootfs 16591236 21644 15707096 1% / devtmpfs 498692 0 498692 0% /dev tmpfs 510984 0 510984 0% /dev/shm tmpfs 510984 224 510760 1% /run tmpfs 510984 0 510984 0% /sys/fs/cgroup /dev/sda9 16591236 21644 15707096 1% / /dev/sda3 1024016 313976 658024 33% /usr tmpfs 510984 0 510984 0% /media tmpfs 510984 0 510984 0% /tmp /dev/sda6 110576 88 101316 1% /usr/share/oem core-01 ~ # docker -v Docker version 1.4.1, build 5bc2ff8-dirty
systemd採用。一般ユーティリティ系(?)のぞいて、 docker以外のコマンドどれくらい入っているのかなぁと見てみると
Rocketも入っていなかった。( CoreOS - はじめてのRocket - Qiita )
まぁ、最低限のLinux環境ならこんなもんですかね。あとはコンテナ内で。 etcdやfleetとか、オーケストレーションとかがあればいいって感じですかね。
CoreOSクラスタにDockerコンテナをデプロイ #dockerjp // Speaker Deck
以下、privilegedで起動して、ipを追加した操作。
core-01 ~ # docker run -it --rm --privileged ubuntu /bin/bash root@3a9c79cf6c14:/# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default 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 30: eth0: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02:42:0a:01:00:0b brd ff:ff:ff:ff:ff:ff inet 10.1.0.11/16 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::42:aff:fe01:b/64 scope link valid_lft forever preferred_lft forever root@3a9c79cf6c14:/# ip a a 192.168.0.2/24 dev eth0 root@3a9c79cf6c14:/# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default 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 30: eth0: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02:42:0a:01:00:0b brd ff:ff:ff:ff:ff:ff inet 10.1.0.11/16 scope global eth0 valid_lft forever preferred_lft forever inet 192.168.0.2/24 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::42:aff:fe01:b/64 scope link valid_lft forever preferred_lft forever
pipeworkも使ってみました。 LXCコンテナを操作しているイメージだったので、今動くのかな?という懸念があったのですが、普通に動きました。
下記、サイトにある内容を実践しただけなので、詳細は割愛...
Dockerコンテナに狙ったIPアドレスを割り当てる | blog.hansode.org
まぁ、ホスト側で一発で操作できるのは嬉しいけど... コンテナ起動してから、1コンテナずつ操作する。だと、当初の目標には遠い。
Weaveが少し近づいてきた?
Weave - Dockerで仮想ネットワークを構築 MOONGIFT
ZettioがDocker用ネットワークシステムのWeaveをリリース
複数のDockerサーバで独自ネットワークを構築する「Weave」を試す! - さくらのナレッジ
Dockerコンテナ接続パターン (2014年冬) | SOTA
インストール。
$ sudo wget -O /usr/local/bin/weave https://raw.githubusercontent.com/zettio/weave/master/weave /usr/local/bin/weave: Read-only file system
えっと、CoreOSでは /usr が readonlyでmountされているようなので
$ sudo mkdir -p /opt/bin $ sudo wget -O /opt/bin/weave https://raw.githubusercontent.com/zettio/weave/master/weave $ sudo chmod a+x /opt/bin/weave
weaveはroot専用コマンドらしいので、rootになって各操作。
# weave launch
まず、起動すると zettio/weavetools や zettio/weave のコンテナイメージをとりにいって、 zettio/weave を起動しているようでした。
# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d6023fc97310 zettio/weave:0.9.0 "/home/weave/weaver 36 seconds ago Up 34 seconds 0.0.0.0:6783->6783/udp, 0.0.0.0:6783->6783/tcp weave
では、実際に動かしたいコンテナを起動。
# weave run 192.168.0.1/24 -it ubuntu /bin/bash 06d7ed07fbd6ff0cad9d6bde89c4055a50cb38ac57fb464077e28541749ce9fa # weave ps 06d7ed07fbd6 66:f2:32:45:7c:92 192.168.0.1/24 d6023fc97310 32:c5:23:49:1f:b8 # docker ps -l CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 06d7ed07fbd6 ubuntu:latest "/bin/bash" 55 seconds ago Up 54 seconds elegant_torvalds
-d
指定しなくても、デーモンとして起動するのかな。
weave attach がうまくできなかったので、docker attachする。
# docker attach 06d7ed07fbd6 root@06d7ed07fbd6:/# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default 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 39: eth0: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02:42:0a:01:00:0d brd ff:ff:ff:ff:ff:ff inet 10.1.0.13/16 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::42:aff:fe01:d/64 scope link valid_lft forever preferred_lft forever 41: ethwe: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 65535 qdisc fq_codel state UP group default qlen 1000 link/ether 66:f2:32:45:7c:92 brd ff:ff:ff:ff:ff:ff inet 127.0.0.1/24 scope host ethwe valid_lft forever preferred_lft forever inet 192.168.0.1/24 scope global ethwe valid_lft forever preferred_lft forever inet6 fe80::64f2:32ff:fe45:7c92/64 scope link valid_lft forever preferred_lft forever (ctl+p ctl+q で抜ける)
ethweというインタフェースが追加され、そこにIPアドレス付与されていることがわかる。
--net=none
付きで起動すれば、ethweオンリーのシンプルな環境にもできる。
# weave run 192.168.0.2/24 -it ubuntu /bin/bash
として、もう1個コンテナ作成し、
pingでコンテナ間通信できることを確認。資料通りやれば、複数ホスト間も同じ感じで動くだろう。
dockerをラッピングして、起動からネットワークまわりをケアできること、複数ホスト間もつなげられる。のが利点かな。
最近は、Docker社もオーケストレーションを出してきている。 ネットワークのカスタマイズは不明。やっぱりPaaS的な方向なのかなぁ。 誰かのまとめ記事を待つことにしよう(おい
Announcing Docker Machine, Swarm, and Compose for Orchestrating Distributed Apps | Docker Blog
DSLでどうのは、figがよさそうと思っていたら、Docker Composeで置き換える模様。
Figで複数のDockerコンテナをまとめて起動して、Redmineを構築する - hidemium's blog
docker独自の構成ツール三種をアナウンス、figはDocker Composeへ - A Node in Nodes
ethtoolで全IFなめる指定(もうちょっとシンプルにかけるはず...)
# ip l | grep "^[0-9]"|cut -d: -f2 | xargs -n 1 ethtool
CoreOSでプロキシまわりするスマートな方法がないみたいで、
/usr/lib/systemd/system/docker.service
を見てみると、
[Service] Environment=TMPDIR=/var/tmp EnvironmentFile=-/run/flannel_docker_opts.env
とあるんだけど -/run/flannel_docker_opts.env
ってどういう意味だ...勉強不足。。
参考: * http://ewaldertl.blogspot.jp/2014/03/using-docker-behind-http-proxy-on.html