Slide 1

Slide 1 text

Dockerで始める自宅サーバー入門 あまてく 松本紘輝 2024/09/07 KC3 2024 学生勉強会

Slide 2

Slide 2 text

ざっくりとした今日の予定 1. はじめに 0 min 2. ちょっとした座学 3. Docker戯れタイム【ハンズオン】 5 min 30 min 2 min 90 min

Slide 3

Slide 3 text

自己紹介タイム

Slide 4

Slide 4 text

自己紹介 松本紘輝 Matsumoto Kouki 京都産業大学 情報理工学部 「あまてく」から来ました Kotlin, Go, Perl をよく書きます https://github.com/rokuosan https://twitter.com/rokuosan_dev 現実のすがた

Slide 5

Slide 5 text

自己紹介 松本紘輝 Matsumoto Kouki 京都産業大学 情報理工学部 「あまてく」から来ました Kotlin, Go, Perl をよく書きます https://github.com/rokuosan https://twitter.com/rokuosan_dev インターネットのすがた

Slide 6

Slide 6 text

はじめに

Slide 7

Slide 7 text

これだけはお願いします!

Slide 8

Slide 8 text

お願い 楽しく助け合いながらやりましょう! 一人では手が回らないので...

Slide 9

Slide 9 text

スーパー挙手タイム

Slide 10

Slide 10 text

スーパー挙手タイム ① Docker を用意してきましたか? 互換ソフトウェアでもOK!リモートでもOK!

Slide 11

Slide 11 text

スーパー挙手タイム ② 自宅サーバーやっている人いますか? クラウド/VPSでもOK!

Slide 12

Slide 12 text

スーパー挙手タイム ③ Docker 使ってますか? 用途はなんでもOK!

Slide 13

Slide 13 text

スーパー挙手タイム ④ Docker Desktop 使ってますか? 互換ソフトウェアは後で聞きます!

Slide 14

Slide 14 text

スーパー挙手タイム 番外編 Docker 互換どれ使ってる? Rancher, Podman, Finch, containerd+nerdctl など

Slide 15

Slide 15 text

ちょっとした座学タイム

Slide 16

Slide 16 text

サーバーってなんだろう サーバーってなんだ?

Slide 17

Slide 17 text

サーバーってなんだろう これかな? https://business.ntt-east.co.jp/content/cloudsolution/column-413.html

Slide 18

Slide 18 text

サーバーってなんだろう これかな?

Slide 19

Slide 19 text

サーバーってなんだろう 調べてみた 参考: IDCフロンティア. “サーバーとは”. https://www.idcf.jp/words/server.html.

Slide 20

Slide 20 text

サーバーってなんだろう 他のコンピュータからの通信に応答する ソフトウェアもしくはハードウェア 参考: IDCフロンティア. “サーバーとは”. https://www.idcf.jp/words/server.html.

Slide 21

Slide 21 text

サーバーってなんだろう 応答するプログラムが動いていればサーバー! ヨシッ!!!

Slide 22

Slide 22 text

自宅サーバーってなんだろう 自宅サーバーってなんだ?

Slide 23

Slide 23 text

自宅サーバーってなんだろう 自宅にサーバーを置くこと!

Slide 24

Slide 24 text

自宅サーバーってなんだろう サービスを公開したりしなかったりする

Slide 25

Slide 25 text

なぜ自宅サーバーを? なぜ自宅サーバーをやるの?

Slide 26

Slide 26 text

なぜ自宅サーバーを? 楽しいから!!

Slide 27

Slide 27 text

なぜ自宅サーバーを? 壊しても怒られない (物理的にもソフトウェア的にも)

Slide 28

Slide 28 text

なぜ自宅サーバーを? 雑運用しても怒られない

Slide 29

Slide 29 text

なぜ自宅サーバーを? そもそもクラウドが高すぎる…

Slide 30

Slide 30 text

自宅サーバーの始め方は? 自宅サーバーってどうやって始めるの?

Slide 31

Slide 31 text

自宅サーバーの始め方は? PCを1台買いましょう!! 新品の必要はありません!!

Slide 32

Slide 32 text

自宅サーバーの始め方は? Q.「えー、でも高いじゃん?」 A. 中古なら安く手に入ります (余談: AirPods と メモリ128GB どっちが欲しいですか?)

