精选文章 docker-数据卷与网络

docker-数据卷与网络

作者:凭果子认树 时间: 2021-02-05 10:00:11
凭果子认树 2021-02-05 10:00:11
【摘要】数据卷

Docker提供三种方式将数据从宿主机挂载到容器中:
• volumes:Docker管理宿主机文件系统的一部分(/var/lib/docker/volumes)。保存数据的最佳方式。
• bind mounts:将宿主机上的任意位置的文件或者目录挂载到容器中。
• tmpfs:挂载存储在主机系统的内存中,而不会写入主机的文件系统。如果不希望将数据持久存储在任何位置,可以使用
  ...

数据卷

Docker提供三种方式将数据从宿主机挂载到容器中:
• volumes:Docker管理宿主机文件系统的一部分(/var/lib/docker/volumes)。保存数据的最佳方式。
• bind mounts:将宿主机上的任意位置的文件或者目录挂载到容器中。
• tmpfs:挂载存储在主机系统的内存中,而不会写入主机的文件系统。如果不希望将数据持久存储在任何位置,可以使用
  tmpfs,同时避免写入容器可写层提高性能。

volumes

#创建一个数据卷
[root@node1 ~]# docker volume create nginx-vol
nginx-vol
#查看卷
[root@node1 ~]# docker volume ls
DRIVER VOLUME NAME
local nginx-vol
#查看详细信息
[root@node1 ~]# docker volume inspect nginx-vol
[ { "CreatedAt": "2019-10-22T10:24:29-04:00", "Driver": "local", "Labels": {}, "Mountpoint": "/var/lib/docker/volumes/nginx-vol/_data", "Name": "nginx-vol", "Options": {}, "Scope": "local" }
]

#用卷创建一个容器,如果没有指定卷,自动创建
docker run -d --name=nginx-01 --mount src=nginx-vol,dst=/usr/share/nginx/html nginx
#删除数据卷 要先停止容器把容器删了才能删除数据卷
[root@node1 ~]# docker volume rm nginx-vol
nginx-vol

#数据卷是被设计用来持久化数据的,它的生命周期独立于容器,Docker 不会在容器被删除后自动删除,
#并且也不存在垃圾回收这样的机制来处理没有任何容器引用的数据卷 。
#如果需要在删除容器的同时移除数据卷。可以在删除容器 的时候使用 docker rm -v 这个命令。 
#无主的数据卷可能会占据很多空间,要清理请使用以下命令 docker volume prun

bindmounts挂载主机目录 

#如果源文件/目录没有存在,不会自动创建,会抛出一个错误。
#如果挂载目标在容器中非空目录,则该目录现有内容将被隐藏
[root@node1 app]# docker run -itd --name=nginx-02 --mount type=bind,src=/app/wwwroot,dst=/usr/share/nginx/html nginx

容器网路

当 Docker 启动时,会自动在主机上创建一个 docker0 虚拟网桥,实际上是 Linux 的一个 bridge,可以理解为一个软件交换机。它会在挂载到它的网口之间进 行转发。 同时,Docker 随机分配一个本地未占用的私有网段(在 RFC1918 中定义)中的一 个地址给 docker0 接口。比如典型的 172.17.42.1 ,掩码为 255.255.0.0 ,此后启动的容器内的网口也会自动分配一个同一网段 ( 172.17.0.0/16 )的地址。

当创建一个 Docker 容器的时候,同时会创建了一对 veth pair 接口(当数据包 发送到一个接口时,另外一个接口也可以收到相同的数据包)。这对接口一端在容 器内,即 eth0 ;另一端在本地并被挂载到 docker0 网桥,名称以 veth 开 头(例如 vethAQI2QT )。通过这种方式,主机可以跟容器通信,容器之间也可 以相互通信。Docker 就创建了在主机和所有容器之间一个虚拟共享网络。

docker-数据卷与网络1docker-数据卷与网络2

docker-数据卷与网络3 

映射容器端口到宿主主机的实现 默认情况下,容器可以主动访问到外部网络的连接,但是外部网络无法访问到容 器。容器访问外部实现容器所有到外部网络的连接,源地址都会被 NAT 成本地系统的 IP 地址。这是使用 iptables 的源地址伪装操作实现的。

映射容器端口到宿主主机的实现 默认情况下,容器可以主动访问到外部网络的连接,但是外部网络无法访问到容器。

容器访问外部实现

[root@node1 app]# iptables -t nat -nL
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination MASQUERADE  all  --  172.17.0.0/16 0.0.0.0/0 #其中,上述规则将所有源地址在 172.17.0.0/16 网段,目标地址为其他网段 (外部网络)的流量动态伪装为
#从系统网卡发出。MASQUERADE 跟传统SNAT的好处是它能动态从网卡获取地址。

外部访问容器实现

#-p 5001:8080 本机5001端口映射到容器8080端口
target prot opt source destination DNAT tcp  --  0.0.0.0/0 0.0.0.0/0 tcp dpt:5001 to:172.17.0.2:8080

网络模式 

