docker存储卷

什么是存储卷

存储卷就是将宿主机的本地文件系统中存在的某个目录直接与容器内部的文件系统上的某一目录建立绑定关系。这就意味着,当我们在容器中的这个目录下写入数据时,容器会将其内容直接写入到宿主机上与此容器建立了绑定关系的目录。

容器数据管理

用户在使用Docker的过程中,往往需要能查看容器内应用产生的数据,或者需要把容器内的数据进行备份,甚至多个容器之间进行数据的共享,这必然涉及容器的数据管理操作。

容器中管理数据主要有两种方式:

数据卷(Data Volumes)将数据放在宿主机,或共享存储的某个目录
数据卷容器(Data Volumes Containers)将数据放在容器里面

改变docker0的网段

[root@localhost ~]# docker run -d --name xt httpd
f82635cd78acd496519e98bec326536681683613c35eac745a1c3aadbb5ca677
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND              CREATED         STATUS         PORTS     NAMES
f82635cd78ac   httpd     "httpd-foreground"   7 seconds ago   Up 6 seconds   80/tcp    xt
[root@localhost ~]# docker inspect xt
                   "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.2",
                    "IPPrefixLen": 16,
[root@localhost ~]# vim /etc/docker/daemon.json
{
          "registry-mirrors": ["https://registry.docker-cn.com"],
          "bip": "192.168.1.1/24"
}

[root@localhost ~]# systemctl restart docker
[root@localhost ~]# docker inspect xt
                 "Gateway": "192.168.1.1",
                    "IPAddress": "192.168.1.2",
                    "IPPrefixLen": 24,

docker重启了xt容器就停掉了,给他加这一段代码,就不会重启停掉容器
把之前的xt容器删掉重新做

[root@localhost ~]# docker run -d --name xt --restart=always httpd
1ca13f023ad98ba5d27a8f0470ee01d7456e26a519cd65f1c1cd924eb9b4796c
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND              CREATED         STATUS         PORTS     NAMES
1ca13f023ad9   httpd     "httpd-foreground"   7 seconds ago   Up 5 seconds
//总是重启  

创建网桥

[root@localhost ~]# docker network create -d bridge --subnet "192.168.1.0/24" --gateway "192.168.1.1" asd
4ce1a69fb4cd1f3c5964a5ef0e4c17f4c6a1976b3d31caa72b40437f1877bf1e
[root@localhost ~]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
a1dec14c081b   bridge    bridge    local
99d7164cf563   host      host      local
0cbe9be9c451   none      null      local
4ce1a69fb4cd   qzl       bridge    local
#查看网桥分配的ip
[root@localhost ~]# docker run -it --rm --network asd busybox
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
17: eth0@if18: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue 
    link/ether 02:42:c0:a8:01:02 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.2/24 brd 192.168.1.255 scope global eth0
       valid_lft forever preferred_lft forever
/ # 

创建两个容器不同网段使用网桥互联

[root@localhost ~]# docker run -it --rm --name b1 busybox
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
19: eth0@if20: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue 
    link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.3/24 brd 172.17.0.255 scope global eth0
       valid_lft forever preferred_lft forever
[root@localhost ~]# docker run -it --rm --network asd busybox
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
23: eth0@if24: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue 
    link/ether 02:42:c0:a8:01:03 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.3/24 brd 192.168.1.255 scope global eth0
       valid_lft forever preferred_lft forever

给b1容器添加添加asd网卡

[root@localhost ~]# docker network connect asd b1  //这个asd是网桥名
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
19: eth0@if20: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue 
    link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.3/24 brd 172.17.0.255 scope global eth0
       valid_lft forever preferred_lft forever
21: eth1@if22: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue 
    link/ether 02:42:c0:a8:01:02 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.2/24 brd 192.168.1.255 scope global eth1
       valid_lft forever preferred_lft forever
/ # ping 192.168.1.3
PING 192.168.1.3 (192.168.1.3): 56 data bytes
64 bytes from 192.168.1.3: seq=0 ttl=64 time=0.810 ms
64 bytes from 192.168.1.3: seq=1 ttl=64 time=0.182 ms
      //asd容器可以ping通b1
