⇤ ← 2014-06-09 02:45:08時点のリビジョン1
サイズ: 5070
コメント:
|
← 2014-07-25 16:57:02時点のリビジョン2 ⇥
サイズ: 5152
コメント:
|
削除された箇所はこのように表示されます。 | 追加された箇所はこのように表示されます。 |
行 147: | 行 147: |
=== 内部でiptables === `run`に`--privileged`オプションを渡す。 |
Docker学習メモ
基本
インストール(on Ubuntu 14.04)
sudo apt-get install docker.io sudo ln -s /usr/bin/docker.io /usr/local/bin/docker
基本的なOSイメージ
docker pullコマンドで適当なディストリビューションのイメージをダウンロードする。
- debian
- ubuntu
- centos
などがある。 docker searchコマンドで検索できる。
コンテナ一覧
動作中のコンテナ
docker ps
終了したものも含めた全てのコンテナ
docker ps -a
イメージ一覧
docker images
親子関係を表示
docker images -t
Dockerfile
# Debianのwheezyを元にする。 FROM debian:wheezy # イメージのAuthorフィールドに表示される。 # ここを変えると全てのキャッシュが無効になるので注意 MAINTAINER ytoku めーるあどれす # RUNはコマンドを実行したあとコミットする。 # コミットは新しいコンテナを作成する。要するにaufsを更に重ねる。 RUN apt-get update RUN apt-get install -y python # 以降のコマンドの実行ユーザを設定 USER nobody # docker runした時の実行コマンド # 数値をダブルクォーテーションで囲い忘れがちなので注意 ENTRYPOINT ["python", "-mSimpleHTTPServer", "8000"] # ENTRYPOINTの後ろにデフォルトで追加される。 # debianではデフォルトで["/bin/bash"]が入っているので # ENTRYPOINTを設定するときは忘れず空にする。 # ENTRYPOINTが設定されていない場合は、docker runしたときに # デフォルトで実行されるコマンドとなる。 CMD [] # 公開するポートを指定 # docker runする時に-p public_port:private_portで指定しないと外部には公開されない。 # むしろEXPOSEしなくても-pすれば公開される。 # docker run -p 8080:8000 EXPOSE 8000
Dockerfileを使ったビルド
ビルドするには
docker build -t repository_name soruce-dir/
ただしディレクトリ構成は
source-dir/ Dockerfile additional-files
Dockerfile単体に対してビルドするには
docker build -t respository_name - < Dockerfile
複数のデーモンを起動
http://docs.docker.io/examples/using_supervisord/
Q&A
ゴミが溜まっていくのではないか
コンテナ
色々実験しているとゴミは溜まる。全てのコンテナを削除するには
docker ps -aq | xargs docker rm
適当にawkなどを噛ませてフィルタして削除すると良い。
実験する際にはrun --rmするとよい。
イメージ
タグがついていないイメージを削除するには
docker images | awk '$1 == "<none>" {print $3}' | xargs docker rmi
Dockerfileを編集してbuildし直し
Dockerfileを編集してbuildし直したい場合、前のイメージを削除してから再作成する必要はあるか?
基本的にはない。buildコマンドを再実行するとイメージを上書きしてくれる。
- さらにDockerfileの先頭から変更していない部分についてはキャッシュされる。
言い換えるとapt-get updateとかやってもキャッシュされるので注意。
イメージとコンテナの違い
- イメージ
- 「読み取り専用のレイヤー」のこと。割り振られたIDに対して中身が変化することは決して無い。
- コンテナ
- 「読み書き可能なレイヤー」に親イメージに関する情報やネットワーク設定などを加えたもののこと。
runningあるいはexitedの状態を持つ。 http://docs.docker.io/terms/container/
- 「読み書き可能なレイヤー」に親イメージに関する情報やネットワーク設定などを加えたもののこと。
EXPOSEの意義
EXPOSEしておかないとportコマンドが動作しない。
他にある?
runしたときの影響範囲は?
runした時は指定したイメージを元に新しいコンテナが作られる。イメージが書き換わることはない。
実行結果をイメージにしたいときはcommitコマンドを使用する。
何かのコマンドを実行したあとの状態を元に続けて操作を行うには?
startコマンドで、ファイルシステムへの変更を維持したままコマンドを再実行できる。 ただし-aオプションを付けないと実行したターミナルに対して自動でattachされないので注意。 あとでstartするために一旦停止するにはstopする。restartはstop+start?
直接他のコマンドを実行することは多分できない。 一旦commitでイメージにすれば他の作業を行うことも一応可能。
内部でiptables
runに--privilegedオプションを渡す。