Slide 33

Slide 33 text

自宅サーバーの始め方は? Q.「じゃあどこで買えばいいの?」 A. ヤフオクを覗いてみましょう!

Slide 34

Slide 34 text

ヤフオクを覗いてみる

Slide 35

Slide 35 text

なぜ今回 Docker を使うのか

Slide 36

Slide 36 text

なぜ Docker を使うのか 入門するときに日本語記事多い方がいいじゃん…? そもそも

Slide 37

Slide 37 text

なぜ Docker を使うのか でも古いと性能に不安が… 自宅鯖始めたいけど、お金はない! ↓ 古いマシンを1台買おうぜ!

Slide 38

Slide 38 text

なぜ Docker を使うのか 1台で複数の環境を軽量かつ簡単に作りたい! ↓ 仮想化技術を使おう!

Slide 39

Slide 39 text

なぜ Docker を使うのか 仮想化でもVMよりコンテナの方が省リソース 物理マシン ホストOS 仮想化ソフトウェア ゲストOS ミドルウェア アプリ ゲストOS ミドルウェア アプリ 物理マシン ホストOS Docker ミドルウェア アプリ ミドルウェア アプリ 仮想マシン コンテナ(Dockerの例) VM 1 VM 2 コンテナ 1 コンテナ 2

Slide 40

Slide 40 text

なぜ Docker を使うのか 日本語記事が豊富で古いマシンでも動く 自宅サーバー入門に最適! Moby Dockくん

Slide 41

Slide 41 text

コンテナについて コンテナの利点を歴史的に考えてみる

Slide 42

Slide 42 text

コンテナの登場前 サービスを展開したい! →物理サーバーを1台ずつ丁寧に管理 台数が増えると…?

Slide 43

Slide 43 text

コンテナの登場前・VMの登場 VMが登場 ↓ インスタンスとして管理できるようになる 動かなかったら捨てて作り直すことができる

Slide 44

Slide 44 text

コンテナの登場前・VMの登場 「ペットから家畜へ」

Slide 45

Slide 45 text

コンテナの登場前・課題点 コードによる定義が普及する (Chef, Ansible, Terraformなどの手続き型) ↓ 冪等性の保障? 意図しない状態になることもあった(らしい)

Slide 46

Slide 46 text

コンテナの登場・利点 コンテナ技術の発達 ↓ 手続き的から宣言的に管理 ビルド後にほとんど差異なく動くように (環境変数などでの挙動変更は考えない)

Slide 47

Slide 47 text

コンテナ(+VM)の利点 1. 宣言的に管理 2. 環境・プロセスの分離 3. ランタイムのバージョン管理 とてもウレシイことがいっぱい

Slide 48

Slide 48 text

自宅サーバやる時の嬉しさポイント 1. コードで管理できる(IaC) 2. 可搬性がある 3. 少ないホストで多数のソフトウェア 少ないリソースを柔軟に扱える!

Slide 49

Slide 49 text

IaCって何? コードでインフラを管理できる → VCSが使えて嬉しい → 可搬性が高まって嬉しい Infrastructure as Code

Slide 50

Slide 50 text

Dockerfileとcompose.yaml

Slide 51

Slide 51 text

Docker 以外の選択肢 ちなみにDocker以外って何がある?

Slide 52

Slide 52 text

Docker 以外の選択肢 結構色々ある (VM + コンテナ)

Slide 53

Slide 53 text

まあそんなわけでDockerで自宅鯖入門やっていき

Slide 54

Slide 54 text

Docker で自宅サーバって具体的にどうやるの? Docker での自宅サーバー運営

Slide 55

Slide 55 text

Linux サーバーにDocker を入れる ↓ compose.yamlを書く ↓ “docker compose up -d”を実行 Docker での自宅サーバー運営 3ステップだけ!とっても簡単!!

Slide 56

Slide 56 text

ほんとうにそれだけ??? Docker での自宅サーバー運営

Slide 57

Slide 57 text

すみません。嘘です。 (ただ、個人利用ならほとんど問題ないはず) Docker での自宅サーバー運営 真面目に運用するならHA構成を組みましょう

Slide 58

Slide 58 text

