Docker - 卷 - 数据持久化

目录

知识点1:镜像本质就是一个文件

docker save -o nginx.tar nginx  将docker容器里的镜像导出

docker load

docker export -o my_nginx.tar my_nginx  导出正在运行的容器里的文件系统成一个归档文件

知识点2:根据镜像创建容器  docker create

docker create -p 7000:80 --name sc-nginx-2 nginx:1.22.0

知识点3:容器有哪些状态?

知识点4:限制cpu和内存使用

知识点5:docker inspect + 容器名 查看容器详细信息

知识点6:微服务

知识点7:IaaS,PaaS,SaaS,BaaS 的概念

 知识点8:多容器之间数据共享问题

容器的数据保存问题 - 数据持久化

正常停止容器,容器里面的数据会丢失吗?

示例:连接上容器里的数据库,新建一个表,里面添加内容

 怎么查看卷id分别对应哪个容器?示例:使用docker inspect 过滤来查看卷id

docker volume ls   : 查看卷id

知识点9:容器共享宿主机的文件

使用nginx镜像,运行一个容器

在宿主机上面新建文件夹/web,新建index.html文件

将宿主机的/web/index.html文件docker cp到容器里面

怎么让容器里的文件共享使用宿主机的文件?

 知识点10:一台机器的多个容器之间共享数据

创建和管理volume 数据卷

docker  volume  create  +  数据卷名  创建一个数据卷

docker  inspect  nginx-web : 查看卷信息

在创建好的数据卷里面新建index.html文件

新建几个容器,使用nginx-web卷


知识点1:镜像本质就是一个文件

镜像其实就是一个包含了程序代码,基础操作系统,以及程序启动所依赖的软件和库,在容器运行的整体单元

docker save -o nginx.tar nginx  将docker容器里的镜像导出

