docker之数据卷管理

       

目录

1.docker使用

2.优化


       在docker之网络访问中,通过启动了nginx服务进行了访问,只展示了nginx的首页信息,如果想访问我们自己的代码如何操作呢,这就需要使用到数据卷的知识了。在Docker中,要想实现数据的持久化(所谓Docker的数据持久化即数据不随着Container的结束而结束),需要将数据从宿主机挂载到容器中。数据卷的管理可以参考:Docker数据卷管理

1.docker使用

这里通过一个小程序来看看,通过xiaoniaoniaofeifei来看看如何实现数据卷的使用。如果是本地的压缩文件使用xshell可以直接拖动到xshell中进行上传,上传完成之后进行解压。

xiaoniaofeifei软件包下载链接,提取码: jyqy

[root@localhost srv]# ls
xiaoniaofeifei.zip
[root@localhost srv]# unzip xiaoniaofeifei.zip 
Archive:  xiaoniaofeifei.zip
  inflating: sound1.mp3              
   creating: img/
  inflating: img/bg1.jpg             
  inflating: img/bg2.jpg             
  inflating: img/number1.png         
  inflating: img/number2.png         
  inflating: img/s1.png              
  inflating: img/s2.png              
  inflating: 21.js                   
  inflating: 2000.png                
  inflating: icon.png                
  inflating: index.html 
[root@localhost srv]# ls
2000.png  21.js  icon.png  img  index.html  sound1.mp3  xiaoniaofeifei.zip        

将整个目录下的所有信息拷贝至容器中去。先查看一下容器的id

[root@localhost srv]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED             STATUS             PORTS                               NAMES
738b4313c4f7   nginx:latest   "/docker-entrypoint.…"   About an hour ago   Up About an hour   192.168.0.101:49154->80/tcp         pensive_chaplygin
3a885ede5267   nginx:latest   "/docker-entrypoint.…"   About an hour ago   Up About an hour   192.168.0.101:49153->80/tcp         distracted_antonelli
c2c9273e9484   nginx:latest   "/docker-entrypoint.…"   2 hours ago         Up 2 hours         0.0.0.0:81->80/tcp, :::81->80/tcp   mystifying_feistel
6ee5b735e752   nginx:latest   "/docker-entrypoint.…"   2 hours ago         Up 2 hours         192.168.0.101:80->80/tcp            frosty_beaver
e2e1a5cbc833   nginx:latest   "/docker-entrypoint.…"   2 hours ago         Up 2 hours         192.168.0.100:80->80/tcp            jovial_raman
[root@localhost srv]# docker rm -f `docker ps -a -q`    容器太多了删除一下
738b4313c4f7
3a885ede5267
c2c9273e9484
6ee5b735e752
e2e1a5cbc833

接着重新创建一个新的容器

[root@localhost srv]# docker run -d -p 80:80 nginx:latest
e7d08547b7f70eeb16239c73dd5ac572d92a05b6273b13d55f1f5ffe55ec9a81
[root@localhost srv]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS         PORTS                               NAMES
e7d08547b7f7   nginx:latest   "/docker-entrypoint.…"   21 seconds ago   Up 8 seconds   0.0.0.0:80->80/tcp, :::80->80/tcp   kind_haslett

将解压的文件拷贝至如下目录,使用cp命令进行拷贝拷贝至容器的目录下,这里的e7d085**f7为容器的id,接着进入该容器,使用exec

[root@localhost srv]# docker container cp . e7d08547b7f7:/usr/share/nginx/html
[root@localhost srv]# docker exec -it e7d08547b7f7 /bin/bash
root@e7d08547b7f7:/# cd /usr/share/nginx/html/
root@e7d08547b7f7:/usr/share/nginx/html# ls
2000.png  21.js  50x.html  icon.png  img  index.html  sound1.mp3  xiaoniaofeifei.zip
root@e7d08547b7f7:/usr/share/nginx/html# 

接着访问一下192.168.0.101,这里的ip是宿主机的ip

2.优化

    使用过程中发现有一个bug需要修复下,需要修改下index.html

root@e7d08547b7f7:/usr/share/nginx/html# ls
2000.png  21.js  50x.html  icon.png  img  index.html  sound1.mp3  xiaoniaofeifei.zip
root@e7d08547b7f7:/usr/share/nginx/html# vi index.html
bash: vi: command not found

发现没有vi命令,这时可以现场装一个vi,但是太麻烦了。因此这里代码尽量不要使用cp命令放进去,退出到src目录,使用exit退出当前容器。调试的时候尽量放置在宿主机上,这样一边修改一边调试。

[root@localhost srv]# docker run -d -p 81:80 -v /srv:/usr/share/nginx/html nginx:latest
-v --volumn
/srv 宿主机目录
/usr/share/nginx/html  容器目录

再次进入到Ip:port中进行访问,注意这里需要刷新一下,f5普通刷新,shift+f5强制刷新。

使用者这种-v的好处就是,如果遇到bug就可以直接在宿主机上直接修改。比如现在有个标题

[root@localhost srv]# ls
2000.png  21.js  icon.png  img  index.html  sound1.mp3  xiaoniaofeifei.zip
[root@localhost srv]# vi index.html 

在刷新,发现标题已经修改。使用docker volume 查询volume命令,使用ls查询当前有无卷

[root@localhost srv]# docker volume ls
DRIVER    VOLUME NAME
[root@localhost srv]# 
[root@localhost _data]# docker run -d -p 82:80 -v teset:/usr/share/nginx/html nginx:latest
5d5d541f2394ff2a6975e31333f99014db8cf7f6c6c0a257d8bfd048d3b192e9

使用test,发现没有会自动创建一个卷

[root@localhost srv]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS                                             NAMES
2f069022da24   nginx:latest   "/docker-entrypoint.…"   52 seconds ago   Up 6 seconds    80/tcp, 0.0.0.0:49153->82/tcp, :::49153->82/tcp   pedantic_yalow
ea037ed65357   nginx:latest   "/docker-entrypoint.…"   11 minutes ago   Up 11 minutes   0.0.0.0:81->80/tcp, :::81->80/tcp                 beautiful_haibt
e7d08547b7f7   nginx:latest   "/docker-entrypoint.…"   6 hours ago      Up 6 hours      0.0.0.0:80->80/tcp, :::80->80/tcp                 kind_haslett
[root@localhost srv]# docker volume ls
DRIVER    VOLUME NAME
local     teset

那这个卷有什么好处呢?

[root@localhost srv]# docker volume inspect teset 
[
    {
        "CreatedAt": "2021-05-05T14:50:10+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/teset/_data",
        "Name": "teset",
        "Options": null,
        "Scope": "local"
    }
]

切换对应的挂载目录

[root@localhost _data]# ls
50x.html  index.html

访问一下首页

[root@localhost _data]# rm -fr *

[root@localhost _data]# cp /srv/*  .

再次刷新,就可以访问。

[root@localhost _data]# docker run -d -p 83:80 -v teset:/usr/share/nginx/html nginx:latest
1e98cb4a3c77a7f5201bfe10fd20a36ced68225e7608121bbbfbbabffb13a1e9

再次启动一个83的容器,这样就实现了数据共享。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值