Upgrade to Pro — share decks privately, control downloads, hide ads and more …

PortainerとDocker Swarmで遊べる環境を作った話

Yamato
August 24, 2020

PortainerとDocker Swarmで遊べる環境を作った話

Yamato

August 24, 2020
Tweet

More Decks by Yamato

Other Decks in Programming

Transcript

  1. PortainerとDocker Swarmで
    遊べる環境を作った話
    ゆるWeb勉強会@札幌 OnLine #8

    View Slide

  2. ゆるWeb勉強会@札幌 OnLine #8 #ゆるWeb札幌
    お話したいこと
    ● なぜ自前で作ったのか
    ● Docker Swarm / Portainer とは
    ● 作った環境の構成/デプロイまでのフロー
    ● 感想
    ※ 具体的な構築手順などは今回ありません。

    View Slide

  3. ゆるWeb勉強会@札幌 OnLine #8 #ゆるWeb札幌
    なぜ自前で環境を作ろうと思った?
    ● 趣味で使ういい感じのDockerインフラを安い維持費で用意したかった
    ○ AWSやGCPの無料枠使うことも考えたが、趣味で使うには従量課金がチョット怖い
    ● 趣味でやることなので、あえて苦労もしてみたかった
    ○ AWS ECSとか使ったら瞬殺なところ、あえて自前構築

    View Slide

  4. ゆるWeb勉強会@札幌 OnLine #8 #ゆるWeb札幌
    Docker Swarmとは?
    Docker Swarm
    ● Dockerに含まれているクラスタリングツール
    ● 複数のDockerホストを束ねて1つの仮想Dockerホストとして利用できる
    ● 複数のサービス(コンテナ)をまとめたStackと呼ばれる単位で管理もできる
    ● docker-compose.ymlとほぼ同じ書き方で構築することができる。
     
     

    View Slide

  5. ゆるWeb勉強会@札幌 OnLine #8 #ゆるWeb札幌
    Portainerとは?
    Portainer
    ●  Go製の軽量なWebGUI Docker管理ツール
    ●  Docker Imageが公式で用意されており、デプロイするだけで簡単に構築可能
    ●  WebAPIが用意されており、Webhookを利用したCD環境構築なども可能
    ●  有料で使える機能(Single Sign Onなど)もあるが、個人で使う分には不要

    View Slide

  6. ゆるWeb勉強会@札幌 OnLine #8 #ゆるWeb札幌
    なぜPortainer/Docker Swarmを選んだのか?
    ● 色々アプリ作ってデプロイしていたが、
    docker-compose x CLI だけでやるの疲れた
    ○ WebGUIでサクサクやりたかった
    ● 軽量で簡単に構築できるうえに
    APIが用意されていて、CD環境構築までできる
    ○ 個人でやるときでも、 CI/CDは大切だと思う
    ● k8sも考えたが、個人でやるにはオーバースペックすぎると感じた
    ○ あくまでお安めの VPSでサクサク動いてほしかった

    View Slide

  7. 構成について

    View Slide

  8. ゆるWeb勉強会@札幌 OnLine #8 #ゆるWeb札幌
    構成
    さくらVPSを3台使って構築しています
    ● リバースプロキシ&SSL終端
    ● Docker Swarm & Portainer マネージャ
    ● Docker Swarm & Portainer エージェント
    6台写ってますが、3台は別用途のサーバです。

    View Slide

  9. ゆるWeb勉強会@札幌 OnLine #8 #ゆるWeb札幌
    構成図
    Docker Swarm
    クラスタ
    Webサーバ

    View Slide

  10. ゆるWeb勉強会@札幌 OnLine #8 #ゆるWeb札幌
    構成図
    Docker Swarm
    クラスタ
    Webサーバ
    Dockerクラスタをインターネット上に直で
    晒さないためのリバースプロキシ
    &
    SSL終端も兼務

    View Slide

  11. ゆるWeb勉強会@札幌 OnLine #8 #ゆるWeb札幌
    構成図
    Docker Swarm
    クラスタ
    Webサーバ
    Docker Swarmで構築されたクラスタ
    マネージャノードには
    Portainerをデプロイ
    エージェントノードには
    Portainer Agentをデプロイ
    (どちらもDockerでデプロイ)
    いずれもSSH以外のインバウンドアクセスは
    Webサーバからの接続しか許可していない。
    (Firewalldで管理)

    View Slide

  12. ゆるWeb勉強会@札幌 OnLine #8 #ゆるWeb札幌
    Portainerの画面 (公式のデモ環境)

    View Slide

  13. ゆるWeb勉強会@札幌 OnLine #8 #ゆるWeb札幌
    Portainerの画面 (公式のデモ環境)

    View Slide

  14. ゆるWeb勉強会@札幌 OnLine #8 #ゆるWeb札幌
    Portainerの画面 (公式のデモ環境)

    View Slide

  15. ゆるWeb勉強会@札幌 OnLine #8 #ゆるWeb札幌
    Portainerの画面 (公式のデモ環境)

    View Slide

  16. デプロイについて

    View Slide

  17. ゆるWeb勉強会@札幌 OnLine #8 #ゆるWeb札幌
    デプロイの流れ
    Docker Swarm
    クラスタ
    Webサーバ

    View Slide

  18. ゆるWeb勉強会@札幌 OnLine #8 #ゆるWeb札幌
    デプロイの流れ
    Docker Swarm
    クラスタ
    Webサーバ
    Git push

    View Slide

  19. ゆるWeb勉強会@札幌 OnLine #8 #ゆるWeb札幌
    デプロイの流れ
    Docker Swarm
    クラスタ
    Webサーバ
    Gitlab CIが起動
    Docker imageをビルドして、
    Gitlab Docker Registry にプッシュ

    View Slide

  20. ゆるWeb勉強会@札幌 OnLine #8 #ゆるWeb札幌
    デプロイの流れ
    Docker Swarm
    クラスタ
    Webサーバ
    イメージのプッシュ後、
    Gitlab CI で Portainerの
    Webhook URLにアクセス

    View Slide

  21. ゆるWeb勉強会@札幌 OnLine #8 #ゆるWeb札幌
    デプロイの流れ
    Docker Swarm
    クラスタ
    Webサーバ
    Gitlab Docker Registry から
    最新のイメージを取得し、起動する

    View Slide

  22. ゆるWeb勉強会@札幌 OnLine #8 #ゆるWeb札幌
    Git push するだけでデプロイできる環境の完成!

    View Slide

  23. ゆるWeb勉強会@札幌 OnLine #8 #ゆるWeb札幌
    自分で作ってみた感想
    ● Web GUIで操作できるのが楽
    ○ CLIで入って作業することがなくなった
    ● 気軽に起動しっぱなしのコンテナを建てれて楽しい
    ○ 例えば、Herokuの無料枠は 1000時間/月 なので、2, 3つ建てると無料枠では足りなくなる
    ● AWS ECS に対する感謝
    ○ あんなに簡単に構築できるって素晴らしい ……
    ● データの永続化って難しい
    ○ ホストのボリュームにデータが保存されるので、ホスト切り替えが大変。 今後の課題
    などなど書いていますが ……

    View Slide

  24. ゆるWeb勉強会@札幌 OnLine #8 #ゆるWeb札幌
    自分で作ったインフラで遊ぶのが楽しい

    View Slide

  25. ゆるWeb勉強会@札幌 OnLine #8 #ゆるWeb札幌
    興味があるかたはぜひ、使ってみてください!
    Dockerで起動するので、手元の環境で簡単に試すこともできます
    (Docker Swarmモードである必要はないです)

    View Slide

  26. ありがとうございました!

    View Slide