ホームページ  >  記事  >  システムチュートリアル  >  Docker Engine の Swarm モードをすぐに始めましょう!

Docker Engine の Swarm モードをすぐに始めましょう!

PHPz
PHPz転載
2023-12-27 14:34:001178ブラウズ
###導入### Swarm、パンクロックバンドっぽいですね。しかし、これは確かに新しいオーケストレーション メカニズム、または Docker の既存のオーケストレーション メカニズムの改良です。簡単に言えば、古いバージョンの Docker を使用している場合は、Swarm を手動で構成して Docker クラスターを作成する必要があります。バージョン 1.12 以降、Docker エンジンはネイティブ実装 (LCTT アノテーション: 以下を参照) を統合して、シームレスなクラスターのセットアップをサポートします。それがこの記事が存在する理由です。

このチュートリアルでは、オーケストレーションされた Docker で何ができるかを体験していきます。この記事は、すべての詳細 (BnB など) を記載したり、すべての答えを提供したりすることを目的としたものではありませんが、クラスタリングへの道を歩み始めるには役立ちます。私のリーダーシップから始めましょう。
Docker 引擎的 Swarm 模式之入门!

ティーザー

技術概要

Docker の詳細で役立つドキュメントをここにコピーするのはもったいないので、テクノロジーの概要を簡単に説明します。 Docker はすでに存在します。ここで、より多くのサーバーを Docker ホストとして機能させたいと考えていますが、同時にそれらのサーバーを同じ論理エンティティに所属させたいと考えています。つまり、クラスターをセットアップする必要があります。
Docker 引擎的 Swarm 模式之入门!
ホストのクラスターから始めましょう。ホスト上で Swarm クラスターを初期化すると、そのホストがクラスターのマネージャーになります。技術的な観点から見ると、これはコンセンサス グループのノードになります。その背後にある数学的論理は Raft アルゴリズムに基づいています。マネージャーはタスクのスケジュールを設定する責任があります。特定のタスクは、Swarm クラスターに参加している各ワーカー ノードに委任されます。これらの操作は Node API によって管理されます。 API という言葉は大嫌いですが、ここでは使わざるを得ません。

Service API は、この実装の 2 番目のコンポーネントです。これにより、マネージャー ノードがすべての Swarm クラスター ノード上に分散サービスを作成できるようになります。このサービスはレプリケート可能です。つまり、サービス (LCTT アノテーション: これらのサービスを指します) はバランシング メカニズム (LCTT アノテーション: レプリケート モードを指します) によってクラスターに分散され、複数のコンテナー インスタンスが自動的にクラスター内の一部のタスクにタスクをスケジュールします。 ) 条件を満たすノード)、またはグローバル (LCTT アノテーション: グローバル モードを参照) に割り当てることができます。これは、各ノードがコンテナー インスタンスを実行することを意味します。

やるべきことはまだありますが、作業を進めるにはこの情報で十分です。それでは、実践的な内容に移りましょう。私たちのターゲット プラットフォームは CentOS 7.2 ですが、興味深いことに、このチュートリアルを書いている時点ではリポジトリに Docker のバージョン 1.10 しかありません。つまり、Swarm を使用するには手動で更新する必要があります。これについては別のチュートリアルで説明します。既存のクラスターに新しいノードを追加する方法を説明するフォローアップ ガイドがあり、非対称構成には Fedora を使用します。この時点で、正しい構成が行われていること、およびクラスターが稼働していることを確認してください (LCTT 注釈: 最初のノードの Docker がインストールされて Swarm モードに入っていることを指しますが、Swarm の初期化方法については説明していません)クラスターですが、それについては次の章で説明しますので、心配しないでください。

イメージとサービスの構成

負荷分散された Apache サービスを構成し、複数のコンテナ インスタンスを使用して、一意の IP アドレス経由でページ コンテンツを提供してみます。かなり標準的です (LCTT 翻訳注釈: この負荷分散された Web サーバーを指します)。この例では、可用性、冗長性、スケールアウト、パフォーマンスなど、クラスターを使用する理由のほとんどを強調しています。もちろん、ネットワークとストレージの両方を考慮する必要がありますが、それらはこのガイドの範囲外です。