[root@docker ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
mysql        5.7.39    daff57b7d2d1   27 hours ago   430MB
nginx        latest    2b7d6430f78d   2 days ago     142MB
[root@docker ~]# ls
anaconda-ks.cfg
[root@docker ~]# docker save -o nginx.tar nginx
[root@docker ~]# ls
anaconda-ks.cfg  nginx.tar
[root@docker ~]# 

######################################################## 

docker load <nginx.tar 将镜像导入docker

docker export -o my_nginx.tar my_nginx  导出正在运行的容器里的文件系统成一个归档文件

########################################################  

知识点2:根据镜像创建容器  docker create

docker create -p 7000:80 --name sc-nginx-2 nginx:1.22.0

 启动创建好的容器

 所以创建容器使用docker run比较方便

docker run = docker create + docker pull + docker start

 ########################################################  

知识点3:容器有哪些状态?

created(已创建)
restarting(重启中)
running(运行中)
removing(迁移中)
paused(暂停)
exited(停止)
dead(死亡)

 ########################################################  

知识点4:限制cpu和内存使用

--rm 一旦退出容器,容器会自动删除

-m 限制内存 byte

--cpu-shares 2  限制使用cpu计算资源(算力)

--cpus 1 限制使用1个cpu

-it centos:7 : 

--cpuset-cpus 0 :限制使用编号为0的cpu

  ########################################################  

知识点5:docker inspect + 容器名 查看容器详细信息

[root@docker scdocker]# docker inspect sc-nginx
            "Gateway": "172.17.0.1",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "172.17.0.2",
            "IPPrefixLen": 16,
            "IPv6Gateway": "",
            "MacAddress": "02:42:ac:11:00:02",
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "ab6c8af427413561c62c317f8fca4a00f2302985659369b7864e525343d587cb",
                    "EndpointID": "31ee662cb4cf61a28da11561e8d822fabf64908f083b980e391a7ef9157af0c9",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.2",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:02",
                    "DriverOpts": null

  ########################################################   

知识点6:微服务

微服务:

        微小的服务,尽量将某个功能或者服务独立出来,跑在单独的容器里面

        将一个复杂的系统,拆分成很多小的系统,很多小的系统都需要单独开发,然后单独地部署使用,部署到容器里面,独立地对外提供服务,这个小的服务就简称微服务,人力的成本,部署服务器的成本

使用容器的优点:降低成本,省钱

微服务背后就是容器

  ########################################################    

知识点7:IaaS,PaaS,SaaS,BaaS 的概念

Iaas:Infrastructure as a service 基础设施即服务

        作用是提供虚拟机或者其他资源作为服务提供给用户,

        卖基础设施--卖云服务器  --阿里云,腾讯云,google云等

PaaS:Platform as a service 平台即服务

        背后有一个公司搭建好了平台,我们去购买服务就可以了

SaaS:Software as a Service 

        作用是提供应用作为服务给客户,通过这种模式,用户只要接上网络,

        并通过浏览器,就能直接使用在云端上运行的应用,而不需要考虑类似安装琐事

BaaS: BlockChain as a Service 

        卖区块链服务的。

   ########################################################    

 知识点8:多容器之间数据共享问题

容器的数据保存问题 - 数据持久化

正常停止容器,容器里面的数据会丢失吗?

不会丢失,数据会保存到卷里面

示例:连接上容器里的数据库,新建一个表,里面添加内容

 

 ########################################################    

 怎么查看卷id分别对应哪个容器?
示例:使用docker inspect 过滤来查看卷id

[root@docker volumes]# docker inspect sc-mysql-1 | egrep "volumes"
                "Source": "/var/lib/docker/volumes/71394fb4bfe1cdacd3622a435063ac43f8638c806dcffeca4bdada2a6d1cf953/_data",

docker volume ls   : 查看卷id

[root@docker wangsh]# docker volume ls
DRIVER    VOLUME NAME
local     71394fb4bfe1cdacd3622a435063ac43f8638c806dcffeca4bdada2a6d1cf953
local     5774708aa65ec9a5adc2b7ebd32b43e858169bacfd8dd3d8d3f153d5feccd983
local     a19c532653e262509d1e0316c60d7a87f0c878c8586cad5cf9c11f731ce50fa4
local     ecbbfaa3571c0e62e7436ab4381cbfecf3b5b47a6f8e0d9d3f2ba3f91b2fc57c
local     ed39f0259834f200157f7ec1a2fd95199173eed1e1ff07bba8ea82f504f7001f
local     my_wordpress_db_data
local     my_wordpress_wordpress_data

########################################################    

知识点9:容器共享宿主机的文件

使用nginx镜像,运行一个容器

docker run -d -p 8803:80 --name yangyj-nginx nginx 

在宿主机上面新建文件夹/web,新建index.html文件

将宿主机的/web/index.html文件docker cp到容器里面

[root@docker web]# docker cp /web/index.html yangyj-nginx:/usr/share/nginx/html
[root@docker web]# cat index.html 
welcome to yang yong jie's web!!

但是现在我们修改宿主机的文件,容器内部的index文件并不会修改

怎么让容器里的文件共享使用宿主机的文件?

重新启动一个容器使用/web目录,挂载进入容器,避免频繁的cp到容器里面

docker run -d -p 8803:80 --name yangyj-nginx -v /web:/usr/share/nginx/html  nginx

-v  :指定宿主机的文件夹挂载到容器里面的路径  volume  --》文件夹和文件夹之间的映射

########################################################     

 知识点10:一台机器的多个容器之间共享数据

创建和管理volume 数据卷

docker  volume  create  +  数据卷名  创建一个数据卷

[root@docker web]# docker volume create nginx-web
nginx-web
[root@docker web]# docker volume ls
DRIVER    VOLUME NAME
local     71394fb4bfe1cdacd3622a435063ac43f8638c806dcffeca4bdada2a6d1cf953
local     5774708aa65ec9a5adc2b7ebd32b43e858169bacfd8dd3d8d3f153d5feccd983
local     a19c532653e262509d1e0316c60d7a87f0c878c8586cad5cf9c11f731ce50fa4
local     ecbbfaa3571c0e62e7436ab4381cbfecf3b5b47a6f8e0d9d3f2ba3f91b2fc57c
local     ed39f0259834f200157f7ec1a2fd95199173eed1e1ff07bba8ea82f504f7001f
local     my_wordpress_db_data
local     my_wordpress_wordpress_data
local     nginx-web
[root@docker web]# cd /var/lib/docker/volumes/
[root@docker volumes]# ls
5774708aa65ec9a5adc2b7ebd32b43e858169bacfd8dd3d8d3f153d5feccd983  backingFsBlockDev                                                 metadata.db                  nginx-web
71394fb4bfe1cdacd3622a435063ac43f8638c806dcffeca4bdada2a6d1cf953  ecbbfaa3571c0e62e7436ab4381cbfecf3b5b47a6f8e0d9d3f2ba3f91b2fc57c  my_wordpress_db_data
a19c532653e262509d1e0316c60d7a87f0c878c8586cad5cf9c11f731ce50fa4  ed39f0259834f200157f7ec1a2fd95199173eed1e1ff07bba8ea82f504f7001f  my_wordpress_wordpress_data
[root@docker volumes]# cd nginx-web/
[root@docker nginx-web]# ls
_data
[root@docker nginx-web]# cd _data/

docker  inspect  nginx-web : 查看卷信息

[root@docker _data]# docker inspect nginx-web
[
    {
        "CreatedAt": "2022-08-31T21:49:46+08:00",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/nginx-web/_data",
        "Name": "nginx-web",
        "Options": {},
        "Scope": "local"
    }
]
[root@docker _data]# 

在创建好的数据卷里面新建index.html文件

[root@docker _data]# vim index.html
[root@docker _data]# ls
index.html
[root@docker _data]# cat index.html 
welcome to sanchunag

新建几个容器,使用nginx-web卷

[root@docker _data]# docker run -d -p 8805:80 --name yangyj-nginx-2 -v nginx-web:/usr/share/nginx/html nginx
0f255c218081b17b1777acdff2a8ef8bffe743aa50f77772f7098b5fa0effaca
[root@docker _data]# docker run -d -p 8806:80 --name yangyj-nginx-3 -v nginx-web:/usr/share/nginx/html nginx
5896e0abc9bddc81960cc99926360df4a020f51858c5c7355ea13a0eaad4427e
[root@docker _data]# docker run -d -p 8807:80 --name yangyj-nginx-4 -v nginx-web:/usr/share/nginx/html nginx
eda9896eb1677bb68747464ea9c422ddfe91ae7d6e69a5a1c8b86063081d9d3f
[root@docker _data]# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED              STATUS              PORTS                                                    NAMES
eda9896eb167   nginx          "/docker-entrypoint.…"   About a minute ago   Up About a minute   0.0.0.0:8807->80/tcp, :::8807->80/tcp                    yangyj-nginx-4
5896e0abc9bd   nginx          "/docker-entrypoint.…"   2 minutes ago        Up 2 minutes        0.0.0.0:8806->80/tcp, :::8806->80/tcp                    yangyj-nginx-3
0f255c218081   nginx          "/docker-entrypoint.…"   4 minutes ago        Up 4 minutes        0.0.0.0:8805->80/tcp, :::8805->80/tcp                    yangyj-nginx-2

访问nginx服务:

 

 当这几个容器使用的一个数据卷发送变化以后,所有容器的数据都会变化

 ########################################################    

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值