Login
Immutable PageDiscussionInfoAttachments
ytoku/Docker

MMA

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コマンドで適当なディストリビューションのイメージをダウンロードする。

などがある。 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し直したい場合、前のイメージを削除してから再作成する必要はあるか?

イメージとコンテナの違い

イメージ
コンテナ
  • 「読み書き可能なレイヤー」に親イメージに関する情報やネットワーク設定などを加えたもののこと。

    runningあるいはexitedの状態を持つ。 http://docs.docker.io/terms/container/

EXPOSEの意義

他にある?

runしたときの影響範囲は?

runした時は指定したイメージを元に新しいコンテナが作られる。イメージが書き換わることはない。

実行結果をイメージにしたいときはcommitコマンドを使用する。

何かのコマンドを実行したあとの状態を元に続けて操作を行うには?

startコマンドで、ファイルシステムへの変更を維持したままコマンドを再実行できる。 ただし-aオプションを付けないと実行したターミナルに対して自動でattachされないので注意。 あとでstartするために一旦停止するにはstopする。restartstop+start

直接他のコマンドを実行することは多分できない。 一旦commitでイメージにすれば他の作業を行うことも一応可能。

内部でiptables

run--privilegedオプションを渡す。

セキュリティはどうなっている?

http://docs.docker.io/articles/security/

ytoku/Docker (last edited 2014-07-25 16:57:02 by ytoku)