はじめに
Dockerでコンテナーのファイルとかを
ローカルに保存したいって場面があったので、
vオプションをつかってみる!(初心者です!)
ホストのディレクトリをコンテナにマウントして、
データを共有するらしいが、、、
ちょっと動作確認。
環境
Dockerはインストール済みということで。
foderaでやってます
cat /etc/redhat-release
->Fedora release 24 (Twenty Four)
前提
1.ホスト側で使うディレクトリは、Dockerfileが置いているところからみて、もう一つ下の階層にします(testって名前のディレクトリにしようと思ってます。)。この時のホスト側で使うディレクトリのことを、「A」と名付けます!
2.同様にゲスト側で使うディレクトリは、「B」とよぶことにします。
試すこと
AをBにマウントするので、
run時のAの状態がBの初期状態となっているはず。
そしてその後共有ディレクトリみたいな感じになっているはず
という確認。
1.Aにファイルがない状態で、
1)build時にBにファイルをあらかじめ作る。
->あらかじめつくったBのファイルは消えているのか。
2)Bにファイルを作成する
->Aにファイルは共有されているか
3)Aにファイルを作成する
->Bにファイルは共有されているか
2.Aにファイルがある状態で、
ゲストにディレクトリだけ作って、buildする
->Aのファイルが作られているか
やります!
まずは1のパターン
Dockerfileの中身
FROM centos:7
RUN mkdir /v
RUN echo 'test' > /v/v.txt
※起動時に -v を使ってローカル側:コンテナ側の形で指定
cd Dockerfile置いているディレクトリ
mkdir test
# lsするとtestディレクトリがある状態で。。かつ、
# ls test しても、何もファイルは存在しない。
docker build -t a ./
docker run -it -v Dockerfile置いているディレクトリ/test:/v --name ab a /bin/bash
ここで、
cd v
ls
すると、ビルド時に作ったv.txtが消えている。
BはAにマウントされたっぽいので、1-1)は想定どおり。
次に、1-2)を試すために、コンテナ内で続けて
touch 12.txt
lsして12.txtが存在することを確認した後、exit
そしてhost側のtestの中をみると。。
ls test
おお、12.txtあるやん。というわけで、1-2)もOK
次にAに13.txtを作って(cd無駄な気もするが、、)
cd test
touch 13.txt
cd ..
コンテナに入ってvディレクトリの中をみる
docker start ab
docker exec -it ab /bin/bash
ls v
13.txtあった!というわけで1-3)もおk
exitしましょう
削除して確認
docker rm ab -f
docker rmi a
docker images
docker ps -a
docker周りが、きれいになったところで、
testディレクトリも掃除、、
rm test/*
と、なんか怒られる。
remove write-protected regular empty file 'test/12.txt'?
ls -lすると
-rw-r--r--. 1 root root 0 Nov 17 22:39 test/12.txt
なんかパーミッションがあれですね。。
ま、とりあえず削除して、2に進みます。
2のパターン
まずは、Aにファイル作成
touch test/2.txt
Dockerfileの中身
FROM centos:7
RUN mkdir /v
docker build -t a ./
docker run -it -v Dockerfile置いているディレクトリ/test:/v --name ab a /bin/bash
vをみると(ちなみに権限も確認してみる)
ls -l v
-rw-rw-r--. 1 1000 1000 0 Nov 17 13:58 2.txt
へ〜1000かと思いながら、
とりあえずAのファイルが入っているので、2もおっけー
おわりに
-vオプション使うと、AをBにマウントできることが確認できました。
これから使っていこう。。。
てか、マニュアルみた方が早いということですね。。
おわり!
わからなかったこと
-vオプションでホスト側のをゲスト側にマウントできるなら、
DockerfileでVOLUMEコマンドって使う場面あんの?っておもった。
-vオプションだけでたりるんじゃないのと。。
build時にゲスト側のディレクトリとかをホストに移したりってのは、
-vオプション使うんやったら無理っぽいから他に方法あるんやろな。。
参考
(5分で分かるDockerのキホン)
[http://www.ryuzee.com/contents/blog/6952]