dockerstack(dockerstack无法访问外部网络)
本篇文章给大家谈谈dockerstack,以及dockerstack无法访问外部网络对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、openstack和Docker最根本的区别是什么
- 2、docker-compose.yml说明和编写
- 3、【每天学一点】docker-compose中的deploy
- 4、Docker Swarm
- 5、使用docker安装部署openstack
- 6、使用 Docker Stack 部署多服务集群
openstack和Docker最根本的区别是什么
openstack:它由很多的组件组成,如果没接触过,基本上你会晕头转模凯宏向。但是我们只要从它试图要解决的问题来看就不难理解它。它是管理服务器/网络/块存储的工具。关于块存储,简单的理解是把一堆磁盘用软件组合成一个大磁盘给操作系统使用。就是管理一堆服务器,然后在有需要的时候在它的管理界面上分配一些存储/分配IP/创建虚拟机。所以他的最终目的还是管理虚拟机,它于你可能用过的virtualbox、vmware桌面版不同的地方就是你用的那些小东东只能管理你自己那一台机器上的虚拟机,openstack可以管理一堆服务器上的虚拟机,哦,忘了还有有些技术专家常说的网络和存储。
docker:简单说它用比虚拟机技术少很多的资源消耗实现了类似于虚拟机的对CPU/磁盘/网络的隔离,同时在AUFS层存储的基础上实现的部署标准化。举例来说你可以在网上下载到安装好MySQL、Redis的docker 镜像,然后在你的Linux环境中运行起来,你也可以把你的应用生成为一个镜像,然后孙运在开发环境运行/然后在正式环境运旦册行,而镜像是层叠的,这意味着上层镜像会非常小。
[img]docker-compose.yml说明和编写
模板文件是使用 Compose 的核心,涉及到的指令关键字也比较多。大部分指令跟 docker run 相关参数的含义都是类似的。
默认的模板文件名称为 docker-compose.yml ,格式为 YAML 格式。
可以将 Compose 文件命名为任何所需内容,以使其在逻辑上具有意义; docker-compose.yml 仅为标准名称。我们可以简单地将此文件命名为 docker-stack.yml 或更特定于项目的内容
注意每个服务都必须通过 image 指令指定镜像或 build 指令(需要 Dockerfile )等来自动构建生成镜像。
在 docker stack 下, build 指令不能使用,只能用 image
如果使用 build 指令,在 Dockerfile 中设置的选项(例如: CMD , EXPOSE , VOLUME , ENV 等) 将会自动被获取,无需在 docker-compose.yml 中再次设置。
请注意,将 Compose 文件设置为 version:"3" 。本质上,这会使其兼容 swarm mode 。我们可以使用 deploy key (仅可用于 Compose 文件格式版本 3.x 及更高版本)及其子选项对每项服务(例如,web)进行负载均衡和优化性能。我们可以使用 docker stack deploy 命令(仅在 Compose 文件版本 3.x 及更高版本上受支持)运行此文件。您可以使用 docker-compose up 运行具有 非 swarm 配置的版本 3 文件。
指定 Dockerfile 所在文件夹的路径(可以是绝对路径,或者相对 docker-compose.yml 文件的路径)。 Compose 将会利用它自动构建这个镜像,然后使用这个镜像。
也可以使用 context 指令指定 Dockerfile 所在文件夹的路径。
使用 dockerfile 指令指定 Dockerfile 文件名。
使用 arg 指令指定构建镜像时的变量。
使用 cache_from 指定构建镜像的缓存
指定容器的内核能力(capacity)分配。
让容器拥有所有能力可以指定为:
去掉 NET_ADMIN 能力可以指定为:
覆盖容器启动后默认执行的命令。
仅用于 Swarm mode
指定父 cgroup 组,意味着将继承该组的资源限制。
例如,创建了一个 cgroup 组名称为 cgroups_1。
指定容器名称。默认将会使用 项目名称_服务名称_序号 这样的格式。
仅用于 Swarm mode
指定设备映射关系。
解决容器的依赖、启动先后的问题。以下例子中会先启动 redis``db 再启动 web
自定义 DNS 服务器。可以是一个值,也可以是一个列表。
配置 DNS 搜索域。可以是一个值,也可以是一个列表。
挂载一个 tmpfs 文件系统到容器。
从文件中获取环境变量,可以为单独的文件路径或列表。
如果通过 docker-compose -f FILE 方式来指耐握定 Compose 模板文件,则 env_file 中变量的路径会基于模板文件路径。
如果有变量名称与 environment 指令冲突,则按照惯例,以后者为准。
环境念漏变量文件中每一行必须符合格式,支持 # 开头的注释行。
设置环境变量。你可以使用数组或字典两种格式。
只给定名称的变量会自动获取运行 Compose 主机上对应变量的值,可以用来防止泄露不必要的数据。
如果变量名称或者值中用到 true|false , yes|no 等表达 布尔 含义的词汇,最好放到引号里,避免 YAML 自动解析某些内容为对应的布尔语义。这些特定词汇,包括
y|Y|yes|Yes|YES|n|N|no|No|NO|true|True|TRUE|false|False|FALSE|on|On|ON|off|Off|OFF
暴露端口,但不映射到宿主机,只被连接的服务访昌高庆问。
仅可以指定内部端口为参数
类似 Docker 中的 --add-host 参数,指定额外的 host 名称映射信息。
会在启动后的服务容器中 /etc/hosts 文件中添加如下两条条目。
通过命令检查容器是否健康运行。
指定为 镜像名称或镜像 ID 。如果镜像在本地不存在, Compose 将会尝试拉取这个镜像。
为容器添加 Docker 元数据(metadata)信息。例如可以为容器添加辅助说明信息。
配置日志选项。
目前支持三种日志驱动类型:
options 配置日志驱动的相关参数:
设置网络模式。使用和 docker run 的 --network 参数一样的值。
配置容器连接的网络。
跟主机系统共享进程命名空间。打开该选项的容器之间,以及容器和宿主机系统之间可以通过 进程ID 来相互访问和操作。
暴露端口信息。
使用宿主端口:容器端口 (HOST:CONTAINER) 格式,或者仅仅指定容器的端口(宿主将会随机选择端口)都可以。
存储敏感数据,例如 mysql 服务密码。
指定容器模板标签(label)机制的默认属性(用户、角色、类型、级别等)。例如配置标签的用户名和角色名。
设置另一个信号来停止容器。在默认情况下使用的是 SIGTERM 停止容器。
配置容器内核参数。
指定容器的 ulimits 限制值。
例如,指定最大进程数为 65535,指定文件句柄数为 20000(软限制,应用可以随时修改,不能超过硬限制) 和 40000(系统硬限制,只能 root 用户提高)。
数据卷所挂载路径设置。可以设置宿主机路径 (HOST:CONTAINER) 或加上访问模式 (HOST:CONTAINER:ro) 。
该指令中路径支持相对路径。
此外,还有包括 domainname , entrypoint , hostname , ipc , mac_address , privileged , read_only , shm_size , restart , stdin_open , tty , user , working_dir 等指令,基本跟 docker run 中对应参数的功能一致。
指定服务容器启动后执行的入口文件。
指定容器中运行应用的用户名。
指定容器中工作目录。
指定容器中搜索域名、主机名、mac 地址等。
允许容器中运行一些特权命令。
指定容器退出后的重启策略为始终重启。该命令对保持服务始终运行十分有效,在生产环境中推荐配置为 always 或者 unless-stopped 。
以只读模式挂载容器的 root 文件系统,意味着不能对容器内容进行修改。
打开标准输入,可以接受外部输入。
模拟一个伪终端。
Compose 模板文件支持动态读取主机的系统环境变量和当前目录下的 .env 文件中的变量。
例如,下面的 Compose 文件将从运行它的环境中读取变量 ${MONGO_VERSION} 的值,并写入执行的指令中。
如果执行 MONGO_VERSION=3.2 docker-compose up 则会启动一个 mongo:3.2 镜像的容器;如果执行 MONGO_VERSION=2.8 docker-compose up 则会启动一个 mongo:2.8 镜像的容器。
若当前目录存在 .env 文件,执行 docker-compose 命令时将从该文件中读取变量。
在当前目录新建 .env 文件并写入以下内容。
执行 docker-compose up 则会启动一个 mongo:3.6 镜像的容器。
【每天学一点】docker-compose中的deploy
由于要进行服务的微服务化部署,由于硬件限制,我们目前采用的是Swarm作为容器编排的工具。对应于k8s中的pod,swarm中有dab这种概念,即分布式应用包,目前还没有去探索这个的使用,由于还是实验性的特性,目前还不涉及,这里主要还枝裤哗是通过docker-compose.yaml的方式将多个微服务统一运维。
使用的是 docker stack deploy args 命令进行的部署。
官网上该命令有如下的参数:
由于使用的是docker-compose文件,这里直接通过 compose-file 进行部署即可,例如官网的例子
甚至可以通过叠加compose文件,来修改前一个文件中的配置
那么再来看看其他的可选命令:
namespace 和 kubeconfig 是k8s的专属命令,这里就不做过多解释,直接看swarm相关的。
目前觉得 prune 这个参数比较关键,可以把一些down掉的service进行自动清理。
如何通猛行过 docker-compose.yml 配置文件进行集群化部署呢?
首先需要知道的,docker-compose文件中哪个部分主要对应了swarm中的运维需求,答案就是 deploy 参数下的各种配置。
上图中的配置一个个来看;
首先来看,最纯孝下面标注的 docker stack deploy不支持的参数 ,具体可以参考下图:
上面的参数,就算yaml中包含,在stack的时候也会被忽略,当然也可以为了 docker-compose up 留着这些配置。
这个命令是在 3.2 版本中开始引入的,主要是用于指定服务发现方法,以方便外部的客户端连接到swarm
主要包含两个:
标签是用于service之上,并非附加在service中的容器上。
如果像将其附在所有容器上,则在 deploy 之外定义labels.
用于指定是以 副本模式(默认) 启动还是 全局模式 ,如果是 全局模式 ,类似于开始于k8s中的DaemonSet,会在每个节点上启动且只启动一个服务。
这个参数在运维的时候尤为关键 ,主要用于指定 容忍 和 偏好 ,这个在k8s中同样有对应的概念
其中, 容忍 包含了:
至于 偏好 ,只有一个参数,就是 spread ,其参数值为节点的属性,即容忍表中的内容。
这个是3.8中添加的配置。
字面意思,就是控制每个节点上最多的副本数
用于指定副本数,只有mode为副本模式的时候生效。
这个参数在运维的时候尤为关键 ,主要用于限制服务的资源。
limit用于限制最大的资源使用数量,reservation为最低的资源占用量。
重启策略
3.7版本加入
用于指定回滚的策略
用于指定升级的策略
以上。
Docker Swarm
Swarm 是使用 SwarmKit 构建的 Docker 引擎内置(原生)的集群管理和编排工具。 Docker Swarm 是 Docker 官方三剑客项目之一,提供 Docker 容器集群服务,是 Docker 官方对容器云生态进行支持的核心方案。
使用它,用户可以将多个 Docker 主机封装为单个大型的虚拟 Docker 主机,快速打造一套容器云平台。Swarm mode 内置 kv 存储功能,提供了众多的新特性,比如:具有容错能力的去中心化设计、内置服务发现、负载均衡、路由网格、动态伸缩、滚动更新、安全传输等。使得 Docker 原生的 Swarm 集群具备与 Mesos 、 Kubernetes 竞争的实力。使用 Swarm 集群之前需要了解以下几个概念。
运行 Docker 的主机可以主动初始化一个 Swarm 集群或者加入一个已存在的 Swarm 集群,这样这个运行 Docker 的主机就成为一个 Swarm 集群的节点 (node) 。节点分为 管理 (manager) 节点和工作 (worker) 节点 。
管理节点用于 Swarm 集群的管理, docker swarm 命令基本只能在管理节点执行(节点退出集群命令 docker swarm leave 可以在工作节点执行)。一个 Swarm 集群可以有多个管理节点,但只有一个管理节点可以成为 leader ,leader 通过 raft 协议实现。
工作节点是任务执行节点,管理节点将服务 ( service ) 下发至工作节点执行。管理节点默认也作枝让为工作节点。你也可以通过配置让服务只运行在管理节点。来自 Docker 官网的这张图片形象的展示了集群中管理节点与工作节点的关系。
任务(Task) 是 Swarm 中的最小的调度单位,目前来说就是一个单一的容器; 服务(Services) 是指一组任务的集合,服务定义了任务的属性。服务有两种模式:
两种模式通过 docker service create 的 --mode 参数指定。来自 Docker 官网的这张图片形象的展示了容器、任亩中务、服务的关系。
我们这里利用上一节的 docker machine 来充当集群的主机,首先先创建一个 manager 节点,然后在该节点上执行初始化集群命令:
执行 docker swarm init 命令的节点自动成为管理节点。
管理节点初始化完成后,然后同样的用 docker-machine 创建工作节点,然后将其加入到管理节点之中去即可:
我们可以看到上面的提示信息: This node joined a swarm as a worker. ,表明节点已经加入到 swarm 集群之中了。
经过上边的两步,我们已经拥有了一个最小的 Swarm 集群,包含一个管理节点和两个工作节点。
管理节点使用 docker node ls 查看集群:
使用 docker service logs 来查看某个服务的日志。
使用 docker service rm 来从 Swarm 集群移除某个服务:
正如之前使用 docker-compose.yml 来一次配置、启动多个容器,在 Swarm 集群中也可以使用 compose 文件(docker-compose.yml)来配置、启动多个服务。
上一节中,我们使用 docker service create 一次只能部署一个服务,使用 docker-compose.yml 我们可以一次启动多个迅搭山关联的服务。
我们以在 Swarm 集群中部署 WordPress 为例进行说明:(docker-compose.yml)
其中 constraints: [node.role == manager] 是调度策略,文档地址:
在 Swarm 集群管理节点新建该文件,其中的 visualizer 服务提供一个可视化页面,我们可以从浏览器中很直观的查看集群中各个服务的运行节点。
在 Swarm 集群中使用 docker-compose.yml 我们用 docker stack 命令,下面我们对该命令进行详细讲解。
部署服务使用 docker stack deploy ,其中 -c 参数指定 compose 文件名。
要移除服务,使用 docker stack down :
该命令不会移除服务所使用的 数据卷 ,如果你想移除数据卷请使用 docker volume rm 。
使用docker安装部署openstack
Kolla简介
kolla项目就是使消卖用 docker 和ansible来部署安装openstack,docker的好处就是轻量,管理起来方便。
Kolla Bare Metal Deploy
让kolla跑起来的方式有三种:
1、裸机部署
2、结返桥渗合heat
3、结合vagrant
这里只介绍CentOS7 kolla裸机部署漏脊:
使用 Docker Stack 部署多服务集群
单机模式下,我们可以使用 Docker Compose 来编排多个服务,而在 上一篇文章 中介绍的 Docker Swarm 只能实现对单个服务的简单部署。于是就引出了本文的主角 Docker Stack ,通过 Docker Stack 我们只需对已有的 docker-compose.yml 配置文件稍加改造就可以完成 Docker 集群环境下的肆悉仿多服务编排。
注意:如果有多个 manager 节点,portainer 和 visualizer 可能分别部署在两台机器上,所以ip可能会不一样。
评论区有小伙伴提到,容器间通过服务名 ( 比如文中的 nginx ) 通讯时,对应的 IP 却和容器的实际 IP 对裂纤不上。出现这个情况是陆亩因为负载均衡( 对外表现为一个服务,内部为多个服务 )。下面是我做的试验,希望能帮助大家理解。
总结下:
整个请求的调用流程应该就是: 通过服务名 nginx 访问 -- 指向 -- stack 集群网关 ( 10.0.6.5 ) -- 转发 -- stack 集群中,位于当前服务器的负载均衡实例 ( 10.0.6.4 ) -- 分发 -- 最终的应用 。
关于dockerstack和dockerstack无法访问外部网络的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。