Skip to content

Instantly share code, notes, and snippets.

@hiromasaono
Last active May 30, 2019 14:53
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hiromasaono/1187dd6a34ca221baada to your computer and use it in GitHub Desktop.
Save hiromasaono/1187dd6a34ca221baada to your computer and use it in GitHub Desktop.
MakingDockerContainerForBiologist

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がみつかるかも
  1. build → run してちゃんと動く か確認する
  2. うまく動かない場合 coreosのbashで個別のコードがちゃんと動くか確認
  3. ちゃんと動くDockerfileが完成
  4. GitHubにDockerfileを上げる
  5. 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ができる。

参考

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment