Dockerコンテナをつくる on MacOSX
- https://gist.github.com/hiromasaono/1187dd6a34ca221baada からの転載
- 2015.2.2-6 国内版Biohackathon14.14 にて
- 再現性のあるサイエンスのための Docker/BioDevOps
bioな分野でDockerを使うとなにがいいのか
- コンピュータによるデータ解析をだれでもどこでもコマンド一発で再現できるのが素敵
- エヴァンジェリスト@iNut氏談
- バイオインフォマティクスの参入障壁の一つであるマシン環境設定も考慮しなくていい
- いままで環境構築に時間を費やしがちだった講習会などでも便利そう
- マシンの環境設定だけで丸1〜2日かかるケース(バイオインフォマティクス人材育成カリキュラム(次世代シークエンサ) | 速習コース)もある
前提
- MacOSX Yosemite
- コマンドライン操作はそれなりにわかる人向け
- GitHubは(ほぼ)初めて使う人向け
- Dockerも初めて使う人向け
環境構築
Homebrew のインストール
ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)"
VirtualBox と Vagrant のインストール
brew tap phinze/homebrew-cask
brew install brew-cask -v
brew cask install virtualbox -v
brew cask install vagrant -v
CoreOS のインストール
git clone https://github.com/coreos/coreos-vagrant
cd coreos-vagrant
vagrant up && vagrant ssh
CoreOSインストール完了の確認
coreos> docker run -it inutano/cmatrix
- マトリックスが流れればOK
Portの設定
exit で coreosから抜けたあとに、
~/coreos-vagrant/Vagrantfile を編集。
最後から4行目 (行末にendが3回出てくるところの上) に
config.vm.network "forwarded_port", guest:443, host:4430
を追記して
vagrant reload && vagrant ssh
再起動する。
Port変更の確認
coreos> docker run -d -p 443:8888 -e "PASSWORD=hoge" ipython/scipyserver
でscipyserverを起動して、
ブラウザで https://localhost:4430/ が開けばOK。
ファイルの共有設定
-
@coreos-vagrant 以下に share ディレクトリを作成
mkdir share
- ~/coreos-vagrant/Vagrantfile を編集して
# Uncomment below to enable NFS for sharing the host machine into the coreos-vagrant VM.
の箇所をさがして、その下にある、
config.vm.synced_folder "./share", "/home/core/share", id: "core", :nfs => true, :mount_options => ['nolock,vers=3,udp']
の記述をコメントアウトしてから、共有するディレクトリを上記のように変更(指定)する。
よくつかう vagrant コマンド
vagrant status
vagrant global-status
vagrant up
vagrant halt
vagrant destroy
CoreOSのすべてを初期化
vagrant reload
vagrant ssh
vagrant box update
CoreOSのアップデート
Docker コンテナの作り方
Dockerコンテナを作る手順
- まずはDockerfileを作る
- そもそもDockerfileとは?
- Dockerコンテナ作成のための自動化レシピみたいなもの
- Dockerコンテナとは?
- いままで各作業マシンでやっていた一連の環境設定だとかコマンドライン操作とかのもろもろを、コマンド一発でどの環境でも再現する仕組み(意訳)
- Dockerコンテナとは?
- Dockerコンテナ作成のための自動化レシピみたいなもの
- そもそもDockerfileとは?
- どういうコンテナをつくるか考える
- coreos内で Dockerfile を作る そして中身を書く
- ここが一番のキモ
- うまいこと書くには、コマンドライン操作とかシェルスクリプトとかを習熟していないとツラい
- 同じようなコンテナがすでに作られていないかdockerで検索してみる
- 参考にできそうなDockerfileがみつかるかも
- build → run してちゃんと動く か確認する
- うまく動かない場合 coreosのbashで個別のコードがちゃんと動くか確認
- ちゃんと動くDockerfileが完成
- GitHubにDockerfileを上げる
- dockerでAutomated Buildする
docker コマンド とDockerfileの 作成例
-
ubuntuのbashを起動
coreos> docker run -it ubuntu bash
-
後述のDockerfileで指定したコマンドがうまく動くか確認するのに使うとよい
-
wget のインストールの例
(id)~/ apt-get update && apt-get install -y curl
(id)~/ exit
-
Dockerfileができたら、buildとrunをして、Dockerコンテナが(ある程度)うまく動くことを確認する
coreos> docker build -t [作者名]/[コンテナ名] [Dockerfileの場所]
coreos> docker run -it [作者名]/[コンテナ名]
Dockerfile の例
Docker container for curl
FROM ubuntu
MAINTAINER Hiromasa Ono, hiromasa.ono@gmail.com
Install packages
RUN apt-get update && \
apt-get install -y curl
CMD ["bash"]
- https://registry.hub.docker.com/u/hiromasaono/curl/dockerfile/
- FROM のところは debian にすると一番軽量、だがモノによっては動かないケースがある
GitHub に Dockerfile を add, commit, push
- https://github.com/へ移動
- 右上の+からNew repository をクリック
- repositoryの名前はDockerコンテナと同じにする
git init
←そのディレクトリで初めてgitを使うとき
git add Dockerfile
git commit -m "first commit"
← -m で変更点などコメントを書く
git remote add origin https://github.com/hiromasaono/curl.git
←githubにレポジトリがない場合に指定する
git push -u origin master
よく使うgitコマンドの流れ
git status
git diff
git add [filename]
git status
git commit
git status
git push origin master
git status
- 何か変更したら git status で状態確認のくせをつけるとよい
docker で Automated build
- https://hub.docker.com/ へ移動
- 右上の Add Repository から Automated Build をクリックして buildしたいGitHubのrepository を選択
- しばらく待つとDockerコンテナができあがる
- coreos上で、Dockerコンテナを起動するには、
docker run -it hiromasaono/curl
Automated build をしない場合 (非推奨)
coreos> docker ps -a
← CONTAINER ID(id) を確認する
coreos> docker commit (id) hiromasaono/curl
coreos> docker images
coreos> docker login
coreos> docker push hiromasaono/curl
- DockerにRepositoryができる。