Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

構成について

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

デプロイについて

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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