Docker进阶SwarmStackSecretConfig

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker进阶SwarmStackSecretConfig相关的知识,希望对你有一定的参考价值。


文章目录

  • 1 Swarm介绍
  • 1.1 Warm文档
  • 1.2 工作模式
  • 1.3 购买服务器
  • 2 搭建集群
  • 3 Raft协议
  • 4 弹性、扩缩容、集群
  • Docker Stack
  • Docker Secret

1 Swarm介绍

安装docker

1.1 Warm文档

​https://docs.docker.com/config/daemon/prometheus/​

​Run your app in production -> Configure containers -> Scale your app​

1.2 工作模式

Docker进阶Swarm、Stack、Secret、Config_nginx

​Raft​​:一致性算法

1.3 购买服务器

Docker进阶Swarm、Stack、Secret、Config_nginx_02

集群
2主2从

2 搭建集群

[root@VM-0-14-centos ~]# docker swarm --help

Usage: docker swarm COMMAND

Manage Swarm

Commands:
ca Display and rotate the root CA
init Initialize a swarm
join Join a swarm as a node and/or manager
join-token Manage join tokens
leave Leave the swarm
unlock Unlock swarm
unlock-key Manage the unlock key
update Update the swarm

Run docker swarm COMMAND --help for more information on a command.
[root@VM-0-14-centos ~]# docker swarm init --help

Usage: docker swarm init [OPTIONS]

Initialize a swarm

Options:
--advertise-addr string # 广播地址 Advertised address (format: <ip|interface>[:port])
--autolock Enable manager autolocking (requiring an unlock key to start a
stopped manager)
--availability string Availability of the node ("active"|"pause"|"drain") (default "active")
--cert-expiry duration Validity period for node certificates (ns|us|ms|s|m|h) (default
2160h0m0s)
--data-path-addr string Address or interface to use for data path traffic (format:
<ip|interface>)
--data-path-port uint32 Port number to use for data path traffic (1024 - 49151). If no
value is set or is set to 0, the default port (4789) is used.
--default-addr-pool ipNetSlice default address pool in CIDR format (default [])
--default-addr-pool-mask-length uint32 default address pool subnet mask length (default 24)
--dispatcher-heartbeat duration Dispatcher heartbeat period (ns|us|ms|s|m|h) (default 5s)
--external-ca external-ca Specifications of one or more certificate signing endpoints
--force-new-cluster Force create a new cluster from current state
--listen-addr node-addr Listen address (format: <ip|interface>[:port]) (default 0.0.0.0:2377)
--max-snapshots uint Number of additional Raft snapshots to retain
--snapshot-interval uint # 快照 Number of log entries between Raft snapshots (default 10000)
--task-history-limit int Task history retention limit (default 5)

# 初始化主节点
docker swarm init
# 加入一个节点(管理者、worker)
docker swarm join

# 获取令牌
docker swarm join-token manager # 生成加入 manager节点 命令
docker swarm join-token worker # 生成加入 worker 节点 命令

将dokcer1设置为主节点

docker swarm init --advertise-addr 172.27.0.6

Docker进阶Swarm、Stack、Secret、Config_容器_03


docker2加入1节点

docker swarm join --token SWMTKN-1-6b1kbshfye331k4d86az2ohqvdwlj1bijsbka6hvb8h5ha4n28-e61bl5kpo7c1jbaj4hj8nizv1 172.27.0.6:2377

主节点查看所有节点

docker node ls

3 Raft协议

双主双从:假设一个节点挂了!其他节点是否可以用: 不可用
Raft协议:保证大多数接待存货才可以用、只要>1,集群至少大于3台

关闭docker:测试挂机

systemctl stop docker

退出集群

docker swarm leave

故:至少3个主节点 多于1台机器存货

4 弹性、扩缩容、集群

docker-compose up:启动一个项目。单机

集群:swarm docker service

容器 => 服务 => 副本

帮助

[root@VM-0-6-centos ~]# docker service --help

Usage: docker service COMMAND

Manage services

Commands:
create 创建一个 new service
inspect 查看services细节
logs 查看service日志
ls List services
ps List the tasks of one or more services
rm Remove one or more services
rollback Revert changes to a services configuration
scale 动态扩缩容 Scale one or multiple replicated services
update 更行service

Run docker service COMMAND --help for more information on a command.

启动服务

