如何创建docker卷设备/主机路径

时间:2018-04-20 22:06:46

标签: docker docker-volume

我相信有一种简单的方法可以将文件复制到已经安装到容器的docker卷中。

How to copy multiple files into a docker data volume

引用的

docker cp /tmp/my_data/. my_container:/my_data

但是,如何使用已包含文件的docker volume create --name my-volume创建命名卷? 我已经读过将cp文件导入{{.Mountpoint}}并不是一个好主意。

我是docker及其所有新手的新手,如果我对卷的基本理解不正确,请致歉。

3 个答案:

答案 0 :(得分:3)

方法#1 - COPY

将文件从主机复制到容器

docker cp /path/of/the/file <Container_ID>:/path/of/he/container/folder

以上approch的问题是,它不会保留卷或文件或目录,因为您删除容器将丢失。这仅建议用于临时安装。

方法#2 - 卷安装

将卷从主机轻松到容器

步骤1:使用自定义路径创建卷

docker volume create --name my_test_volume --opt type=none --opt device=/home/jinna/Jinna_Balu/Test_volume --opt o=bind

步骤2:安装到容器或swarm服务

docker run -d \
  --name devtest \
  --mount source=my_test_volume,target=/app \
  nginx:1.11.8-alpine

我们可以使用以下.yaml文件

执行上述两个步骤
version: '3'
services:
  nginx:
    image: nginx:1.11.8-alpine
    ports:
      - "8081:80"
    volumes:
      - my_test_volume:/usr/share/app
volumes:
  my_test_volume:
    driver: local
    driver_opts:
       o: bind
       type: none
       device: /home/jinna/Jinna_Balu/Test_volume

用docker-compose

运行上面的yml
docker-compose up -d

注意:在执行docker-compose之前创建文件夹路径。

将文件调整以保持持久性的良好做法。

答案 1 :(得分:1)

创建一个卷。

$ docker volume ls | grep my-volume
$ docker run -it --rm -d --name tmp -v my-volume:/mnt alpine
$ docker volume ls | grep my-volume
local               my-volume
$ docker exec tmp ls -l /mnt
total 0
$ 

将文件复制到容器中。

$ docker cp . tmp:/mnt
$ docker exec tmp ls -l /mnt
total 4
-rw-r--r--    1 501      50              93 Apr 20 22:53 Dockerfile
$ ls
Dockerfile
$ 

清理。

$ docker rm -f tmp
tmp
$ 

检查。

$ docker run --rm -v my-volume:/mnt alpine ls /mnt
Dockerfile
$

答案 2 :(得分:0)

在容器之间绑定卷 和主机。最简单的方法是使用体积安装。我们可以在启动它之前设置容器(其图像,端口,..等)

从图像构建容器:docker-compose build 要启动容器:docker-compose up

docker-compose文件中的Volumes键用于设置绑定。 这意味着我们更新容器中卷的内容 它甚至在停止容器后仍然存在。

我们可以从本地目录或命名的docker卷绑定卷,请参阅下面的示例

我们可以在您的Dockerfile中使用COPY或ADD,以便在docker容器中提供本地diroctory的内容。

read docs here

version: "3.2"
services:
  web:
    image: nginx:alpine
    ports:
      - "80:80"
    volumes:
      - type: volume
        source: mydata
        target: /data
        volume:
          nocopy: true
      - type: bind
        source: ./static
        target: /opt/app/static

    networks:
      webnet:

    volumes: