类比挂载磁盘
我们可以把volume
看做挂载磁盘,将宿主机的一个目录挂载到容器内的某个目录,那么实际的文件是存储在宿主机的目录的,容器内只是一个挂载目录,并不存储实际文件。
用处
容器的存储和网络都是和宿主机隔离的,Volume给了从宿主机访问容器内目录的方法。Volume经常用于持久化容器的数据,比如数据库;暴露配置文件,在宿主机方便的修改容器内的文件。
持久化数据
对于一个数据库的容器,我们得保证当容器宕了以后数据不会丢失,我们可以利用volume
将容器内的数据目录映射到宿主机的目录。上面提到,由于实际的文件存储在宿主机,容器内是挂载目录,所以容器销毁,在宿主机的数据目录并不会受到影响。
比如postgresql数据库:
docker run -d \
-p 5432:5432 \
-v ~/postgresql-data:/var/lib/postgresql/data
image_address
-v
参数便是volume
的设置,也可以使用--volume
,其值是冒号分割的两个目录,左边是宿主机设置存储数据的目录,右边是docker容器内部的数据目录。这样设置之后,即使容器由于某种原因挂掉,使用相同配置重新启动,容器便会利用宿主机的volume
目录恢复挂掉之前的状态。这里需要注意一点,宿主机的目录在两种情况下,容器才会启动成功: 空目录或者与容器内部待映射目录结构完全一致,否则启动不成功,空目录要注意.开头的隐藏文件也不能存在。
暴露配置文件
例如,nginx是以容器的方式启动,我们添加应用后,要修改nginx
的配置,那么一般的做法是首先进入容器: docker exec -it nginx sh
,修改/etc/nginx/nginx.conf
或者其它的配置文件。修改完成后,重启即可生效,docker restart nginx
。