小阿轩yx-Docker Swarm 管理

小阿轩yx-Docker Swarm 管理

容器编排部署工具

  • 除 Google 推出的 Kubernetes 之外,还有 Docker 发布的 Swarm 与 Mesos 推出的 Marathon

案例一 Docker Swarm 群集部署

Docker

  • 自诞生以来,容器特性以及镜像特性给 DevOps 爱好者带来很多方便
  • 很长时间内 Docker 只能在单机上运行,跨主机部署、运行与管理能力受外界诟病
  • 跨主机能力薄弱,导致容器与主机的形成高度耦合,降低了容器的灵活性,难以实现容器迁移、分组等功能

案例概述

  • 创鑫公司给云计算工程师提出新的要求
  • 可将集群中所有 Docker Engine 整合进一个虚拟的资源池,通过执行命令与单一的主 Swarm 进行沟通,不必和每个 DockelEngine 沟通。
  • 在灵活的调度策略下,IT 团队可以更好地管理可用的主机资源,保证应用容器的高效运行。

案例前置知识点

Docker Swarm 概述
  • 是 Docker 社区提供的基于 Docker 的集群管理调度工具
  • 能将多台主机构建成一个 Docker 集群

默认对外提供两种 API

标准的 Docker API 包括

  • Docker Client
  • Compose
  • DockerUI
  • Jenkins

它们可以通过 Swarm 工具与 Docker 集群进行通信

集群管理 API

  • 用于集群的管理
Docker Swarm基本特性
  • 通过 SwarmKit 进行构建的,Swarm 模式是 Docker Engine 内置支持的一种默认实现
  • Docker 1.12以及更新的版本都支持 Swarm 模式

集群管理集成进 Docker Engine

  • 使用内置的集群管理功能,可以直接通过 Docker CLI 命令来创建 Swarm 集群,并部署应用服务,而不需要其它外部软件来创建和管理 Swarm 集群

去中心化设计

  • Swarm 集群中包含管理节点(Manager)和工作节点(Worker)两类,可以直接基于 Docker Engine 来部署任何类型的节点。在 Swarm 集群运行期间,可以对其作出任何改变,实现对集群的扩容和缩容等,如添加与删除节点。而做这些操作时不需要暂停或重启当前的 Swarm 集群服务。

声名式服务模型

  • 在实现的应用栈中,Docker Engine 使用了一种声明的方式,可以定义各种所期望的服务状态。

缩放

  • 对于每个服务,可以声明要运行的任务数。向上或向下扩展时,Swarm集群会通过添加或删除任务来自动调整以维持所需的状态。

协调预期状态与实际状态的一致性

  • 管理节点会不断地监控并协调集群的状态,使得Swarm 集群的预期状态和实际状态保持一致。

多主机网络

  • Swarm 集群支持多主机网络,可以为服务指定覆盖网络。管理节点在初始化或更新应用程序时自动为覆盖网络上的容器分配地址。

服务发现

  • 管理节点会给Swarm 集群中每一个服务分配一个唯一的 DNS 名称,对运行中的 Docker 容器进行负载均衡。可以通过 Swarm 内置的 DNS 服务器,查询 Swarm集群中运行的 Docker 容器状态。

负载均衡

  • Swarm 集群中,可以指定如何在各个 Node 之间分发服务容器(ServiceContainer),实现负载均衡。如果想要使用 Swarm 集群外部的负载均衡器,可以将服务容器的端口暴露到外部。

默认安全

  • Swarm 集群中的每个节点都强制执行 TLS 相互身份验证和加密,以保护自身与所有其他节点之间的通信。用户可以选择使用自签名根证书或自定义根 CA 的证书

滚动更新

  • 对于服务需要更新的场景,可以在多个节点上进行增量部署更新,在 Swarm管理节点使用 Docker CLI 设置一个 delay(延迟)时间间隔,实现多个服务在多个节点上依次进行部署,这样可以非常灵活地控制。如果有一个服务更新失败,则暂停后面的更新操作,重新回滚到更新之前的版本。
主要的关键概念
节点
  • 每个参与到 Swarm 集群中的 Docker Engine 都称之为一个节点。
  • 在单个物理计算机或云服务器上运行一个或多个节点,但是生产环境下的集群部署通常包括分布在多个物理和云机器上的 Docker 节点。
  • 要将应用程序部署到集群中,则需要将服务定义提交给管理节点

集群中节点分为

  • 管理节点
  • 工作节点