docker service create -p 8888:80 --name my-nginx nginx
docker run 容器启动!不具有扩缩容
docker service 服务!具有扩缩容,滚动更新

查看服务

# REPLICAS:副本数目
docker service ps ls
docker service ps my-nginx

# 查看服务 元数据
docker service inspect my0nginx

更新副本数量

docker service update --replicas 5 my-nginx

docker service scale my-nginx=5

调整service 以什么方式运行

dcoker service create --mode replicated --name mytom tomcat:7 

docker service create --mode global --name haha alpine ping baidu.com

Docker Stack

# 单机
docker-compose up -d wordpress.yaml

# 集群
docker-stack deploy wordpress.yaml


详解Docker——你需要知道的Docker进阶知识三

参考技术A

我们可以将数据保存在容器中,但是这样存在一些缺点:

针对上述的缺点,有些数据,例如数据库文件,我们不应该将其保存在镜像或者容器的可写层中。Docker 提供三种不同的方式将数据从 Docker 主机挂载到容器中,分别为卷( volumes ),绑定挂载( bind mounts ),临时文件系统( tmpfs )。很多时候, volumes 总是正确的选择。

无论使用上述的哪一种方式,数据在容器内看上去都是一样的。它被认为是容器文件系统的目录或文件。

对于三种不同的存储数据的方式来说,卷是唯一完全由 Docker 管理的。它更容易备份或迁移,并且我们可以使用 DockerCLI 命令来管理卷。

列出本地可用的卷列表:

这种由系统随机生成名称的卷称为 匿名卷 ,匿名卷名称不具备可读性,使用起来不太方便,所以创建卷时一般会指定其 name 。例如我们创建一个名为 volume1 的卷。

创建好卷之后,我们可以用卷来启动一个容器,这里首先需要学习 docker container run 命令的两个参数:

对于前面创建的卷 volume1 ,可使用如下命令来在容器中使用:

使用 --mount 的命令如下:

上述操作,我们运行了两个容器,并分别挂载了一个卷。对于这两个容器来说,由于挂载的是同一个卷,所以它们将共享该数据卷。多个容器共享数据卷时,需要注意并发读写问题。可以分别连接到两个容器中,操作数据来验证数据是同步的。

绑定挂载( bind-mounts )通过将主机上的目录挂载到容器中,使得容器可以操作和修改主机上的文件。

例如,我们将 /home/hellodocker 目录挂载到容器中的 /home/hellodocker 目录下,使用的命令如下:

而如果使用 --mount ,相应的语句如下:

上述两个操作针对的是目录,而对于挂载文件来说,可能会出现一些特殊情况,涉及到绑定挂载和使用卷的区别。下面我们重现这一操作:

首先在当前目录,即 /home/hellodocker 目录下,创建一个 test.txt 文件。并向其中写入文本内容 "test1":

接着创建一个容器 hellodocker6 ,将 test.txt 文件挂载到容器中的 /test.txt 路径,并查看容器中 /test.txt 文件的内容:

这时新打开一个终端,通过 echo 命令向 /home/hellodocker/test.txt 文件追加内容 "test2",并在容器中查看 /test.txt 文件的内容:

这时无论是在容器中还是主机上都能查看到该文件的最新内容。接下来在主机上查看 test.txt 的 inode 号,并使用 vim 编辑该文件,添加 "test3",并查看该文件的内容:

在主机上使用 vim 编辑后,通过 vim 做出的修改并不能在容器中查看到

这是因为 vim 编辑文件的时候,会将文件内容暂存到一个临时文件中,退出保存后会删除原来的文件,并将临时文件重命名为原文件。但是我们标识文件是通过 inode ,因此 Docker 绑定的依然是旧的主机文件,所以容器中看到的依然是旧的内容。

对于数据卷来说,由 docker 完全管理,而绑定挂载需要我们自己去维护。我们需要自己手动去处理这些问题,这些问题并不仅仅是上面演示的这些,还有用户权限, SELINUX 等。

tmpfs 只存储在主机的内存中。当容器停止时,相应的数据就会被移除。

以上是关于Docker进阶SwarmStackSecretConfig的主要内容,如果未能解决你的问题,请参考以下文章

详解Docker——你需要知道的Docker进阶知识二

云计算Docker云平台—Docker进阶

Docker入门与进阶

Docker入门与进阶

Docker 持续进阶

Docker笔记(进阶篇)— Docker Compose