コマンドラインツール
としてのDocker
74th
自己紹介
• @74th
• 企業向けタブレットアプリ開発
• メインはC#
• .NET用jenkinsコンテナ
• docker run -d -p 8080:8080 74th/jenkins-dotnet
docker と言えば、サーバと思っていませんか?
サーバアプリコンテナ
コンテナ
ミドルウェア
アプリなど
コンテンツ
apache、MySQLなど
各種モジュール
"ADD" or "-v"
ビルド環境・ツールコンテナ
コンテナ
ミドルウェア
ソースコードなど
コンテンツ
ビルド環境、ツール
"-v"
dotnetのプロジェクトを
ビルドするコンテナ
• /usr/local/bin/xbuild
#!/bin/sh
eval "$(docker-machine env default)"
docker run -it --rm -v `pwd`:/src --workdir=/src --entrypoint=xbuild mono $*
処理後のコンテナを
残さない
現在のディレクトリ
をマウント
マウントしたディレ
クトリに移動
ビルドコマンドを
指定
引数をそのまま
引き継ぐ
設定読込
dotnetのプロジェクトを
ビルドするコンテナ
• /usr/local/bin/xbuild
• 使い方
#!/bin/sh
eval "$(docker-machine env default)"
docker run -it --rm -v `pwd`:/src --workdir=/src --entrypoint=xbuild mono $*
$ xbuild dotnetsolution.sln
ところで、
コンテナ
dockerのパワー
• 今まで「その世界に居れば幸せだよ」と、

吹聴してたものを、コンテナの中に入れて、

「全部一緒だね」という暴力
コンテナ
rubygem
コンテナ
コンテナ
apt-get
java-vm
コンテナ
golang
コンテナ
.NET
仮想マシン
コンテナ
npm
コンテナ
yum
パッケージマネージャコンテナ化ツール
flying whale
• ツールのインストールコマンド
$ whale npm install marked
$ whale apt-get install mono
$ whale yum install gcc
• ツールの実行
$ marked markdowntext.md
$ mono dotnetapp.exe
$ gcc helloworld.c
• github 74th/flyingwhale
パッケージマネージャコンテナ化ツール
flying whale
# ls /usr/local/bin
# npm install -g marked
# ls /usr/local/bin
docker run node
docker commit whale-npm-marked
パッケージマネージャの
コンテナを起動
コマンドの一覧を取得
コマンドを
パッケージマネージャで取得
コマンドの一覧を再取得
増えたコマンドを把握する
コマンドの入ったコンテナをコミット
/usr/local/bin/marked
コンテナを呼ぶスクリプトを
パスに配置する

コマンドラインツールとしてのDocker