僕は落ちてもええかと思って使ってます Docker での自宅サーバー運営 ほとんど個人利用なので。特にMinecraftとかは使いがち (基本的にはKubernetesで動かしてます)

Slide 59

Slide 59 text

お待ちかねのハンズオン

Slide 60

Slide 60 text

Dockerの基本 Docker のコマンドを触ってみる

Slide 61

Slide 61 text

Dockerの基本 docker version $ docker version CloudClient: integration: v1.0.35+desktop.13 Version: 26.0.0 API version: 1.45 Go version: go1.21.8 Git commit: 2ae903e Built: Wed Mar 20 15:14:46 2024 OS/Arch: darwin/arm64 Context: desktop-linux Server: Docker Desktop 4.29.0 (145265) Engine: Version: 26.0.0 API version: 1.45 (minimum version 1.24) Go version: go1.21.8 Git commit: 8b79278 Built: Wed Mar 20 15:18:02 2024 OS/Arch: linux/arm64 Experimental: false containerd: Version: 1.6.28 GitCommit: ae07eda36dd25f8a1b98dfbf587313b99c0190bb runc: Version: 1.1.12 GitCommit: v1.1.12-0-g51d5e94 docker-init: Version: 0.19.0 GitCommit: de40ad0 Docker のクライアントとサーバーのバージョンと 各種情報を確認できるコマンド

Slide 62

Slide 62 text

Dockerの基本 docker run $ docker run "docker run" requires at least 1 argument. See 'docker run --help'. Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...] Create and run a new container from an image このコマンドの後に続くイメージとオプションで コンテナを起動します。手元にないイメージは レジストリから取得されます。 docker run は docker container run のエイリアス 正しい方は長いので docker run とよく書きます $ docker container run "docker container run" requires at least 1 argument. See 'docker container run --help'. Usage: docker container run [OPTIONS] IMAGE [COMMAND] [ARG...] Create and run a new container from an image docker container run

Slide 63

Slide 63 text

Dockerの基本 準備運動は完璧!

Slide 64

Slide 64 text

ハンズオンのリポジトリ ハンズオンはここから→ $ git clone [email protected]:rokuosan/kc3-docker-home-server.git Git がない人はQRコードに接続して Zipでダウンロードしてください。 Git を使う人は以下のコマンドで ローカルへCloneしてください!

Slide 65

Slide 65 text

リポジトリの構造 リポジトリの構造 tree -L 2 . ├── 01-hello-world │ └── README.md ├── 02-nginx │ └── README.md ├── 03-nginx-custom │ ├── README.md │ ├── answer.md │ ├── config │ ├── data │ └── secret ├── 04-compose │ ├── README.md │ └── compose.yaml ├── 05-dockerfile │ ├── README.md │ ├── backend │ ├── compose.yaml │ └── database ├── 06-minecraft │ ├── README.md │ ├── compose.yaml │ └── data ├── LICENSE └── README.md 13 directories, 12 files 数字から始まるのがハンズオンのステップです。 非表示の「.devcontainer」のファイルもあります。 devcontainer を使える人は再現性のためにも 利用してくれると助かります!

Slide 66

Slide 66 text

devcontainer の利用 VSCode で開いて「コンテナーで再度開く」を選んでください

Slide 67

Slide 67 text

ステップ 01 Hello World をしてみよう

Slide 68

Slide 68 text

ステップ 01・Hello World してみよう # Hello World イメージからコンテナを起動する $ docker run --rm hello-world:latest Hello from Docker! This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. (arm64v8) 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker ID: https://hub.docker.com/ For more examples and ideas, visit: https://docs.docker.com/get-started/

Slide 69

Slide 69 text

ステップ 01・Hello World してみよう # Ubuntu を起動してみる $ docker run --rm –it ubuntu:latest /bin/bash # コンテナの中でos-releaseを確認してみよう root@76993e1de13f:/# cat /etc/os-release PRETTY_NAME="Ubuntu 24.04 LTS" NAME="Ubuntu" VERSION_ID="24.04" VERSION="24.04 LTS (Noble Numbat)" VERSION_CODENAME=noble ID=ubuntu ID_LIKE=debian HOME_URL="https://www.ubuntu.com/" SUPPORT_URL="https://help.ubuntu.com/" BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/" PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy" UBUNTU_CODENAME=noble LOGO=ubuntu-logo

