Dockerメモ3
Dockerコンポーネント
- Docker エンジン:Docker本体のこと
- Docker コンテナ:Dockerエンジンが実行するコンテナのこと
- Docker クライアント:Dockerデーモンが提供する各種コマンドなどのIFのこと
- DockerコンテナはホストOS上で複数同時に起動することができる、ホストOSから見ると分離された名前空間として見える
コンテナの起動
- 例えば"/bin/bash"でコンテナを起動した後のプロンプトで"root@11450a5780f2"等と表示されるが、@の後ろはコンテナID
- hostnameはコンテナIDが自動的に設定されるが、
-h
オプションで設定することも可能 - コンテナをバックグラウンドで稼働させる場合は
-d
オプションを強する - 起動のコマンドは
docker start <container id>
でOK、起動後はdocker ps
で確認ができるが、バックグラウンドで動いている
コンテナのイメージ化
- 作成したコンテナをイメージ化することができる
docker commit <container id> <repository name>:<tag name>
--docker commit c7c2983acd46 local:test-run
こんな感じ- アプリケーションごとにコンテナを作成してイメージ化しておけば、必要な時に必要なものをすぐ実行可能な状態でコンテナの再利用をすることができる
docker images --no-trunc
で本来のイメージID64文字で表示が可能、通常は12文字。イメージIDのみ出力したい場合はdocker images -q
でOK
シェル変数にコンテナIDを入れると便利
abc=$(docker run -d --name centos-test -i -t centos:centos6.6 /bin/bash)
を実行すると、コンテナIDがabcに代入される- コンテナIDは長いので便利そう?
コンテナの停止
docker stop <container id>
でOK
コンテナのアタッチ
- 一度停止したコンテナは
docker start -i -a <コンテナID>
で再接続ができる -- iは標準入力を受け付けるオプション、-aはアタッチ - バックグラウンドで動作しているコンテナはそのまま
docker attach <container id>
でOK
コンテナとコンテナイメージの削除
docker rm <container id>
でコンテナは削除可能 --docker ps -a | awk '{print $1}' | xargs docker rm
でまとめて一括で消せる -- 起動中のコンテナは削除できないが、-f
オプションを付与することで強制的に削除可能docker rmi <Image id>
でコンテナは削除可能 --docker images | awk '{print $3}' | xargs docker rmi
でまとめて一括で消せる
コンテナの自動廃棄
docker run
コマンドに--rm
オプションを付与して起動すると、コンテナ停止時に自動的に廃棄される-d
オプションとはセットで利用できないので注意
Dockerメモ4
ホストOSからコンテナへディレクトリを共有する
- DockerはホストOSのディレクトリをコンテナ側へ見せることが可能になっている
- -vオプションを利用して
-v <ホスト側ディレクトリ>:<コンテナ側ディレクトリ>
とする docker run -v /root/docker-testdir:/root/docdoc -it --name test0x1 centos:centos6.6 /bin/bash
こんな感じ、ホスト側の/root/docker-testdir
をコンテナ側の/root/docdoc
ディレクトリに割り当てる- コンテナ側で
/root/docdoc
の中にファイルを作成すると、ホスト側では/root/docker-testdir
の中にコンテナ側で作成したファイルが存在する - つまりホスト/コンテナ側から読み書きできる状態になっている
書き込み不可でコンテナへディレクトリを共有する
-v <ホスト側ディレクトリ>:<コンテナ側ディレクトリ>:ro
とする
共有可能なディレクトリの確認
docker inspect <container id> | <container image>
で表示される- こんな感じで出てくる、
docker inspect
コマンドで色々と情報が取れる
"Mounts": [ { "Source": "/root/docker-testdir", #コンテナ側ディレクトリ "Destination": "/root/docdoc", #ホスト側ディレクトリ "Mode": "", #読み込み専用ならroと表示 "RW": true, #読み書き出来るのでtrueになっている "Propagation": "rprivate" }
コンテナ間でのディレクトリの共有
docker run -v /root/dockertest -itd --name test0x4 centos:centos6.6 /bin/bash
これでコンテナtest0x4の/root/dockertest
ディレクトリができるdocker run --volumes-from test0x4 -it --name test0x5 centos:centos6.6 /bin/bash
これでコンテナtest0x5のroot/dockertest
はtest0x4のディレクトリと共有されている ----volumes-from <container id>
オプションが必要 ----volumes-from:ro <container id>
にすると書き込み不可で共有されるが、提供側のコンテナでは読み書きが出来る