管理节点

  • 被称为任务的工作单元分派给工作节点
  • 为了维持 Swarm 集群的目标状态,还将承担编排和集群管理的功能
  • 一旦存在多个管理节点时,会选出一个领导来进行任务编排

工作节点

  • 用于接收并执行来自管理节点分发的任务
  • 默认情况下,管理节点也是工作节点,也可以把它配置成只充当管理节点的角色
  • 将负责的任务当前状态通知给管理节点,以便管理节点可以维护每个工作节点的期望状态
服务与任务
  • 在复制服务模型中,Swarm 管理器根据所需状态中设置的比例在节点之间分配特定数量的副本任务

服务

  • 定义了需要在工作节点上执行的任务
  • 它是 Swarm 系统的中心结构,也是用户和 Swarm 交互的主要根源
  • 创建服务时,可指定要使用的容器镜像以及在运行容器中执行的命令

任务

  • 是 Swarm 集群中最小的调度单位
  • 每个任务都包含一个容器和需要在容器中执行的指令
负载均衡

集群管理器

  • 使用负载均衡入口公开对外提供的服务
  • 可以自动为 PublishPort(对外发布的端口)分配服务,也可为服务配置 PublishPort
  • 部署服务时可指定任何未使用的端口为服务端口
  • 如果部署服务时未指定端口,Swarm 管理器会为服务自动分配 30000-32767 范围内的端口

外部组件(如:云负载均衡器)

  • 可访问集群中任何节点的 PublishPort 上的服务
  • 无论该节点当前是否运行服务,集群所有节点都将入口连接到正运行的任务实例

Swarm模式

  • 有一个内部的 DNS 组件,可自动为 Swarm 中每个服务分配一个 DNS 条目
  • 集群管理器使用内部负载均衡器根据服务的 DNS 名称在集群内服务之间分发请求
工作原理

微服务

  • 是一种软件架构风格,用于构建大型应用程序。
  • 它的核心理念是将应用程序拆分成一组小的、独立的服务,每个服务都负责实现特定的业务功能,并通过标准的网络协议(如HTTP/REST、gRPC、消息队列等)进行通信。
  • 每个微服务通常包括自己的业务逻辑、数据存储和管理能力
  • 可能是一个 HTTP 服务器、数据库、或者分布式环境中运行的任何其它可执行的程序
  • 创建服务时可指定使用的容器镜像以及容器中要运行的命令

服务还可定义选项

  • 集群要对外服务的端口
  • 在集群中用于服务之间相连的 Overlay 网络
  • 滚动更新策略
  • 集群总运行的副本数量
服务、任务与容器的具体工作方法

服务、任务与容器

  • 当服务部署到集群时,Swarm管理节点会将服务定义作为服务所需状态。然后将服务调度为一个或多个副本任务。这些任务在集群节点上彼此独立运行。
  • 容器是一个独立的进程。在 Swarm 集群中,每个任务都会调用一个容器。一旦容器运行,调度程序认为该任务处于运行状态。如果容器健康监测失败或者终止,那么任务也终止。

任务与调度

  • 任务是集群内调度的原子单位。当创建或者更新服务来声明所需的服务状态时,协调器通过调度任务来实现所需的状态。
  • 任务是单向的机制,它通过一系列状态单独进行:分配、准备、运行等操作。如果任务失败,协调器将删除任务与容器,然后根据服务指定的所需状态创建一个新的任务来代替它。

待处理的服务

  • 配置服务时,若集群中当前没有可用的节点。在这种情况下,也可以成功配置服务,但所配置服务会处于待处理状态(挂起状态)。
  • 如果在集群中所有节点被暂停或耗尽时,创建了一个服务,服务则被挂起,直到节点可用。实际上,当节点恢复时,第一个可用的节点将会获得所有的任务,这在生产环境中并不是一件好事。

服务可能处于待处理状态的几个示例

  • 配置服务时可以为服务预留特定数量的内存。如果集群中没有节点满足所需的内存量,服务则被挂起,直到有可用的节点运行其任务。如果指定了非常大的内存值(如500G),任务将永久挂起,除非确实有一个满足该有条件的节点
  • 配置服务时可对服务施加约束,并且可能无法再给定时间履行约束,服务则被挂起

副本服务和全局服务

副本服务

  • 指定要运行的相同任务的数量,每个副本都是相同的内容

全局服务

  • 在每个节点上运行一个任务的服务。不需要预先指定任务数量。

案例环境

实验环境表

