Docker、SkyDNS、SkyDock-高速かつ便利

少し前に、私はdockerが何であるかを研究し始めました。 「なぜそれが必要なのか?」、または「fi、これは単なるファッショントレンドです!」、または「誰がそのような生の製品を作っているのか?」という哲学的な喜びには触れません。 SkyDockSkyDNSなどの利点とアメニティを使用して、ドッカーが何であるかをすぐに自宅で感じる方法について簡単なヒントを提供したいだけです。
このメモは、英語の記事で山を読む時間がほとんどない(または英語を知らない)人を対象としていますが、コンソールとは何か、自分でdockerをインストールする方法についてはほとんど知識がありません。
怠け者のための記事の簡単な要約
docker pull crosbymichael/skydns docker pull crosbymichael/skydock docker run -d -v /var/run/docker.sock:/docker.sock --name skydock crosbymichael/skydock -ttl 30 -environment dev -s /docker.sock -domain docker -name skydns docker run -d -p 172.17.42.1:53:53/udp --name skydns crosbymichael/skydns -nameserver 8.8.8.8:53 -domain docker 

以下はルーターの設定または/usr/lib/systemd/system/docker.service編集ですが、そのような詳細のためにはhabracatの下でクロールする必要があります。


SkyDNSおよびSkyDockとは


SkyDNSを使用すると、小規模のDNSサーバーを上げることができます。 次にSkyDockは、ソケット接続を介してdockerデーモンと通信することにより、 Dockerの腸から取得したデータに依存して、SkyDNSのゾーンを管理します。
SkyDNS + SkyDockバンドルを使用すると、ホストで実行されているコンテナーのIPアドレスを見つけることを心配する必要がなくなります。 実際には、サービスの発見です。
したがって、mongodbを使用して複数のコンテナーを実行し、レプリカなどの収集を練習できます。
 docker run -d --name repl1 mongo --smallfiles docker run -d --name repl2 mongo --smallfiles docker run -d --name repl3 mongo --smallfiles 

モンガを設定するジャングルには入りませんが、SkyDockからはどのようなパンが手に入りますか:
repl2.mongo.dev.dockerという名前の特定のコンテナーのIPを取得するrepl2.mongo.dev.docker
dig mongo.dev.dockerして、mongoイメージに基づいて実行されているすべてのコンテナーのIPリストを取得するdig mongo.dev.docker
-コマンドdig dev.dockerして、特定のホストのすべてのコンテナーのIPアドレスのリストを取得するdig dev.docker

設置


すべてのことについて約5分かかります(これは、もちろん、強力で強力なネットワークへの接続速度に依存します)。
希望する人は、著者自身がSkyDockについて語り、この農場全体をリアルタイムで立ち上げるビデオを見ることができます。


最初に、画像のレジストリからSkyDNSとSkyDockの画像を取得する必要があります。 この画像の利点は、 Michael Crosbyという名前の親切な人(彼のgithubアカウントYouTubeチャンネル 、そして当然、彼のdockerレジストリハブ )によって用意されました。
 docker pull crosbymichael/skydns docker pull crosbymichael/skydock 

ダウンロードが成功したら、次のコマンドを実行する必要があります。
 docker run -d -p 172.17.42.1:53:53/udp --name skydns crosbymichael/skydns -nameserver 8.8.8.8:53 -domain docker 

 docker run -d -v /var/run/docker.sock:/docker.sock --name skydock crosbymichael/skydock -ttl 30 -environment dev -s /docker.sock -domain docker -name skydns 