/ # ping 192.168.1.2
PING 192.168.1.2 (192.168.1.2): 56 data bytes
64 bytes from 192.168.1.2: seq=0 ttl=64 time=0.271 ms
64 bytes from 192.168.1.2: seq=1 ttl=64 time=0.259 ms
      //b1容器也可以ping通asd
[root@localhost ~]# docker network disconnect asd b1
      //删除网卡

设置永久网卡

[root@localhost ~]# docker run -itd --name b1 busybox sleep 60000
8067692359e54752866a12a45134e9a1ec3ad9fb801f02a3e120bb11364ac262
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND              CREATED          STATUS          PORTS     NAMES
8067692359e5   busybox   "sleep 60000"        11 seconds ago   Up 10 seconds             b1
29aefe96c576   busybox   "sh"                 28 minutes ago   Up 28 minutes             eager_lumiere
1ca13f023ad9   httpd     "httpd-foreground"   58 minutes ago   Up 55 minutes   80/tcp    xt
[root@localhost ~]# docker exec -it b1 /bin/sh
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
27: eth0@if28: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue 
    link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.3/24 brd 172.17.0.255 scope global eth0
       valid_lft forever preferred_lft forever
[root@localhost ~]# docker network connect asd b1
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
27: eth0@if28: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue 
    link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.3/24 brd 172.17.0.255 scope global eth0
       valid_lft forever preferred_lft forever
29: eth1@if30: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue 
    link/ether 02:42:c0:a8:01:02 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.2/24 brd 192.168.1.255 scope global eth1
       valid_lft forever preferred_lft forever
/ # exit
[root@localhost ~]# docker restart b1
b1
[root@localhost ~]# systemctl restart docker
[root@localhost ~]# docker start b1
b1
[root@localhost ~]# docker exec -it b1 /bin/sh
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
37: eth0@if38: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue 
    link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.3/24 brd 172.17.0.255 scope global eth0
       valid_lft forever preferred_lft forever
39: eth1@if40: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue 
    link/ether 02:42:c0:a8:01:02 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.2/24 brd 192.168.1.255 scope global eth1
       valid_lft forever preferred_lft forever
/ # 
      //就算重启网卡也不会掉了

设置镜像数据创建一个新镜像

