元の質問:DockerfileでVOLUME命令を使用するにはどうすればよいですか?
私が解決したい実際の質問は-ビルド中にDockerfileのドッカーコンテナーにホストボリュームをマウントする方法、つまりdocker run -v /export:/export
中に機能を持つことdocker build
です。
その背後にある理由は、私にとって、Dockerでビルドするときに、それらの(apt-get install
)キャッシュを単一のDockerにロックしたくないが、それらを共有/再利用するためです。それが私がこの質問について尋ねている主な理由です。
最新のアップデート:
docker v18.09より前のバージョンでは、正しい答えは次のようになります。
ビルド中にボリュームをマウントする方法はありますが、Dockerfileは関係しません。
しかし、それは不十分に述べられ、組織化され、支持された答えでした。docker containsを再インストールしているときに、次の記事を偶然見つけました。
apt-cacher-ngサービスをDockerize
https://docs.docker.com/engine/examples/apt-cacher-ng/
これは、直接/間接的にではなく、この/私の質問に対するDockerの解決策です。これは、Dockerが私たちに提案する正統な方法です。そして、私がここで尋ねようとしたものよりも優れていることを認めます。
もう1つの方法は、新しく承認された回答、たとえばv18.09のビルドキットです。
あなたに合ったものを選んでください。
ありました:解決策がありました-Dockerからではないロッカーですが、そのロッカーが廃止されたので、私は答えを「不可能」に戻します。
旧アップデート:したがって、答えは「不可能」です。この問題はhttps://github.com/docker/docker/issues/3156で幅広く議論されているので、それを回答として受け入れることができます。移植性は、Docker開発者にとって最も重要な問題であることを理解できます。しかし、ドッカーユーザーとして、私はこの欠けている機能に非常に失望していると言わざるを得ません。前述の議論からの引用で私の議論を締めくくりましょう:「Gentooをベースイメージとして使用したいのですが、イメージが構築されたら、1GBを超えるPortageツリーデータをどのレイヤーにも入れたくありません。あなたはインストール中に巨大なポーテージツリーがイメージに表示されなければならないのでなければ、いくつかの素晴らしいコンパクトコンテナーを用意できます。「はい、wgetまたはcurlを使用して必要なものをダウンロードできますが、移植性を考慮しただけで、Gentooベースイメージをビルドするたびに1 GBを超えるPortageツリーをダウンロードする必要があるという事実は、効率的でもユーザーフレンドリーでもありません。さらにさらに、パッケージリポジトリは常に/ usr / portageの下にあるため、Gentooの下では常に移植可能です。繰り返しますが、私はこの決定を尊重しますが、当面の失望を表明させてください。
元の質問の詳細:
から
ボリュームを介してディレクトリを共有する
http://docker.readthedocs.org/en/v0.7.3/use/working_with_volumes/
データボリューム機能は「Docker Remote APIのバージョン1以降で利用可能になっている」とあります。私のドッカーはバージョン1.2.0ですが、上記の記事に記載されている例が機能しないことがわかりました。
# BUILD-USING: docker build -t data .
# RUN-USING: docker run -name DATA data
FROM busybox
VOLUME ["/var/volume1", "/var/volume2"]
CMD ["/usr/bin/true"]
VOLUMEコマンドを使用して、DockerfileでホストにマウントされたボリュームをDockerコンテナーにマウントする適切な方法は何ですか?
$ apt-cache policy lxc-docker
lxc-docker:
Installed: 1.2.0
Candidate: 1.2.0
Version table:
*** 1.2.0 0
500 https://get.docker.io/ubuntu/ docker/main amd64 Packages
100 /var/lib/dpkg/status
$ cat Dockerfile
FROM debian:sid
VOLUME ["/export"]
RUN ls -l /export
CMD ls -l /export
$ docker build -t data .
Sending build context to Docker daemon 2.56 kB
Sending build context to Docker daemon
Step 0 : FROM debian:sid
---> 77e97a48ce6a
Step 1 : VOLUME ["/export"]
---> Using cache
---> 59b69b65a074
Step 2 : RUN ls -l /export
---> Running in df43c78d74be
total 0
---> 9d29a6eb263f
Removing intermediate container df43c78d74be
Step 3 : CMD ls -l /export
---> Running in 8e4916d3e390
---> d6e7e1c52551
Removing intermediate container 8e4916d3e390
Successfully built d6e7e1c52551
$ docker run data
total 0
$ ls -l /export | wc
20 162 1131
$ docker -v
Docker version 1.2.0, build fa7b24f
VOLUME ~/host_dir ~/container_dir
。議論はかなり広範で、その理由は何であるかを要約する短い方法がありますか?