|-----|------------|-------------------------|--------------|
| 主机 | 操作系统 | 主机名/IP地址 | 主要软件 |
| 服务器 | CentOS 7.9 | manager/192.168.10.101 | Docker 19.03 |
| 服务器 | CentOS 7.9 | worker01/192.168.10.102 | Docker 19.03 |
| 服务器 | CentOS 7.9 | worker02/192.168.10.103 | Docker 19.03 |

实验环境网络拓扑图

案例需求

  • 部署 Docker Swarm 集群
  • 要求集群中包含一个管理节点(manager)和两个工作节点(worker01、worker02)

案例实现思路

  • 准备 Docker Swarm 部署环境
  • 部署 Docker Swarm 集群

案例一实施

配置 Docker Swarm 部署环境

  • 部署 Docker Swarm 之前需要先对服务器进行基础环境配置

将镜像通过 Xftp 上传至三个节点服务器

三个主机开启会话同步

进入镜像文件导入镜像

复制代码
[root@localhost ~]# cd images/
[root@localhost images]# bash imp_docker_img.sh

退出镜像目录并修改三个主机名称

192.168.10.101

复制代码
[root@localhost ~]# hostnamectl set-hostname manager
[root@localhost ~]# bash

192.168.10.102

复制代码
[root@localhost ~]# hostnamectl set-hostname worker01
[root@localhost ~]# bash

192.168.10.103

复制代码
[root@localhost ~]# hostnamectl set-hostname worker02
[root@localhost ~]# bash

修改主机名称注意三个名称不一样

修改所有主机的 hosts 文件

复制代码
[root@manager ~]# vim /etc/hosts
192.168.10.101 manager
192.168.10.102 worker01
192.168.10.103 worker02

这里取消会话同步

部署 Docker Swarm 集群

在manager主机上 创建 Docker Swarm 集群

复制代码
[root@manager ~]# docker swarm init --advertise-addr 192.168.10.101
Swarm initialized: current node (x3v12rmfw9c0isq1nppaaoogh) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-6d54xvraob3ea6peasvp5pgrtqp2f83vlfm7ag9q8ra6x1jqz3-1r93r88x483n7ofx96qj0cvjk 192.168.10.201:2377

这个命令复制到两个 worker 节点

  • docker swarm join --token SWMTKN-1-6d54xvraob3ea6peasvp5pgrtqp2f83vlfm7ag9q8ra6x1jqz3-1r93r88x483n7ofx96qj0cvjk 192.168.10.201:2377

在所有 worker 节点加入集群

复制代码
[root@worker01 ~]# docker swarm join --token SWMTKN-1-6d54xvraob3ea6peasvp5pgrtqp2f83vlfm7ag9q8ra6x1jqz3-1r93r88x483n7ofx96qj0cvjk 192.168.10.201:2377
This node joined a swarm as a worker.

[root@worker02 ~]# docker swarm join --token SWMTKN-1-6d54xvraob3ea6peasvp5pgrtqp2f83vlfm7ag9q8ra6x1jqz3-1r93r88x483n7ofx96qj0cvjk 192.168.10.201:2377
This node joined a swarm as a worker.

查看集群信息

复制代码
[root@manager ~]# docker info

........
 Swarm: active
  NodeID: x3v12rmfw9c0isq1nppaaoogh
  Is Manager: true
  ClusterID: 0mps950k70s2oqphe75jzykqq
  Managers: 1
  Nodes: 3
........

查看 Swarm 集群中 Node 节点的详细状态信息

复制代码
[root@manager ~]# docker node ls
ID                            HOSTNAME   STATUS AVAILABILITY MANAGER STATUS  ENGINE VERSION
x3v12rmfw9c0isq1nppaaoogh *   manager    Ready     Active         Leader           20.10.1
mripmqlv2rw84xzywaclvqolj     worker01   Ready     Active                          20.10.1
gxxa4apflvapwcygvdgy0mdvh     worker02   Ready     Active                          20.10.1
  • 查看 manager 节点详细信息:docker node inspect manager

  • 查看 worker01 节点详细信息:docker node inspect worker01

  • 查看 worker02 节点详细信息:docker node inspect worker02

将管理节点的 AVAILABILITY 值修改为 Drain 状态,使其只具备管理功能

复制代码
[root@manager ~]# docker node update --availability drain manager
manager

再次查看状态

复制代码
[root@manager ~]# docker node ls
ID                           HOSTNAME   STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
rerfkmyfkbc74a04x22tpfo5j *   manager   Ready    Drain           Leader     19.03.9
irwxgrg6o8l69b6i024rkbury     worker01  Ready    Active                     19.03.9
j7yit1q52486uhonee8jmhwgo     worker02  Ready    Active                     19.03.9