この Dockerfile テンプレートは、実際には公式イメージ リポジトリの httpd の下にあります。必要なのは、簡単なセットアップだけで開始できます。独自のイメージをダウンロードまたは作成する方法については、このチュートリアルの上部にあるリンクのスタート ガイドを参照してください。

リーリー

Docker 引擎的 Swarm 模式之入门!

画像が作成されました

次の手順に進む前に、コンテナ インスタンスをエラーなく起動でき、Web サーバーに接続できることを確認する必要があります (LCTT アノテーション: 次のコマンドを使用します)。接続できることを確認したら、分散サービスの作成を開始できます。

リーリー

この IP アドレスをブラウザに入力して、何が表示されるかを確認してください。

Swarm の初期化と構成

次のステップは、Swarm クラスターを開始することです。開始するには、次の最も基本的なコマンドが必要です。これらのコマンドは、Docker ブログの例とよく似ています。 リーリー

私たちはここで何をしましたか? 5 つのコンテナー インスタンスを含む、frontent というサービスを作成しました。同時に、ホストのポート 80 をこれらのコンテナのポート 80 にバインドします。このテストには、新しく作成した Apache イメージを使用します。ただし、上記のコマンドをコンピュータに直接入力すると、次のエラーが表示されます:

docker service create --name frontend --replicas 5 -p 80:80/tcp my-apache2:latest
Error response from daemon: This node is not a swarm manager. Use "docker swarm init" or "docker swarm join" to connect this node to swarm and try again.

这意味着你没有将你的主机(节点)配置成一个 Swarm 管理者manager。你可以在这台主机上初始化 Swarm 集群或是让它加入一个现有的集群。由于我们目前还没有一个现成的集群,我们将初始化它(LCTT 译注:指初始化 Swarm 集群并使当前节点成为 manager):

docker swarm init
Swarm initialized: current node (dm58mmsczqemiikazbfyfwqpd) is now a manager.

为了向这个 Swarm 集群添加一个工作者worker,请执行下面的指令:

docker swarm join \
--token SWMTKN-1-4ofd46a2nfyvrqwu8w5oeetukrbylyznxla
9srf9vxkxysj4p8-eu5d68pu5f1ci66s7w4wjps1u \
10.0.2.15:2377

为了向这个 Swarm 集群添加一个管理者manager,请执行 docker swarm join-token manager 并按照指示操作。

操作后的输出不用解释已经很清楚明了。我们成功的创建了一个 Swarm 集群。新的节点们将需要正确的令牌token来加入这个 Swarm 集群。如果你需要配置防火墙,你还需找到它的 IP 地址和端口(LCTT 译注:指 Docker 的 Swarm 模式通讯所需的端口,默认 2377)。此外,你还可以向 Swarm 集群中添加管理者节点。现在,重新执行刚刚的服务创建指令:

docker service create --name frontend --replicas 5 -p 80:80/tcp my-apache2:latest
6lrx1vhxsar2i50is8arh4ud1
测试连通性

现在,我们来验证下我们的服务是否真的工作了。从某些方面讲,这很像我们在 Vagrant 和 coreOS 中做的事情那样。毕竟它们的原理几乎相同。相同指导思想的不同实现罢了(LCTT 译注:笔者观点,无法苟同)。首先需要确保 docker ps 能够给出正确的输出。你应该能看到所创建服务的多个容器副本。

docker ps
CONTAINER ID        IMAGE               COMMAND              CREATED             STATUS              PORTS              
NAMES
cda532f67d55        my-apache2:latest   "httpd-foreground"  
2 minutes ago       Up 2 minutes        80/tcp              frontend.1.2sobjfchdyucschtu2xw6ms9a
75fe6e0aa77b        my-apache2:latest   "httpd-foreground"  
2 minutes ago       Up 2 minutes        80/tcp              frontend.4.ag77qtdeby9fyvif5v6c4zcpc
3ce824d3151f        my-apache2:latest   "httpd-foreground"  
2 minutes ago       Up 2 minutes        80/tcp              frontend.2.b6fqg6sf4hkeqs86ps4zjyq65
eda01569181d        my-apache2:latest   "httpd-foreground"  
2 minutes ago       Up 2 minutes        80/tcp              frontend.5.0rmei3zeeh8usagg7fn3olsp4
497ef904e381        my-apache2:latest   "httpd-foreground"  
2 minutes ago       Up 2 minutes        80/tcp              frontend.3.7m83qsilli5dk8rncw3u10g5a

