Edited at

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ができる。

-


参考