节点的 AVAILABILITY 有三种状态:Active、 Pause、Drain。

  • Active:集群中该节点可以被指派任务。

  • Pause:集群中该节点不可以被指派新的任务,但是其他已经存在的任务保持运行。

  • Drain:集群中该节点不可以被指派新的任务,Swarm Scheduler 停掉已经存在的任务,并将它们调度到可用的节点上

添加标签元数据

  • 支持给每个节点添加标签元数据

  • 根据标签可选择性地调度某个服务部署到期望的一组节点上

    [root@manager ~]# docker node update --label-add group=g2 worker01
    worker01

指定节点的详细信息

复制代码
[root@manager ~]# docker node inspect worker01

一组容器为其它进程提供完整的服务

复制代码
[root@manager ~]# docker service create --name mynginx --constraint 'node.labels.group==g2' hub.atomgit.com/amd64/nginx:1.25.2-perl
......
possibly leading to different nodes running different
overall progress: 1 out of tasks
1/1: running
......
  • constraint 约束

使用国内几家互联网大厂联合推出的可信镜像中心

查看 mynginx 容器所在的主机

复制代码
[root@manager ~]# docker service ps mynginx

节点提权 / 降权

在 manager 节点将 worker01 和 worker02 都升级为管理节点

复制代码
[root@manager ~]# docker node promote worker01 worker02

查看节点信息

复制代码
[root@manager ~]# docker node promote worker01 worker02

退出 Swarm 集群

复制代码
[root@manager ~]# docker swarm leave
Error response from daemon: You are attempting to leave the swarm on a node that is participating as a manager. Removing the last manager erases all current state of the swarm. Use `--force` to ignore this message.
  • 如果集群中还存在其它的工作节点,同时希望管理节点退出集群,则需要加上一个强制选项(一般情况下可忽略这一步)

Docker Swarm 服务管理

创建好swarm群集

创建服务

复制代码
[root@manager ~]# docker service create --name mynginx --constraint 'node.labels.group==g2' hub.atomgit.com/amd64/nginx:1.25.2-perl
......
possibly leading to different nodes running different
overall progress: 1 out of 2 tasks
1/1: running
2/2: running
......
  • 使用 docker service create 命令创建 Docker 服务,从 Docker 镜像 nginx 创建一个名称为 web 的服务,指定服务副本数为 2

用浏览器访问三个地址

指定查看 web 服务日志

复制代码
[root@manager ~]# docker service logs -f web
  • 看到提示 Configuration complete; ready for start up后,可以Ctrl+C

查看当前已经部署启动的全部应用服务详细信息

复制代码
[root@manager ~]# docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE               PORTS
zgxqdeu3dph2        web                 replicated          2/2                 nginx:latest

可以查询指定服务的详细信息

复制代码
[root@manager ~]#  docker service ps web
ID             NAME           IMAGE               NODE                DESIRED STATE       CURRENT STATE           ERROR               PORTS
nc0lvzyt6fv8   web.1          nginx:latest        worker01            Running             Running 4 minutes ago                       
rknekib3x3eg   web.2          nginx:latest        manager             Running             Running 4 minutes ago

查看状态