我也测试了不同的、非常规的端口,它们都能正常工作。对于你如何连接服务器和收取请求你将会有很多可配置的余地。你可以使用 localhost 或者 Docker 网络接口(笔者注:应该是指 Docker 的默认网桥 docker0,其网关为 172.17.0.1) 的 IP 地址的正确端口去访问。下面的例子使用了端口 1080:
Docker 引擎的 Swarm 模式之入门!

Replicated Web service works

至此,这是一个非常粗略、简单的开始。真正的挑战是创建一个优化过的、可扩展的服务,但是它们需要一个准确的技术用例。此外,你还会用到 docker info 和 docker service(还有 inspect 和 ps)命令来详细了解你的集群是如何工作的。

可能会遇到的问题

你可能会在把玩 Docker 和 Swarm 时遇到一些小的问题(也许没那么小)。比如 SELinux 也许会抱怨你正在执行一些非法的操作(LCTT 译注:指在强制访问控制策略中没有权限的操作)。然而,这些错误和警告应该不会对你造成太多阻碍。
Docker 引擎的 Swarm 模式之入门!

SELinux alert

  • docker service 不是一条命令(docker service is not a docker command)当你尝试执行必须的命令去创建一个复制模式replicated的服务时,你可能会遇到一条错误说 docker: 'service' is not a docker command(LCTT 译注:见下面的例子)。这表示你的 Docker 版本不对(使用 -v 选项来检查)。我们将在将来的教程讨论如何修复这个问题。
    docker service create --name frontend --replicas 5 -p 80:80/tcp my-apache2:latest
    docker: 'service' is not a docker command.
  • docker tag 无法识别(docker tag not recognized)你也许会看到下面的错误:
    docker service create -name frontend -replicas 5 -p 80:80/tcp my-apache2:latest
    Error response from daemon: rpc error: code = 3 desc = ContainerSpec: "-name" is not a valid repository/tag

    关于这个错误已经有多个相关的讨论和帖子了。其实这个错误也许相当无辜。你也许是从浏览器粘贴的命令,在浏览器中的横线也许没被正确解析(笔者注:应该用 --name 而不是 -name)。就是这么简单的原因所导致的。

扩展阅读

关于这个话题还有很多可谈的,包含 1.12 版之前的 Swarm 集群实现(笔者注:旧的 Swarm 集群实现,下文亦作独立版本,需要 Consul 等应用提供服务发现),以及当前的 Docker 版本提供的(笔者注:新的 Swarm 集群实现,亦被称为 Docker 引擎的 Swarm 模式)。也就是说,请别偷懒花些时间阅读以下内容:

  • Docker Swarm の概要 (Swarm クラスターのインストールのスタンドアロン バージョン)
  • 本番環境用の Swarm クラスターを構築する (独立バージョンのインストール)
  • Docker Swarm クラスターのインストールと作成 (スタンドアロン バージョンのインストール)
  • Docker Engine Swarm の概要 (バージョン 1.12 の場合)
  • Swarm モードの開始 (バージョン 1.12 の場合)
要約

ついにここに登場しました。この時点であなたが何かを学べたという保証はまだありませんが、この記事はまだ役に立つと信じています。いくつかの基本的な概念と、Swarm クラスター モードの仕組みとその機能の概要について説明します。また、Web サーバーのイメージを正常にダウンロードして作成し、それに基づいて実行しました。複数のクラスター化されたコンテナー インスタンス。現時点では上記の実験は単一ノードでしか行っていませんが、将来的には明確に説明します (LCTT 翻訳: マルチノード Swarm クラスターの動作を明確に説明するため)。そして、いくつかの一般的な問題も解決しました。

このガイドが十分に興味深いものであると感じていただければ幸いです。私が過去に Docker について書いた記事と組み合わせると、これらの記事では、イメージ、ネットワーク スタック、ストレージ、そしてクラスターの操作方法など、適切な説明が得られるはずです。単なるウォームアップとして考えてください。新しい Docker チュートリアルをお楽しみください。またお会いできるのを楽しみにしています。どれだけ覚えているかをコントロールすることはできません。

###あなたの幸せを祈っています。

以上がDocker Engine の Swarm モードをすぐに始めましょう!の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はlinuxprobe.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。