Slide 70

Slide 70 text

ステップ 01・「--rm」オプション # Ubuntu をそのまま起動する $ docker run ubuntu:latest /bin/bash # 応答が返ってこない # 停止中を含めたすべてのコンテナを表示 → さっきのコンテナだ! $ docker ps –a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e4876f3b4d22 ubuntu:latest "/bin/bash" 2 seconds ago Exited (0) 2 seconds ago wizardly_rhodes # そのコンテナを削除する $ docker rm e4876f3b4d22 # --rm オプションをつけてみる $ docker run –-rm ubuntu:latest /bin/bash # 応答が返ってこない # 停止中を含めたすべてのコンテナを表示 → 何も表示されない → 自動的に削除されている $ docker ps –a

Slide 71

Slide 71 text

ステップ 02 Web サーバーをホストしてみよう

Slide 72

Slide 72 text

ステップ 02 nginx ってヤツを起動するヨ

Slide 73

Slide 73 text

ステップ 02・Web サーバーをホストしてみよう # nginx イメージのコンテナを起動する $ docker run --rm -p 8080:80 nginx:latest /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/ /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh 10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf 10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf /docker-entrypoint.sh: Sourcing /docker-entrypoint.d/15-local-resolvers.envsh /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh /docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh /docker-entrypoint.sh: Configuration complete; ready for start up 2024/09/05 13:54:53 [notice] 1#1: using the "epoll" event method 2024/09/05 13:54:53 [notice] 1#1: nginx/1.27.1 2024/09/05 13:54:53 [notice] 1#1: built by gcc 12.2.0 (Debian 12.2.0-14) 2024/09/05 13:54:53 [notice] 1#1: OS: Linux 6.6.22-linuxkit 2024/09/05 13:54:53 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576 2024/09/05 13:54:53 [notice] 1#1: start worker processes 2024/09/05 13:54:53 [notice] 1#1: start worker process 29 2024/09/05 13:54:53 [notice] 1#1: start worker process 30 2024/09/05 13:54:53 [notice] 1#1: start worker process 31 2024/09/05 13:54:53 [notice] 1#1: start worker process 32 2024/09/05 13:54:53 [notice] 1#1: start worker process 33 2024/09/05 13:54:53 [notice] 1#1: start worker process 34

Slide 74

Slide 74 text

ステップ 02・Web サーバーをホストしてみよう localhost:8080 に接続できた

Slide 75

Slide 75 text

ステップ 02・Web サーバーをホストしてみよう でもどうして接続できた?

Slide 76

Slide 76 text

ステップ 02・Web サーバーをホストしてみよう ホストの8080番ポートとコンテナの80番ポートを繋いでいる ↑↑ココ↑↑ nginx Container 80 ホストマシン 8080

Slide 77

Slide 77 text

ステップ 02・Web サーバーをホストしてみよう このポートの概念はとても重要 →サービス公開するときにこの組み合わせでいろいろします ↑↑ココ↑↑

Slide 78

Slide 78 text

ステップ 03 Webサーバーをホストしてみよう・2

Slide 79

Slide 79 text

ステップ 03・ Webサーバーをホストしてみよう・2 このままではWebサーバーを運営するのは難しい!

Slide 80

Slide 80 text

ステップ 03・ Webサーバーをホストしてみよう・2 問題点 1. フォアグラウンドが占有されている! 2. 任意のデータでWeb サイトをホスティングできない 3. Webサーバーの設定を変更できない

Slide 81

Slide 81 text

ステップ 03・Web サーバーをホストしてみよう・2 # nginx イメージのコンテナをバックグラウンドで起動する $ docker run --rm -d nginx:latest dd3c125ce8273d4d3357755b0e31aa7b8caffc92e77278a6b7efc803c347aeb # 起動中のコンテナを表示する $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES dd3c125ce827 nginx:latest "/docker-entrypoint.…" 17 seconds ago Up 16 seconds 80/tcp happy_fermat # ブラウザから接続してみよう!! → あれっ、できないな # 接続できるようにしてみよう!! 「-d」オプションでバックグランド起動可能!