复制代码
[root@manager ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
305d6fe1e1e4        nginx:latest        "/docker-entrypoint...."   5 minutes ago       Up 5 minutes        80/tcp              web.2.rknekib3x3egb9atn4qxub8nj

查看服务详细信息

复制代码
[root@manager ~]# docker service inspect web
  • 以 JSON 格式显示方法 Web 服务的详细信息

以易于阅读方式显示 Web 服务的详细信息

复制代码
[root@manager ~]# docker service inspect --pretty web

服务的扩容缩容

复制代码
[root@manager ~]# docker service scale web=3
  • 将前面已经部署的 2 个副本的 Web 服务,扩容到 3 个副本

通过 docker service ps web 命令查看服务扩容结果

复制代码
[root@manager ~]# docker service ps web
ID              NAME    IMAGE          NODE      DESIRED STATE  CURRENT STATE  ERROR PORTS
nc0lvzyt6fv8    web.1   nginx:latest   worker01  Running        Running 10 minutes ago
rknekib3x3eg    web.2   nginx:latest   manager   Running        Running 10 minutes ago
oxrqtrsuswcr    web.3   nginx:latest   worker02  Running        Running 13 seconds ago

缩容

复制代码
[root@manager ~]# docker service scale web=1
web scaled to 1
overall progress: 1 out of 1 tasks
1/1: running   
verify: Service converged
  • 进行服务缩容操作时只需要设置副本数小于当前应用服务拥有的副本数即可,大于指定缩容副本数的副本会被删除

再次查看服务状态

复制代码
[root@manager ~]#  docker service ps web
ID            NAME    IMAGE        NODE      DESIRED STATE  CURRENT STATE       ERROR PORTS
nc0lvzyt6fv8  web.1   nginx:latest worker01  Running        Running 11 minutes ago

删除服务

复制代码
[root@manager ~]# docker service rm mynginx
mynginx
[root@manager ~]# docker service rm web
web

滚动更新

使用国内几家互联网大厂联合推出的可信镜像中心

复制代码
[root@manager ~]# docker service create --replicas 3 --name redis --update-delay 10s hub.atomgit.com/amd64/redis:7.0.13
......
overall progress: 3 out of 3 tasks
1/3: running
2/3: running
3/3: running
......

查看服务状态

复制代码
[root@manager ~]#  docker service ps redis
ID            NAME     IMAGE         NODE     DESIRED STATE   CURRENT  STATE   ERROR PORTS
9dtcqqyptmbn  redis.1  redis:3.0.6   manager     Running      Running 3 minutes ago
p4agvfmprmgm  redis.2  redis:3.0.6   worker01    Running      Running 3 minutes ago
vqo6493g9cws  redis.3  redis:3.0.6   worker02    Running      Running 3 minutes ago

更新已经部署服务所在容器中使用的镜像版本

复制代码
[root@manager ~]# docker service update --image hub.atomgit.com/library/redis:7.0-alpine
......
possibly leading to different nodes running different
versions of the image.

redis
overall progress: 1 out of 3 tasks
1/3: running
2/3: running
3/3: running
......

添加自定义 Overlay 网络

复制代码
[root@manager ~]# docker network create --driver overlay my-network
  • 创建服务时,通过--network选项指定使用的网络为已存在的 Overlay 网络

创建服务并指定网络

复制代码
[root@manager ~]# docker service create --replicas 3 --network my-network --name myweb hub.atomgit.com/amd64/nginx:1.25.2-perl
......
possibly leading to different nodes running differentversions of the image
vahojjw5ybv9gqatsp1bine88overall progress: 3 out of 3 tasks
1/3: running
2/3: running
3/3: running
......
  • 如果 Swarm 集群中其他节点上的 Docker 容器也使用 my-network 网络,那么处于该 Overlay 网络中的所有容器之间都可以进行通信
数据卷创建与应用

创建数据卷

复制代码
[root@manager ~]# docker volume create product-kgc
product-kgc

将 nginx 容器连接到数据卷

复制代码
[root@manager ~]# docker service create --mount type=volume,src=product-kgc,dst=/usr/share/nginx/html --replicas 1 --name kgc-web-01 hub.atomgit.com/amd64/nginx:1.25.2-perl
......
possibly leading to different nodes running differentversions of the image.
s50loepkzzmdelwi2pipilne3
overall progress: 2 out of 2 tasks
1/2: running2/2: running
......

查看对应的服务

复制代码
[root@manager ~]# docker service ps kgc-web-01
ID            NAME          IMAGE NODE    DESIRED STATE      CURRENT STATE     ERROR PORTS
58g31r3ppwid  kgc-web-01.1  nginx:latest  worker01 Running   Running 24        seconds ago
  • 要确定好容器是在哪个节点运行的,可以看出,此案例中实在work01中运行的

查看数据卷

复制代码
[root@manager ~]# docker volume inspect product-kgc
{
    {
        "CreatedAt": "2021-01-24T09:19:33+08:00",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/product-kgc/_data",
        "Name": "product-kgc",
        "Options": {},
        "Scope": "local"
    }
]

到 work01 中查看数据是否进行同步

复制代码
[root@worker01 ~]# cd /var/lib/docker/volumes/product-kgc/_data/

创建两个测试文件

复制代码
[root@worker01 _data]# mkdir test01 test02

查看服务状态

复制代码
[root@worker01 _data]# docker ps
CONTAINER ID  IMAGE          COMMAND     CREATED      STATUS      PORTS        NAMES
8875962fb67b  nginx:latest  "/docker-entrypoint...."  16 minutes ago Up 16 minutes 80/tcp kgc-web-01.1.58g31r3ppwidwi7x4m8vdy14y
41fdf50c16c2  nginx:latest  "/docker-entrypoint...."  17 minutes ago Up 17 minutes 80/tcp myweb.1.m89ipfy43w38n5f0qtckq55gb
4aa3abe80967  redis:3.0.7   "docker-entrypoint.s..."  18 minutes ago Up 18 minutes 6379/tcp redis.2.mczchtpy4uy7i52tyycwjd9uk

登录进去

复制代码
[root@worker01 _data]# docker exec -it 8875962fb67b bash
root@8875962fb67b:/# ls /usr/share/nginx/html/
50x.html  index.html  test01  test02
使用 bind 类型挂载数据卷

创建测试目录

复制代码
[root@manager ~]# mkdir -p /var/vhost/www/aa
[root@worker01 ~]# mkdir -p /var/vhost/www/aa
[root@worker02 ~]# mkdir -p /var/vhost/www/aa

在 manager 节点安装nfs-utils

复制代码
[root@manager ~]# yum -y install nfs-utils

设置 nfs 共享

复制代码
[root@manager ~]# vim /etc/exports
//添加配置
/var/vhost/www/aa *(rw,sync,no_root_squash)

启动 nfs 服务

复制代码
[root@manager ~]# systemctl start nfs
[root@manager ~]# systemctl start rpcbind

其它两个 worker 节点也安装 nfs

复制代码
yum -y install nfs-utils

在其他两个 work 节点挂载

复制代码
[root@manager ~]# mount 192.168.10.101:/var/vhost/www/aa /var/vhost/www/aa/

创建 2 个 kgc-web-02 服务

复制代码
[root@manager ~]# docker service create --replicas 2 --mount type=bind,src=/var/vhost/www/aa,dst=/usr/share/nginx/html/ --name kgc-web-02 hub.atomgit.com/amd64/nginx:1.25.2-perl

创建一个测试目录

复制代码
[root@worker01 _data]# touch /var/vhost/www/aa/mytest

验证数据是否同步

复制代码
[root@worker01 _data]# docker service ps kgc-web-02
ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE           ERROR               PORTS
toejwbvg8nau        kgc-web-02.1        nginx:latest        manager             Running             Running 2 minutes ago                       
kv04aj4vt84g        kgc-web-02.2        nginx:latest        worker02            Running             Running 2 minutes ago

查看服务状态

复制代码
[root@worker01 _data]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES
d292452b1f39        nginx:latest        "/docker-entrypoint...."   57 seconds ago      Up 56 seconds               80/tcp              kgc-web-02.1.toejwbvg8nau452rvexc0i1c9
6360a54d2bd1        nginx:latest        "/docker-entrypoint...."   22 minutes ago      Up 22 minutes               80/tcp              myweb.3.51xngm6q6zj9jo4vllohbptqn
930b56c8671c        redis:3.0.7         "docker-entrypoint.s..."   23 minutes ago      Up 23 minutes               6379/tcp            redis.1.o2regcre7k626suqytpmqpidi
ada092f9959f        redis:3.0.6         "/entrypoint.sh redi..."   27 minutes ago      Exited (0) 23 minutes ago                       redis.1.9dtcqqyptmbnybz1ub3wfzuzj

登录进去查看结果

复制代码
[root@worker01 _data]# docker exec -it d292452b1f39 bash
root@d292452b1f39:/# ls /usr/share/nginx/html/
mytest

小阿轩yx-Docker Swarm 管理

相关推荐
cui__OaO19 分钟前
Linux软件编程--线程
linux·开发语言·线程·互斥锁·死锁·信号量·嵌入式学习
小狗爱吃黄桃罐头21 分钟前
正点原子【第四期】Linux之驱动开发篇学习笔记-1.1 Linux驱动开发与裸机开发的区别
linux·驱动开发·学习
小晶晶京京1 小时前
day34-LNMP详解
linux·运维·服务器
画个太阳作晴天1 小时前
A12预装app
linux·服务器·前端
fengyehongWorld1 小时前
Linux crontab定时任务
linux·运维
shuangrenlong2 小时前
ubuntu更新chrome版本
linux·chrome·ubuntu
碎像2 小时前
Linux上配置环境变量
linux·运维·服务器
40kuai3 小时前
kubernetes中数据存储etcd
容器·kubernetes·etcd
敲上瘾3 小时前
Linux系统cgroups资源精细化控制基础
linux·测试工具·docker·压力测试·cgroups
起个昵称吧3 小时前
线程相关编程、线程间通信、互斥锁
linux·算法