How to create docker volume device/host path

create a volume.

$ 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
$ 

Copy a file to a container.

$ 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
$ 

clean up.

$ docker rm -f tmp
tmp
$ 

check.

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

Approach #1 - COPY

To copy the file from the host to the container

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

Issue with the above approch is, it will not persists the volume or file or dir, as you remove the container it will be lost. This is suggested only for temporary pupose.

Approach #2 - Volume Mounting

Mouting the volume from the host to container

Step1: Create the volume with the custom path

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

Step2 : Mount to the container or swarm service

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

We can do both of the above steps with below .yaml files

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

RUN the above yml with docker-compose

docker-compose up -d

NOTE: create the folder path before you do docker-compose.

Good practice to have files mouted to maintain the persistency.