[root@localhost ~]# docker run -it --name b1 --rm busybox /bin/sh
/ # ls
bin   dev   etc   home  proc  root  sys   tmp   usr   var
/ # mkdir data
/ # echo "hello world" > data/index.html
/ # ls
bin   data  dev   etc   home  proc  root  sys   tmp   usr   var
/ # 
/ # cat data/index.html 
hello world
/ # 
[root@localhost ~]# docker commit -a 'sean <1@2.com>' -c 'CMD ["/bin/sh"]' -p b1 busybox:v0.1      //做一个镜像
sha256:cadbf85bbac26640052d43533468e627cde201154e0921d1192fb60c4e1d0e24
[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED              SIZE
busybox      v0.1      cadbf85bbac2   About a minute ago   1.24MB
busybox      latest    beae173ccac6   4 months ago         1.24MB
[root@localhost _data]# docker run -it --name xt busybox:v0.1 
/ # ls
bin   data  dev   etc   home  proc  root  sys   tmp   usr   var
/ # cat data/index.html 
hello world
/ # 
//用这个镜像做一个容器,里面有之前添加data

容器Volume使用语法:

Docker-managed volume
docker run -it --name CONTAINER_NAME -v VOLUMEDIR IMAGE_NAME

[root@localhost ~]# docker run -it --rm --name b2 -v /data busybox /bin/sh
/ # ls
bin   data  dev   etc   home  proc  root  sys   tmp   usr   var
/ # cat data/xt
cat: can't open 'data/xt': No such file or directory
/ # cat data/abc 
/ # rm -f data/abc 
/ # 
[root@localhost ~]# docker inspect b2
"Source": "/var/lib/docker/volumes/de127a9d46b7616831a91fb508c2055bf60d7b9e546f6b94c79a3af86e5f9ad2/_data",
                "Destination": "/data",
[root@localhost ~]# cd /var/lib/docker/volumes/de127a9d46b7616831a91fb508c2055bf60d7b9e546f6b94c79a3af86e5f9ad2/_data
[root@localhost _data]# ls
[root@localhost _data]# touch abc
[root@localhost _data]# ls
abc
[root@localhost _data]# ls
[root@localhost _data]# 
  //和容器互联,删除容器都会被删除
[root@localhost ~]# docker run -it --rm --name b1 -v /asd:/data busybox
/ # ls
bin   data  dev   etc   home  proc  root  sys   tmp   usr   var
/ # cd data
/data # ls
/data # 

[root@localhost ~]# cd /asd
[root@localhost asd]# echo 'hello world' > index.123456
[root@localhost asd]# ls
index.123456
[root@localhost asd]# cat index.123456 
hello world

/data # ls
index.123456
/data # cat index.123456 
hello world

/data # exit
[root@localhost ~]# 
[root@localhost ~]# docker run -it --rm --name b1 -v /asd:/data busybox
/ # ls
bin   data  dev   etc   home  proc  root  sys   tmp   usr   var
/ # cat data/index.123456 
hello world
/ # 
//里面文件还在,因为主机的文件还在

使用存储卷提供网址内容

[root@localhost ~]# docker run -d --name web -v /web:/usr/local/apache2/htdocs -p 80:80 httpd
ca3190890b49488500eab262fa0dfcae0d0f5c7b7916cf095c5409d1e19f61a7
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND              CREATED         STATUS         PORTS                               NAMES
ca3190890b49   httpd     "httpd-foreground"   8 seconds ago   Up 7 seconds   0.0.0.0:80->80/tcp, :::80->80/tcp   web
ff1e5005013a   httpd     "httpd-foreground"   3 minutes ago   Up 3 minutes   80/tcp                              xt
[root@localhost ~]# ss -antl
State       Recv-Q      Send-Q           Local Address:Port           Peer Address:Port      
LISTEN      0           32               192.168.122.1:53                  0.0.0.0:*         
LISTEN      0           128                    0.0.0.0:22                  0.0.0.0:*         
LISTEN      0           5                    127.0.0.1:631                 0.0.0.0:*         
LISTEN      0           128                    0.0.0.0:111                 0.0.0.0:*         
LISTEN      0           128                    0.0.0.0:80                  0.0.0.0:*         
LISTEN      0           128                       [::]:22                     [::]:*         
LISTEN      0           5                        [::1]:631                    [::]:*         
LISTEN      0           128                       [::]:111                    [::]:*         
LISTEN      0           128                       [::]:80                     [::]:*         
[root@localhost ~]# ls
 公共                     桌面
 漂亮的个人主页HTML源码.zip   abc
 模板                     anaconda-ks.cfg
 视频                     initial-setup-ks.cfg
 图片                    'ў.txt'
 文档                    ╘╪.txt
 下载                     ╤╧┬╘╪.url
 音乐
[root@localhost ~]# mv 漂亮的个人主页HTML源码.zip abc
[root@localhost ~]# cd abc
[root@localhost abc]# ls
漂亮的个人主页HTML源码.zip
[root@localhost abc]# unzip 漂亮的个人主页HTML源码.zip 
Archive:  漂亮的个人主页HTML源码.zip
                  http://www.zzvips.com     

[root@localhost abc]# ls
漂亮的个人主页HTML源码  漂亮的个人主页HTML源码.zip
[root@localhost abc]# mv 漂亮的个人主页HTML源码/* /web/
[root@localhost abc]# cd /web/
[root@localhost web]# ls
服务器之家.url  精品免费商业源码下载.url  css  font  img  index.html  js
[root@localhost web]# 

web效果

posted @ 2022-05-04 23:53  夏天的海  阅读(87)  评论(0)    收藏  举报