一、容器的网络
1. 容器自带网络
当Docker安装成功后,就会创建三种网络,通过docker network ls可以查看
这三种网络就是系统自带的,在创建容器时可以通过--net指定,详细信息在前面Docker容器实战-深入理解有讲过
2. 网络详情
功能描述:查看Docker的网络详细信息
语法:docker network inspect bridge 网络类型
当未运行容器时,容器字段为空,即"Containers": {},当启动一个容器后就会加入相关信息,上图是开启了一个ubuntu容器后的效果,每运行一个容器都会在全局注册相关的网络信息
3. 自定义网络
除了上面的三种默认网络,Docker还允许用户创建自己的网络:桥接网络;Overlay网络;插件网络等
(1)桥接网络
系统默认的桥接是docker0,如果要将多个容器隔离在一个新的桥接网络中,可以使用命令docker network create --driver bridge 网络名
启动一个容器时,通过--net=网络名将容器挂载到自定义网络
这样,在同一个桥接下就形成了一个内网,相互之间可以通信,但仅限于在同一台主机上,如果要跨主机通信就需要使用Overlay网络
(2)Overlay网络
Overlay是一种虚拟交换技术,解决不同IP地址段之间的网络通信问题。Docker使用的Overlay技术是VXLAN,借助libnetwork实现,Overlay网络需要K-V服务存储相关主机信息,而目前Docker支持的K-V存储服务有Consul、Etcd、ZooKeeper,其中Consul是默认的发现服务
对于Overlay还需要主机开放UDP/4789和TCP/UDP/7946分别作为数据通道和控制通道
二、容器的数据
容器中的文件系统由分层文件系统提供,包含的只读层(镜像)和可读可写层(容器运行时层)都被封装在容器内部,如果要将主机上的文件系统共享给容器使用就需要通过数据卷或数据容器
1. 数据卷
数据卷提供了主机和容器之间共享数据的方式,有时候需要通过它来做持久化和数据共享。
当做持久化时,数据卷通常都会比较大,可以放在单独的磁盘或者阵列上,此时容器只是一个执行环境;当做数据共享时,可以用于开发、测试分布式系统。
(1)创建外部卷
数据卷主要通过-v参数指定,如图创建了一个name为datatest的容器同时创建了一个/webapp的数据卷,/webapp是其在容器内部的位置
通过docker inspect 容器ID查看容器详细信息
可以看到其中有个Mounts数据项,而数据卷在宿主机的位置就是Source所指向的/var/lib/docker/中
(2)映射外部卷
如果通过-v src:des的方式指定,则容器会直接将宿主机目录挂载到容器内部
如图就是把宿主机/root目录映射到了容器的/hostroot目录中,但不建议!
2. 数据型容器
由于容器本身就可以包含文件系统,所以可以把容器的卷分享给另一个容器使用
过程描述
创建包含外部卷的容器
在另一个容器中通过–volumes-from映射
注意创建包含外部卷的容器时使用的是create,而不是run(create后在start)
3. 数据卷的特点
数据卷在容器创建时初始化
数据卷既可以共享也可以在容器间重用
数据卷的读写是直接下发的
commit命令不会将改动保存到镜像中
即使容器被删除了,数据卷仍然存在-> 垃圾数据卷
三、镜像仓库
从第一个镜像开始就一直在和镜像仓库交流,镜像仓库用于保存镜像,用户可以从中下载、上传、修改镜像
功能描述:登录镜像仓库
语法:docker login
功能描述:查找镜像
语法:docker search 关键字
功能描述:拉取镜像
语法:docker pull 镜像名
功能描述:提交镜像
语法:docker push [OPTIONS] [server/][user/]imagename[:TAG]
注意:在push前一般都要登录,并且通过docker tag指定镜像名
提示:具体的过程在上一篇博文Docker容器实战-深入理解中有演示过