Slide 82

Slide 82 text

ステップ 03・Web サーバーをホストしてみよう・2 # 起動中のコンテナを表示する $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES dd3c125ce827 nginx:latest "/docker-entrypoint.…" 17 seconds ago Up 16 seconds 80/tcp happy_fermat # コンテナを停止する $ docker stop dd3c125ce827 dd3c125ce827 $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 止めるには「docker stop」コマンドを使う

Slide 83

Slide 83 text

「-v」オプションでデータをバインドする ↓ 「-v ホスト側のパス:コンテナ側のパス」 ステップ 03・Web サーバーをホストしてみよう・2

Slide 84

Slide 84 text

自分でデータをバインドしてみよう! →Webサーバーで表示される内容が変わる!! ステップ 03・Web サーバーをホストしてみよう・2

Slide 85

Slide 85 text

ステップ 03・Web サーバーをホストしてみよう・2

Slide 86

Slide 86 text

ステップ 03・Web サーバーをホストしてみよう・2 nginx のコンフィグを書いて、Basic認証をかけてみよう!

Slide 87

Slide 87 text

ステップ 03・Web サーバーをホストしてみよう・2 .htaccess を生成

Slide 88

Slide 88 text

ステップ 03・Web サーバーをホストしてみよう・2 nginx のコンフィグを書く

Slide 89

Slide 89 text

ステップ 03・Web サーバーをホストしてみよう・2

Slide 90

Slide 90 text

ステップ 04 Docker Compose を使ってみよう

Slide 91

Slide 91 text

ステップ 04・Docker Compose を使ってみよう 「docker コマンド何度も打つの面倒だなぁ…」 って思いませんか?

Slide 92

Slide 92 text

ステップ 04・Docker Compose を使ってみよう そこで Docker Compose だ!

Slide 93

Slide 93 text

ステップ 04・Docker Compose を使ってみよう Docker Composeで コンテナを一括管理できる!

Slide 94

Slide 94 text

ステップ 04・Docker Compose を使ってみよう 「docker compose up –d」 で起動する 「-d」はバックグラウンド起動のオプション compose 直後の「-f」でcomposeファイルの指定! # docker compose でコンテナを起動する $ docker compose –f ./04-compose/compose.yaml up -d [+] Running 2/2 Network 04-compose_default Created 0.0s Container 04-compose-web-1 Started 0.1s

Slide 95

Slide 95 text

ステップ 04・Docker Compose を使ってみよう 「docker compose –f ./04-compose/compose.yaml logs」 ログを確認してみよう # コンテナのログを確認してみる $ docker compose –f ./04-compose/compose.yaml logs web-1 | /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration web-1 | /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/ web-1 | /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh web-1 | 10-listen-on-ipv6-by-default.sh: info: /etc/nginx/conf.d/default.conf is not a file or does not exist web-1 | /docker-entrypoint.sh: Sourcing /docker-entrypoint.d/15-local-resolvers.envsh web-1 | /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh web-1 | /docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh web-1 | /docker-entrypoint.sh: Configuration complete; ready for start up web-1 | 2024/09/05 15:29:40 [notice] 1#1: using the "epoll" event method web-1 | 2024/09/05 15:29:40 [notice] 1#1: nginx/1.27.1 web-1 | 2024/09/05 15:29:40 [notice] 1#1: built by gcc 12.2.0 (Debian 12.2.0-14) web-1 | 2024/09/05 15:29:40 [notice] 1#1: OS: Linux 6.6.22-linuxkit web-1 | 2024/09/05 15:29:40 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576

Slide 96

Slide 96 text

ステップ 04・Docker Compose ファイルの解説 • web: サービスの名前 • web.image: サービスで使うイメージ名 • web.ports: 公開するポート • web.volumes: 使用するボリューム 他にも設定できる項目はありますが、 Compose使い方解説ではないので省略

Slide 97

Slide 97 text

ステップ 04・サービスを追加する ほぼ同じサービスを生やす →ポート番号だけ変えておく ・localhost:8080 ・localhost:8081 上記2つで接続できるようになった!

Slide 98

Slide 98 text

ステップ 05 Dockerfile を使ってみよう

Slide 99

Slide 99 text

