MacOSX
docker
bioinformatics

bio分野向けのDockerコンテナをつくる on MacOSX

More than 3 years have passed since last update.

Dockerコンテナをつくる on MacOSX

bioな分野でDockerを使うとなにがいいのか

前提

  • 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。

ファイルの共有設定

  1. @coreos-vagrant 以下に share ディレクトリを作成 mkdir share
  2. ~/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コンテナとは?
        • いままで各作業マシンでやっていた一連の環境設定だとかコマンドライン操作とかのもろもろを、コマンド一発でどの環境でも再現する仕組み(意訳)
  1. どういうコンテナをつくるか考える
  2. coreos内で Dockerfile を作る そして中身を書く
    • ここが一番のキモ
    • うまいこと書くには、コマンドライン操作とかシェルスクリプトとかを習熟していないとツラい
    • 同じようなコンテナがすでに作られていないかdockerで検索してみる
    • 参考にできそうなDockerfileがみつかるかも
  3. build → run してちゃんと動く か確認する
  4. うまく動かない場合 coreosのbashで個別のコードがちゃんと動くか確認
  5. ちゃんと動くDockerfileが完成
  6. GitHubにDockerfileを上げる
  7. 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"]

GitHub に Dockerfile を add, commit, push

  1. https://github.com/へ移動
  2. 右上の+からNew repository をクリック
  3. 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

  1. https://hub.docker.com/ へ移動
  2. 右上の Add Repository から Automated Build をクリックして buildしたいGitHubのrepository を選択
  3. しばらく待つとDockerコンテナができあがる
  4. 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ができる。
-

参考