Rumah  >  Soal Jawab  >  teks badan

Dockerfile 中的Volume有什么意义,光用docker run -v效果相同吗?

Dockerfile 中有一个 VOLUME 命令,可以把挂载一个目录到主机目录,但是在主机目录下的名字是随机的,除非用户用 -v 指定,但是如果在 Dockerfile 中不用 VOLUME,只在运行时用 -v 指定也能达到效果,那么就有一个问题,VOLUMEDockerfile 中到底有多少用,在 Host 下创建了几个用户一般找不到的文件到底有多少使用价值,大部分情况下用户都是要手动使用 -v 重新指定挂载目录,那 VOLUME 命令就显得很鸡肋。

VOLUME 是否有什么比较重要的用处我没有理解呢?

PHP中文网PHP中文网2707 hari yang lalu600

membalas semua(2)saya akan balas

  • 迷茫

    迷茫2017-04-24 09:11:15

    Saya juga mempunyai beberapa soalan tentang perkara ini, jadi saya menemui beberapa maklumat dan menyatakan pendapat saya.

    Menemui panduan pengguna rasmi: https://docs.docker.com/engine/userguide...

    Saya belajar sesuatu daripada ini: VOLUME bukan sekadar pernyataan, ia akan memuatkan semula laluan yang ditentukan. Saya juga menemui ini melalui bekas periksa.

    Ini adalah VOLUME yang ditentukan dalam Dockerfile, tanpa menyatakan -v Lihat maklumat Lekapan bekas:

    "Mounts": [
            {
                "Name": "b3e2dcacd3f9f40b43ccd5773d45ca74f0f49b02d3da17749cb378ff9f59bb67",
                "Source": "/var/lib/docker/volumes/b3e2dcacd3f9f40b43ccd5773d45ca74f0f49b02d3da17749cb378ff9f59bb67/_data",
                "Destination": "/etc",
                "Driver": "local",
                "Mode": "",
                "RW": true
            }
        ],

    Ini berdasarkan yang sebelumnya, menyatakan -v untuk melihat maklumat Lekapan bekas:

     "Mounts": [
            {
                "Source": "/etc",
                "Destination": "/etc",
                "Mode": "",
                "RW": true
            }
        ],

    Kemudian anda pergi ke direktori /var/lib/docker/volumes/b3e2dcacd3f9f40b43ccd5773d45ca74f0f49b02d3da17749cb378ff9f59bb67/_data dan lihat, dan ia akan menjadi lebih jelas.

    Anda boleh memahami VOLUME sebagai menyalin folder volum yang ditentukan daripada imej ke /var/lib/docker/volumes/xxxxxxxxx/文件夹 setempat, dan kemudian melekapkan folder setempat ke dalam bekas.

    Pada asasnya, ia hanya setara dengan memasang folder setempat.

    Teruskan menambah, kerana VOLUME sebenarnya mencipta folder baharu dan melekapkannya, jadi sebenarnya terdapat tiga situasi untuk folder di dalam bekas:
    1 Sama ada VOLUME mahupun -v dinyatakan. Ini adalah folder biasa .
    2. VOLUME ditentukan tanpa -v Folder jenis ini boleh dikongsi antara bekas yang berbeza, tetapi tidak boleh diubah suai secara setempat.
    3. Folder dengan -v ditentukan boleh dikongsi antara bekas yang berbeza dan boleh diubah suai secara setempat.

    Mari kita hitung situasi yang perlu dikongsi antara bekas yang berbeza dan tidak perlu diubah suai secara tempatan.

    Pertama sekali, kami terlebih dahulu memahami cara mendapatkan data dinamik dalam bekas:
    1 Sediakan secara setempat, lekapkan pada bekas
    2. Sediakan dari jauh, muat turun dari jauh
    3. Jana dan sediakan. , di dalam bekas Jana

    Tiada satu pun daripada dua arahan yang terakhir perlu diubah suai secara setempat, tetapi data dinamik yang mereka hasilkan mungkin perlu dikongsi.
    Muat turun arahan, seperti klon git, tarik kod terus dari pelayan git tanpa memasang folder setempat.
    Untuk menjana arahan, seperti jekyll (penjana laman web statik), anda boleh melekapkan folder kod, dan kemudian fail halaman web statik yang dijana dalam direktori binaan perlu disediakan kepada pelayan Apache, kemudian anda perlu menentukan bina direktori sebagai VOLUME.

    balas
    0
  • 高洛峰

    高洛峰2017-04-24 09:11:15

    Perintah

    VOLUME terutamanya berguna dalam persekitaran pembangunan:

    1. Apabila mengedit kod, edit terus pada mesin hos, dan kemudian jalankan secara serentak dalam docker. Ini boleh memaksimumkan prestasi persekitaran pembangunan.

    2. Untuk VOLUME Saya lebih suka menggunakan docker-compose untuk spesifikasi:

    db:
      image: postgres
    web:
      build: .
      command: python manage.py runserver 0.0.0.0:8000
      volumes:
        - .:/code
      ports:
        - "8000:8000"
      links:
        - db

    docker-compose boleh menggabungkan dan menjalankan pelbagai perkhidmatan Contoh di atas adalah untuk menjalankan perkhidmatan web dan perkhidmatan db secara berasingan, yang sangat sesuai untuk membina persekitaran yang kompleks.

    balas
    0
  • Batalbalas