Docker&Kubernetes

docker volume

2018-12-19  本文已影响65人  张培_

Volume概念

众所周知,Docker Image可以理解成多个只读文件叠加而成,因此Docker Image是只读的。

当我们将其运行起来,就相当于在只读的Image外包裹了一层读写层变成了容器。

当你删除容器之后,使用这个镜像重新创建一个容器,此时的镜像的只读层还和原来的一样,但是你在读写层的修改全部都会丢失。

那么问题就来了,如果想要持久化在读写层的数据,该怎么利用docker做到呢?

docker使用volume实现数据的持久化,不仅如此volume还能帮助容器和容器之间,容器和host之间共享数据。

Volume如何在mac上持久化数据

如果想要持久化数据,就必须将读写层的数据暂存在host machine,因此当你使用:

以上两种指令都可以帮助你创建一个Volume,其实是在host machine上创建一个directory。

常在mac上用docker的人应该知道,和Linux不同,在mac上用docker会在mac上启动一个虚拟机运行docker,因此volume创建的directory并不在你的machine上,而是在虚拟机中。

那么如何知道我的volume创建在host machine的什么位置呢?

你可以看到上图中有volume有一些是自己命名的有一些是一串数字:
- 自己命名的是使用docker volume create --name **创建的,比如haha 是使用docker volume create --name haha
- 数字Volume是在创建container的同时创建的

那么如何登录到docker虚拟机中呢?

使用Volume有什么优势呢

主机和容器之间的数据共享

容器和容器之间的数据共享

使用--volumes-from, docker run -it -h NEWCONTAINER --volumes-from container-test debian /bin/bash 意思是,将container-test这个container中的volume挂载到当前将要运行起来的容器中。前提是container-test中的volumes必须被创建过,但是container-test可以是被stop的,原因是volume只能被手动删除,不是随着容器停止而被删除

数据容器

准备一个容器专门用来做数据容器,比如docker run -d -v /dbdata --name dbdata postgres echo Data-only container for postgres运行postgres这个容器然后给他配置一个volume,其他容器都可以--volumes-from到这个volume,数据容器可以不在运行状态甚至可以被删除,只要volume创建了即可。

docker-compose 配置Volumes

虽然有很多方式创建volume但是感觉最方便的还是用docker-compose

version: "3.2"
services:
  web:
    image: alpine
    volumes:
      - ~/test:/data

docker-compose可以很方便的实现容器和容器间,容器和主机间数据共享。

就是你创建的,然后volumes: - mydata:/data 就是将你创建的volume挂载到容器中,此时web和web1共享pezhang_mydata volume

上一篇下一篇

猜你喜欢

热点阅读