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>にすると書き込み不可で共有されるが、提供側のコンテナでは読み書きが出来る