ステップ 05・Dockerfile を使ってみよう 自作アプリケーションのサーバーをホストしたい!

Slide 100

Slide 100 text

ステップ 05・Dockerfile を使ってみよう 自作アプリケーションのサーバーをホストしたい! ↓ 独自イメージのコンテナを作る!!

Slide 101

Slide 101 text

ステップ 05・Dockerfile を使ってみよう ←Dockerfile FROM や RUN などの指令を与えて コンテナイメージを作るための設計図 ファイル名はそのまま「Dockerfile」 実は秘伝のタレになりがち。 今回のハンズオンでは作成しません。

Slide 102

Slide 102 text

ステップ 05・Dockerfile を使ってみよう とりあえず起動してみよう! # docker compose でコンテナを起動する $ docker compose -f ./05-dockerfile/compose.yaml up –d [+] Running 3/3 Network 05-dockerfile_default Created 0.0s Container mysql Started 0.1s Container backend Started 0.2s 2つのコンテナが起動した!

Slide 103

Slide 103 text

ステップ 05・Dockerfile を使ってみよう ./05-dockerfile/compose.yaml backendのサービスではimageがありません。 その代わり、buildでイメージとして使うDockerfileを 指定してビルドしてから使用するようにします。 MySQLのイメージは起動時に /docker-entrypoint-initdb.d/ 直下にあるSQLファイルを 実行するようになっています。イメージの詳細情報は MySQLのイメージドキュメントを参照してください。

Slide 104

Slide 104 text

ステップ 05・Dockerfile を使ってみよう volumesの指定がある! →実際に作られているか確認 # 作成されたvolumeを確認してみる $ docker volume ls local 05-dockerfile_mysql-data # ディレクトリ名_mysql-data という名前で作成されている!

Slide 105

Slide 105 text

ステップ 05・Dockerfile を使ってみよう Addr (アドレス)が 「database:3306」になってる ./05-dockerfile/backend/main.go 30行目付近

Slide 106

Slide 106 text

ステップ 05・Dockerfile を使ってみよう backend backend MySQL MySQL 通常 同一Docker Network上

Slide 107

Slide 107 text

ステップ 05・Dockerfile を使ってみよう (忘れていて)罠になる時もある

Slide 108

Slide 108 text

ステップ 06 ゲームサーバーを立ててみよう

Slide 109

Slide 109 text

ステップ 06・ゲームサーバーを立ててみよう ナウなヤングにバカウケのタイトル https://store.steampowered.com/app/346110/ https://store.steampowered.com/app/1623730/ https://store.steampowered.com/app/271590 https://www.minecraft.net

Slide 110

Slide 110 text

ステップ 06・ゲームサーバーを立ててみよう 共通点はなーんだ? https://store.steampowered.com/app/346110/ https://store.steampowered.com/app/1623730/ https://store.steampowered.com/app/271590 https://www.minecraft.net

Slide 111

Slide 111 text

ステップ 06・ゲームサーバーを立ててみよう 正解 「ゲームでマルチプレイサーバーが必要!!」 ※なくてもできますがあったほうが自由にできるという意

Slide 112

Slide 112 text

ステップ 06・ゲームサーバーを立ててみよう 「VPS を借りよう!!」 ↓ 月4000円はちょっとつらいナ… ↓ 自宅サーバーでやればいいじゃん

Slide 113

Slide 113 text

ステップ 06・ゲームサーバーを立ててみよう 今回はMinecraft サーバーを立てます

Slide 114

Slide 114 text

ステップ 06・ゲームサーバーを立ててみよう ./06-minecraft/compose.yaml を眺める 今回は itzg/minecraft-server イメージを使用。 様々なMinecraftサーバーエンジンに対応している のでとても便利。 同じ作者でバックアップ用のイメージもあるので かなり便利に運用できます。

Slide 115

Slide 115 text

ステップ 06・ゲームサーバーを立ててみよう 起動を確認する # コンテナを起動してみる $ docker compose –f ./06-minecraft/compose.yaml up –d [+] Running 2/2 Network 06-minecraft_default Created 0.0s Container minecraft Started 0.2s # 起動状態を確認する(下の表示はやや省略しています) $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9be44fd7f416 itzg/minecraft-serv "/start" 10 seconds ago Up 9 seconds (health: starting) 0.0.0.0:25565 minecraft # 起動中はHealthcheckによってstartingと表示される # 少し待ってから起動確認する $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9be44fd7f416 itzg/minecraft-serv “/start” 10 seconds ago Up 24 seconds (healthy) 0.0.0.0:25565 minecraft # 起動完了後は healthy になる

