欢迎光临范阳布衣的运维博客
分享工作和学习中的知识、技术

docker-管理应用程序数据

将Docker宿主机的数据挂载到容器

Docker提供三种不同的方式将数据从宿主机挂载到容器中:
volumes,bind mounts和tmpfs。 volumes:Docker管理宿主机文件系统的一部分(/var/lib/docker/volumes)。
bind mounts:可以存储在宿主机系统的任意位置。
tmpfs:挂载存储在宿主机系统的内存中,而不会写入宿主机的文件系统。

Volume

docker volume create 创建数据卷

[root@docker ~]# docker volume create nginx-vol
nginx-vol

docker volume ls 查看当前的数据卷

[root@docker ~]# docker volume ls
DRIVERVOLUME NAME
localnginx-vol

docker volume inspect 查看数据的详细信息

[root@docker ~]# docker volume inspect nginx-vol
[
    {
"CreatedAt": "2018-06-26T17:00:44+08:00",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/nginx-vol/_data",
"Name": "nginx-vol",
"Options": {},
"Scope": "local"
    }
]

使用数据卷创建容器

第一种使用数据卷创建容器

[root@docker ~]# docker container run -d -it --name nginx-vol --mount  src=nginx-vol,dst=/usr/share/nginx/html nginx
f7ef0f178af17e694849a6858b219b9863c4c104defe2ad08f9bcfd73e3bb82b

第二种使用数据卷创建容器

[root@docker ~]# docker container run -d -it --name nginx-vol02 -p 87:80 -v nginx-vol:/usr/share/nginx/html nginx

查看数据卷数据是否共享

进入容器查看数据

[root@docker ~]# docker container exec -it nginx-vol bash
root@f7ef0f178af1:/# ls /usr/share/nginx/html/
50x.htmlindex.html

在宿主机中查看容

“`python器挂载卷的内容

[root@docker ~]# ls /var/lib/docker/volumes/nginx-vol/_data/
50x.htmlindex.html

### docker volume rm清理数据卷

#### 停止并删除使用数据卷的容器

[root@docker ~]# docker container rm -f $(docker container ps -aq)
#### 删除数据卷
```python
[root@docker ~]# docker volume rm nginx-vol
nginx-vol

Ø  注意:

  • 数据卷可以用做共享使用
  • 如果没有指定卷,自动创建一个匿名卷,名称为随机数
  • 建议使用–mount,更通用

Bind Mounts

将宿主机中已有的文件或名录挂载到宿主机中,若宿主机中挂载的目录不存在,会提示bind mount的挂载类型,会将容器里挂载的目标目录隐藏。

docker: Error response from daemon: invalid mount config for type "bind": bind source path does not exist.

所以绑定的源目录必须存在

用卷创建一个容器

先创建绑定的目录

[root@docker ~]# mkdir -p /app/wwwroot

运行创建容器

[root@docker ~]# docker container run -it -d --name nginx-bind --mount type=bind,src=/app/wwwroot,dst=/usr/share/nginx/html nginx
4a907f03fce4f61a747f5902dfb6954a9d04e5c9db59d6f96f616d68792bd5b8

登录容器后,查看容器目录下没有内容

[root@docker ~]# docker container exec -it nginx-bind bash
root@4a907f03fce4:/# ls /usr/share/nginx/html/
root@4a907f03fce4:/#

另一种bind mount形式

[root@docker ~]# docker container run -it -d --name nginx-bind-v -p 8081:80 -v /app/wwwroot/:/usr/share/nginx/html nginx
55685033cb57680fa0cbd727d63bdb27ba73b3fc46ed03accbb8470b0ad3776e

验证绑定

docker container inspect nginx-bind
………………….
"Mounts": [
            {
"Type": "bind",
"Source": "/app/wwwroot",
"Destination": "/usr/share/nginx/html",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
            }
        ],
………………………

清理

[root@docker ~]# docker container stop nginx-bind nginx-bind-v
nginx-bind
nginx-bind-v
[root@docker ~]# docker container rm nginx-bind nginx-bind-v
nginx-bind
nginx-bind-v

Ø 注意

  • 如果源文件/目录没有存在,不会自动创建,会抛出一个错误。
  • 如果挂载目标在容器中非空目录,则该目录现有内容将被隐藏。
未经允许不得转载:范阳布衣 » docker-管理应用程序数据