•bridge 
--net=bridge 
默认网络,Docker启动后创建一个docker0网桥,默认创建的容器也是添加到这个网桥中
•host 
--net=host 
容器不会获得一个独立的networknamespace,而是与宿主机共用一个。这就意味着容器不会有自己的网卡信息,而是使用宿主机的。容器除了网络,其他都是隔离的。
•none 
--net=none 
获取独立的networknamespace,但不为容器进行任何网络配置,需要我们手动配置
•container 
--net=container:Name/ID 
与指定的容器使用同一个networknamespace,具有同样的网络配置信息,两个容器除了网络,其他都还是隔离的。
自定义网络与默认的bridge原理一样,但自定义网络具备内部DNS发现,可以通过容器名或者主机名容器之间网络通信。

#容器要想访问外部网络,需要本地系统的转发支持。在Linux 系统中,检查转发是否打开。
[root@node1 app]# sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 0
[root@node1 app]# sysctl -w net.ipv4.ip_forward=1
net.ipv4.ip_forward = 1
#使用 -p hostPort:containerPort 格式本地的 5001 端口映射到容器的8080端 口,
[root@node1 app]# docker run -itd -p 5001:8080 --name=nginx-02 --mount type=bind,src=/app/wwwroot,dst=/usr/share/nginx/html nginx

#查看映射端口配置 使用 docker port 来查看当前映射的端口配置,也可以查看到绑定的地址
[root@node1 app]# docker port 2e1
8080/tcp -> 0.0.0.0:5001

#docker inspect查看容器所有变量
[root@node1 app]# docker inspect 2e1

#-p 标记可以多次使用来绑定多个端口 
[root@node1 app]# docker run -d  -p 5000:5000  -p 3000:80  training/webapp  python app.py

 

勿删,copyright占位
您找到想要的结果了吗?
docker-数据卷与网络
提交成功!非常感谢您的反馈,我们会继续努力做到更好
分享文章到微博
分享文章到朋友圈

上一篇:HDU - 2176 取(m堆)石子游戏(尼姆博奕)

下一篇:Django 布署6.5

您可能感兴趣

  • 2018/8/8-sqlserver读的数据转为数据框格式

    今天特别气自己,想骂人。 今天还是北京奥运十周年。 之前连数据库用来同事发给我的代码去连,然后一般数据都是存在rows里。 cursor.execute(sql) rows = cursor.fetchall() 我自己写是加了一个list,因为他这个每一行都是元组,元组又不能修改,也没什么方法。然后这个数据框是一行,我自己又...

  • 性能测试初级篇--造数据

    在ORCALE里造数据需要良好PL/SQL功底。而PL/SQL的精髓是循环语句,说的不好不要笑。 给个例子代码,相信更清晰。 declare index_ number:= 1; cusno varchar2(12); linid varchar2(20); begin----开始 delete from tbl_contactinfos; de...

  • kafka如何彻底删除topic及数据

    前言: 删除kafka topic及其数据,严格来说并不是很难的操作。但是,往往给kafka 使用者带来诸多问题。项目组之前接触过多个开发者,发现都会偶然出现无法彻底删除kafka的情况。本文总结多个删除kafka topic的应用场景,总结一套删除kafka topic的标准操作方法。 step1: 如果需要被删除topic 此时正在被程序 ...

  • Oracle入门基础二(限定数据与数据排序)

    Oracle入门基础二(限定数据与数据排序) – 使用where子句 –比较数值型数据 1.查询部门编号为10的员工 select * from emp where deptno = 10; 2.查询部门...

  • NBMA网络类型

    1、NBMA(非广播多路访问网络)是OSPF(开放最短路径优先)通信协议中四种网络的一种。NBMA用于精确模型X2.5和帧延迟环境,这些模型不具备内部广播和多点传送能力。其他的OSPF网络类型有:广播、点对点和点对多点。 2、区分NBMA和点对多点 (1)在OSPF 协议中NBMA 是指那些...

  • python解析csv格式数据入库

    【1】导入csv包 import csv 【2】读取csv文件路径 def getExcelData():     try:      csvx_list = glob.glob(r'F:\公司项目\2018年项目\中加app\数据\中加数据\校准数据\*.csv')      print('总共发现%s个csv文件'% len(csvx_li...

  • MySQL中插入数据遇到重复记录时跳过

          在MySQL 5.0.77上进行一次大量数据一次插入的操作.难以确定提交的数据中是否可能存在重复, 那么要正常完成这个数据插入操作的一种思路就是,让数据库在插入数据遇到重复记录时跳过.       MySQL中如何提供这种方式?经过Google之后,找到下面这篇web,通过它,再查找相应的官方文档, 进行了解,可以解决这个问题...

  • json树数据

    package com.feima.xxhglbaseservice.service; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.feima.entity.base.TFunction; import com.f...

CSDN

CSDN

中国开发者社区CSDN (Chinese Software Developer Network) 创立于1999年,致力为中国开发者提供知识传播、在线学习、职业发展等全生命周期服务。
docker-数据卷与网络介绍:华为云为您免费提供docker-数据卷与网络在博客、论坛、帮助中心等栏目的相关文章,同时还可以通过 站内搜索 查询更多docker-数据卷与网络的相关内容。| 移动地址: docker-数据卷与网络 | 写博客