Slide 116

Slide 116 text

ステップ 06・ゲームサーバーを立ててみよう 起動を確認する

Slide 117

Slide 117 text

ステップ 06・ゲームサーバーを立ててみよう 起動を確認する

Slide 118

Slide 118 text

ステップ 07 サービスを監視してみよう

Slide 119

Slide 119 text

ステップ 07・サービスを監視してみよう サービスを公開しました!! ↓ そのあとは?

Slide 120

Slide 120 text

ステップ 07・サービスを監視してみよう 運用フェーズに入る ↓ 監視の必要性(異常検知など)

Slide 121

Slide 121 text

ステップ 07・サービスを監視してみよう 監視ソフトウェアを導入しよう!

Slide 122

Slide 122 text

ステップ 07・サービスを監視してみよう Grafana データ可視化ツール Prometheus データフェッチツール

Slide 123

Slide 123 text

起動する # コンテナを起動してみる $ docker compose –f ./07-metrics/compose.yaml up –d [+] Running 4/4 Network 07-metrics_default Created 0.0s Container monitoring-node-exporter Started 0.3s Container prometheus Started 0.4s Container grafana Started 0.5s # 起動状態を確認する(下の表示はやや省略しています) $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES cd66bfd85a4b grafana/grafana:latest "/run.sh" About a minute ago Up About a minute 0.0.0.0:3000->3000/tcp, :::3000- >3000/tcp grafana 7bb3d0c0ddda prom/prometheus "/bin/prometheus --c…" About a minute ago Up About a minute 0.0.0.0:9090- >9090/tcp, :::9090->9090/tcp prometheus b2ae10f05244 prom/node-exporter:latest "/bin/node_exporter …" About a minute ago Up About a minute 9100/tcp monitoring-node-exporter ステップ 07・サービスを監視してみよう

Slide 124

Slide 124 text

ステップ 07・サービスを監視してみよう localhost:3000 localhost:9090

Slide 125

Slide 125 text

ステップ 07・サービスを監視してみよう

Slide 126

Slide 126 text

ステップ 07・サービスを監視してみよう

Slide 127

Slide 127 text

ステップ 07・サービスを監視してみよう ユーザ名: admin PW: admin でログイン

Slide 128

Slide 128 text

ステップ 07・サービスを監視してみよう PrometheusのData sourceを追加

Slide 129

Slide 129 text

ステップ 07・サービスを監視してみよう DashboardをImportする

Slide 130

Slide 130 text

ステップ 07・サービスを監視してみよう かっこいいダッシュボードの完成!

Slide 131

Slide 131 text

ステップ 07・サービスを監視してみよう 今回はコンテナの状態を監視しましたが、 エラー率やトラフィックも監視できます

Slide 132

Slide 132 text

おわり ハンズオン終了 お疲れ様でした!

Slide 133

Slide 133 text

時間が余れば • 自分のアプリケーションをホストしてみる • ステップ2で立てたウェブサーバーをもっとカスタマイズ • 他のゲームサーバーを立ててみる • セルフホストできるOSSを探してみる • 自分でDockerfileを書いてみる • 自宅鯖用PCを購入してみる

Slide 134

Slide 134 text

余談 Awesome Self-hosted を見ると様々なソフトウェアがあって面白い https://awesome-selfhosted.net/

Slide 135

Slide 135 text

余談・自己流IaC GitHub Actions で自宅サーバーへ AnsibleなどでApplyする

Slide 136

Slide 136 text

余談・自己流IaC GitHub Actions で自宅サーバーへ AnsibleなどでApplyする

Slide 137

Slide 137 text

余談 GitHub Actions で自宅サーバーへ AnsibleなどでApplyする

Slide 138

Slide 138 text

Dockerで始める自宅サーバー入門 あまてく 松本紘輝 2024/09/07 KC3 2024 学生勉強会