最初はskydnsという名前のコンテナでSkyDNSを起動し、 人間の声でそれを伝えます:「ホスト532.17.42.1のポート53からポート53に転送」、「あなたに尋ねられている名前がわからない場合はサーバー8.8.8.8を使用」名前付きドッカー。」 もちろん、ドッカードメインゾーンは私が天井から選択したものです。ここでは、ドメインをexample.comとして指定できます。
2番目のコマンドは、同じくコンテナ内でSkyDockを起動します。
-名前はskydockによって与えられます。
-ソケット/var/run/docker.sockコンテナー内に/var/run/docker.sockれ、Dockerデーモンと通信します(使用しているシステムによっては、このパラメーターを修正する必要がある場合があります)。
-30秒のTTLが設定されています(私が理解しているように、これはSkyDNSの情報を更新する頻度です)。
-環境にはdevという名前が付けられます(作成者が複数のホストで使用するためにSkyDockを完成させる計画です。したがって、本番と開発を区別することが可能です)。
-s単に通信用のソケットパスを示します。
dockerドメイン名。
-SkyDNSを使用したコンテナ名-突然skydns
実際にインストールは完了し、SkyDNSとSkyDockはすでに機能しています。

ネットワーク設定


そのため、今では、すべての来訪者に対して、独自の小さくて温かいチューブ(下線) DNSサービスがあるという情報を何らかの形で伝える必要があります。
ここにはいくつかのオプションがあります。
コンテナが同じホストに住んでいる間に互いについて学習するには、コマンドで--dnsパラメータを指定して--dnsを起動するだけで十分です。 systemdユニットの例は、以下のネタバレに記載されています。
変更されたsystemd-unit docker.service
 $ cat /usr/lib/systemd/system/docker.service [Unit] Description=Docker Application Container Engine Documentation=http://docs.docker.com After=network.target docker.socket Requires=docker.socket [Service] ExecStart=/usr/bin/docker -d --bip=172.17.42.1/16 --dns=172.17.42.1 -H fd:// LimitNOFILE=1048576 LimitNPROC=1048576 [Install] WantedBy=multi-user.target 


私の状況では、自宅に小さなサーバーを備えたロカルカがあり、そこでコンテナが回転し、ラップトップで作業しています。 そのため、ラップトップが新しいDNSサーバーを認識し、最初に使用することを確認する必要があります。
これを行うために、私はルーターにいます:
-宛先アドレス172.0.0.0/8で着信するすべてのトラフィックをサーバーに転送する追加のルーティングルールを構成しました。
-DHCP設定では、最初にアドレスを設定するのは172.17.42.1で、次にプロバイダーdnsサービスです。
そして出来上がり! すべてが最高の状態で機能します!

お団子
 $ docker logs skydns 2>&1 | grep 'Received DNS' | awk -F\" '{print $2}' | sort | uniq 

このコマンドを使用すると、LANのデバイスが関心を持っているドメイン名を確認できます。
たとえば、携帯電話に関心のある豊富な広告ドメイン...

しかし、リブートする必要がある場合はどうでしょうか?


ホストを再起動するには、次を実行します。
  docker stop skydock docker stop skydns 

実際の再起動自体、そして:
  docker start skydns docker start skydock 

美人!
シムでは、Dockerで楽しい娯楽をお過ごしください! :)

UPD。 ちなみに、コメントにドッカーを使用してライフハックを残したり、彼のためにあらゆる種類の興味深いpribludsの名前を指摘したりする場合は、非常に感謝します。 さて、またはあなた自身がピッキングに興味を持っていたことを教えてください、多分誰かも興味がありますか?
UPD2。 skydockとskydnsのsystemdのユニットを同封します。
skydns.service
 [Unit] Description=SkyDNS container Requires=docker.service [Service] Restart=always ExecStart=/usr/bin/docker start -a skydns ExecStop=/usr/bin/docker stop -t 2 skydns [Install] WantedBy=multi-user.target 


skydock.service
 [Unit] Description=SkyDock container After=docker.service Requires=skydns.service [Service] Restart=always ExecStart=/usr/bin/docker start -a skydock ExecStop=/usr/bin/docker stop -t 2 skydock [Install] WantedBy=multi-user.target 

Source: https://habr.com/ru/post/J246933/


All Articles