Day 10 : Docker基本操作 Volume篇

Docker 资料保存

Docker内空间的资料能不能保存下来? 当我关闭一个Container後下次重开一个新的Container能不能够承接之前的档案? 其实这些都是可以的。接下来介绍一下Docker Volume,这是docker资料持久层。

  • docker volume create <VolName> 建立新的保存空间并命名 (可以用-d来指定位置)
  • docker volume ls 列出本机上所有的volume
  • docker volume inspect <VolName> 查看该volume相关
  • docker volume prune 删除所有未被container使用到的volume
  • docker volume rm <VolName> 删除volume

如下图,建立一个名字叫做myvol的空间。用inspect可以看到空间的路径。
https://ithelp.ithome.com.tw/upload/images/20210912/20119044r1SnvQUrBq.png

要是不-d指定特定空间,系统会自动帮你生成空间,然而具体会在电脑的哪里呢?

  • Windows 版会在 \\wsl$\docker-desktop-data\version-pack-data\community\docker\volumes
  • Linux 版会在 /var/lib/docker/volumes/

windows版:
https://ithelp.ithome.com.tw/upload/images/20210912/20119044iqhPByYRX4.png

将Volume挂载到container

在container run时加上-v就能挂载了,参数为 -v <VolName>:<内部绝对路径>,要是VolName不存在Docker会自动帮你建立一个。举昨天例子来说,我们将myvol挂载到新建立的Web_App_Vol Container中,myvol空间会保存/usr/local/apache2/htdocs/目录下的资料夹。

  • docker run -it -d -p 8081:80 -v myvol:/usr/local/apache2/htdocs/ --name Web_App_Vol httpd:2.4

现在进入修改并删除container,然後重新挂载新的container

# 进入container
docker exec -it Web_App_Vol bash
# 改写index.html
echo "<h1>Hello Docker Vol</h1>" > /usr/local/apache2/htdocs/index.html
# 离开container
exit
# 停下并删除container
docker stop Web_App_Vol
docker rm Web_App_Vol

# 重新挂载新的Container
docker run -it -d -p 8082:80 -v myvol:/usr/local/apache2/htdocs/ --name Web_App_Vol2 httpd:2.4

可以发现重新挂载的Container,继承了之前修改的东西
https://ithelp.ithome.com.tw/upload/images/20210912/20119044SAyZPR6a5s.png

内外资料映射

但是每次修改container内的资料都要用exec进去,很麻烦。有没有能够在container外面改好里面自动修改的方式呢? 有,就是volume (废话,不然我就不会放在Volume章节了)
-v指令本质上就是内外空间映射。

旧版本Window版的坑

window版不能直接挂载,要先调一下设定。

  1. 选择要挂载的目录
  2. 打开Docker Desktop
  3. General > share dirve 挂载相应路径,该路径底下的资料夹才能被挂载

https://ithelp.ithome.com.tw/upload/images/20210912/20119044lvkFEEYyEQ.png

新版本window desktop可以直接挂载,指令:

  • docker run -v <外部绝对路径>:<内部路径> <ImageName>

举例来说,我在windows电脑//e/program/ITBAN/DockerExample下放了index.html要映射给/usr/local/apache2/htdocs

docker run -it -d --name Web_Vol -p 8081:80 -v //e/program/ITBAN/DockerExample:/usr/local/apache2/htdocs httpd:2.4

现在在外部修改就能直接影响到Container内部了。

https://ithelp.ithome.com.tw/upload/images/20210912/20119044Hfae7ZBBmp.png

今天打了AZ,希望明天能继续写下去。


<<:  PostgreSQL 资料储存与 mybatis

>>:  Day7:CoroutineScope:launch() 以及 async()

第 54 天 - 学习 PHP CLI

使用 apt install php7.4-cli 安装 安装 log: root@test:/ho...

【Day27】音乐情绪与乐理

简述音乐情绪模型 看完了昨天的介绍之後,我们知道音乐跟情绪是有相关且可以被分类的,而把这其中关系模型...

【Day23】人力资源篇-Attendances

#odoo #开源系统 #数位赋能 #E化自主 员工上下班打卡,这也许是最贴近所有上班族的流程,更是...

Alpine Linux Porting (1.999) The light at the end of tunnel

一样先上进度log: + exec /bin/busybox switch_root /sysroo...

安装套件

今天要介绍的是在Chrome和VS Code中所安装的套件 在chrome中安装Vue.js dev...