1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Docker vオプションを試してみる

Last updated at Posted at 2016-11-17

はじめに

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]

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?