Slide 1

Slide 1 text

モダンインフラの基礎を学ぼう! 実践コンテナ 入門 技育アカデミア (2024/7/17) 株式会社スリーシェイク@bells 1 7

Slide 2

Slide 2 text

▶ Daiki Hayakawa(@bells 1 7 ) ▶ Software Engineer@ 3 -shake inc. ▶ kubernetes & kubernetes-csi member ▶ Kubernetes SIG-Docs ja localization reviewer ▶ Kubernetes Internal Organizer ▶ Kubernetes Novice Tokyo Organizer ▶ #kubenews ▶ X(Twitter): @bells 1 7 _ ▶ GitHub: @bells 1 7

Slide 3

Slide 3 text

スリーシェイクについて

Slide 4

Slide 4 text

Sreake SREの 支 援概要 SREの考え 方 に従って、AWSやGoogle Cloudを利 用 しているサービスの 技術戦略、設計、構築、運 用 までワンストップで対応 伴 走 型の 支 援で最終的にクライアントの内製化 ・ 自 走 がゴール

Slide 5

Slide 5 text

過去の執筆記事/登壇資料

Slide 6

Slide 6 text

今 日 の内容

Slide 7

Slide 7 text

本 日 のおしながき ▶ Dockerを使ってみる ▶ コンテナとは? ▶ コンテナレジストリにイメージをpushしてみる ▶ コンテナ/Docker 入門 まとめ ▶ コンテナランタイムについて学ぼう ▶ Docker Composeを使ってアプリケーション環境を構築してみよう ▶ コンテナ/Docker 入門 まとめ ▶ Dev Containerで開発環境をコンテナで構築してみよう ▶ 本番環境でコンテナを使うには? ▶ Kubernetesを触ってみよう 今 日 のセッションで試す内容は下記のリポジトリで公開しています https://github.com/bells 1 7 /go-web-sample コンテナとそれを取り巻く周辺情報の基本を
 サクッと紹介する内容になります

Slide 8

Slide 8 text

はじめに皆さんの経験について教えてください ▶ 何かしらのプログラムを書いた経験のある 方 ▶ Linuxを使ってWebサーバーを構築したことのある 方 ▶ Webアプリケーションを 一 通り開発したことのある 方 ▶ コンテナを使って開発環境を構築したことのある 方

Slide 9

Slide 9 text

Dockerを使ってみる

Slide 10

Slide 10 text

No content

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

Dockerを使うと ▶ コンテナと呼ばれるパッケージ化されたアプリケーションの実 行 や コンテナの作成が可能になります ▶ 例えば + Nginxのコンテナを起動してWebサーバーを構築 + Goで構築したWebアプリケーションを組み込んだコンテナを作成 + NginxのコンテナをForward Proxyにして 自 作のWebアプリケーションコンテナと連携

Slide 14

Slide 14 text

No content

Slide 15

Slide 15 text

コンテナとは?

Slide 16

Slide 16 text

コンテナ ▶ アプリケーションの実 行 に必要な環境を1つのパッケージにまとめたもの (=コンテナイメージ) + ソースコードやバイナリ + ランタイム + システムライブラリ + etc … ▶ Linuxカーネルの機能であるnamespace, cgroup, pivot_rootなどを利 用 することで コンテナという仕組みを実現

Slide 17

Slide 17 text

先ほどビルドしたGoアプリ

Slide 18

Slide 18 text

ソースコードをベースとなる コンテナイメージに渡して アプリケーションをビルド 実 行用 のベースイメージに先ほど ビルドしたバイナリを配置 → コンテナ起動時にバイナリを実 行 するよう設定 Docker fi le

Slide 19

Slide 19 text

ビルドしたコンテナを実 行

Slide 20

Slide 20 text

コンテナレジストリに イメージをpushしてみる

Slide 21

Slide 21 text

コンテナレジストリを使うと 作成したイメージをリモートの保存しておくことができます ▶ 今回はコンテナレジストリの代表例であるDocker Hubを利 用 します ▶ https://hub.docker.com/ ▶ ビルドしたイメージ名と同じgo-web-sampleというリポジトリを作成しておきます

Slide 22

Slide 22 text

No content

Slide 23

Slide 23 text

作成イメージにタグを付けてpushする

Slide 24

Slide 24 text

No content

Slide 25

Slide 25 text

pushしたイメージをpull(ダウンロード)して 実 行 することもできます

Slide 26

Slide 26 text

コンテナ/Docker 入 門 まとめ

Slide 27

Slide 27 text

コンテナまとめ ▶ コンテナとは、アプリケーションの実 行 に必要な環境を1つのパッケージにまとめたもの ▶ コンテナは既存のコンテナイメージを実 行 する以外にも、Docker fi leを 使 用 して独 自 のイメージを作成したり、作成したイメージをpushして コンテナレジストリに保存したりできます ▶ コンテナレジストリにあるイメージをpullしてローカルで実 行 することもできます ▶ 独 自 のイメージを作るためには(基本的には)Docker fi leを書いてビルドする必要があります

Slide 28

Slide 28 text

コンテナと仮想マシンとの 比 較 コンテナはホストOSの1プロセスとして実 行 されます

Slide 29

Slide 29 text

コンテナ 仮想マシン メモリ消費 少ない 多い 起動時間 数秒 数 十 秒~数分 起動できるOSについて 例えばLinuxサーバー上で Windows Serverを 立 ち上げることはできない ハードウェアを仮想的に エミュレートしているので 起動するOSの制約が少ない コンテナと仮想マシンとの 比 較

Slide 30

Slide 30 text

コンテナランタイムについて学ぼう

Slide 31

Slide 31 text

%PDLFS DPOUBJOFSE SVOD $POUBJOFS1SPDFTT ざっくりとしたDockerの中 身 高 レベル コンテナランタイム 低レベル コンテナランタイム なんかいい感じに コンテナ作る 「こんないい感じで コンテナ作っといて」 「なんかいい感じに コンテナ作っといて」

Slide 32

Slide 32 text

https://opencontainers.org/

Slide 33

Slide 33 text

OCI Specまとめ ▶ Runtime Spec: 低レベルコンテナランタイムに関する仕様 ▶ Image Spec: コンテナイメージのフォーマットに関する仕様 ▶ Distribution Speci fi cation: コンテナレジストリに関する仕様 高 レベルコンテナランタイムに関する仕様は特に定められていない

Slide 34

Slide 34 text

%PDLFS DPOUBJOFSE SVOD $POUBJOFS1SPDFTT もしかしてDockerさん必要無い..? 高 レベル コンテナランタイム 低レベル コンテナランタイム

Slide 35

Slide 35 text

https://github.com/containerd/nerdctl containerdをdocker cliのように操作できるツール

Slide 36

Slide 36 text

その他にも ▶ youki: Rust製コンテナランタイム ▶ CRI-O: Red Hatが開発したKubernetes 用 の軽量コンテナランタイム ▶ Podman: Red Hatが開発したデーモンレスなコンテナランタイム といった 高 レベルコンテナランタイムがある ちなみに3-shakeは youki開発者のうたもくさんに 技術顧問になっていただいています

Slide 37

Slide 37 text

低レベルコンテナランタイム ▶ runc: containerdでデフォルトで利 用 されている標準的なコンテナランタイム ▶ gVisor: Googleが開発したセキュアなコンテナランタイム ▶ Nabla Containers: unikernelを使ったホストとコンテナの分離を 行 うコンテナランタイム ▶ Kata Containers: VMを使ってホストとコンテナの分離を 行 うコンテナランタイム 低レベルコンテナランタイムはruncを標準としてセキュアにする 方 向で いろんなコンテナランタイムが 生 まれている印象

Slide 38

Slide 38 text

ついでにコンテナレジストリも ▶ SaaS: ▶ GitHub Packages ▶ GitLab Container Registry ▶ AWS ECR ▶ Google Cloud Artifact Registry ▶ Azure Container Registry ▶ OSS: ▶ Quay: CoreOS(Red Hat)が開発したOSSコンテナレジストリ ▶ Harbor: VMwareが開発したOSSコンテナレジストリ ▶ Distribution Registry: CNCF SandboxプロジェクトのOSSコンテナレジストリ

Slide 39

Slide 39 text

Docker Composeを使って アプリケーション環境を構築してみよう

Slide 40

Slide 40 text

3FWFSTF1SPYZ (P8FC4BNQMF 例えば先程のアプリをこんな構成にしたいとします

Slide 41

Slide 41 text

下記のようなdocker-compose.ymlファイルを作成

Slide 42

Slide 42 text

docker compose upコマンドを実 行

Slide 43

Slide 43 text

プロキシサーバー経由でレスポンスが返ってくるのが確認できる

Slide 44

Slide 44 text

こんな感じでDocker Composeを使うと ▶ 複数コンテナをまとめて起動したり、コンテナ間で通信を 行 ったりすることが可能に ▶ 今回のようなProxy - Webの構成だけじゃなくて、Proxy - Web - DBのような構成に したりと様々な構成を作ることが可能なので、開発環境の構築に最適

Slide 45

Slide 45 text

Dev Containerで開発環境をコンテナで構築してみよう

Slide 46

Slide 46 text

Dev Containerとは? ▶ Dev Containerを使うと開発環境をまるっとコンテナで構築可能 ▶ 元々はVisual Studio Code(VSCode)のRemote Developmentの1機能 ▶ 今は( 一 応)オープンな仕様になっているので、Dev Containerの仕様を満 たした機能を実装したエディタであればVSCode以外でも利 用 できる ▶ Dev Containerに対応したエディタとdevcontainer.jsonという 設定ファイルがあれば利 用 可能

Slide 47

Slide 47 text

ほぼ最 小 限のdevcontainer.jsonはこれだけ ただし、これだとreverse-proxyは 手 動で起動する必要がある

Slide 48

Slide 48 text

これでreverse-proxyを 自 動起動できる

Slide 49

Slide 49 text

Dev Containerを使うと ▶ ローカル開発環境が統 一 されるので、環境差分によるバグなども少なくなる ▶ 個々 人 がそのアプリケーション向けの開発環境の構築を 行 う必要がなくなるので便利 ▶ 特に同じ 言 語の別のバージョンを使 用 したアプリケーション開発も同時並 行 で 行 っている ようなケースだと、asdfなどを 用 いたバージョン切り替えを 行 わなくても良くなる

Slide 50

Slide 50 text

他にもいろんな機能があって便利なのでより詳しくはこちらを参照

Slide 51

Slide 51 text

本番環境でコンテナを使うには?

Slide 52

Slide 52 text

本番環境でコンテナを使うのに必要な機能 ▶ 複数サーバーを跨いでコンテナの起動状況を管理してくれる ▶ 起動したコンテナへのルーティングや負荷分散 ▶ 予め設定した設定情報などをコンテナに 自 動で渡してくれる ▶ 起動しているコンテナのアップデート機能 (新しいバージョンのコンテナと差し替えてくれる) ▶ etc …

Slide 53

Slide 53 text

主なコンテナオーケストレーター ▶ Kubernetes ▶ AWS ECS ▶ Cloud Run(Google Cloud) ▶ App Engine(Google Cloud) ▶ Heroku ▶ etc …

Slide 54

Slide 54 text

最後に少し Kubernetesを触ってみよう

Slide 55

Slide 55 text

Kubernetes とは? ▶ Kubernetesはコンテナオーケストレーターの1つ ▶ etcd/control plane/worker nodeによって構成されたクラスターを構築し、 様々なコンテナをKubernetes上のnodeで動作させたり、動作させてるコン テナとネットワークをいい感じに連携できるようにすることができる ▶ デプロイするコンテナなどをmanifestファイルで宣 言 的に記述することで、 宣 言 した状態になるようにKubernetesがいい感じに調整処理を 行 ってくれる ▶ Googleが内部で運 用 していたコンテナ基盤であるBorgをOSS向けに作り直 したコンテナオーケストレーター ▶ また、KubernetesはCloud Native Computing Foundation(CNCF)に寄贈 されており、CNCFのGraduatedプロジェクトとしてコミュニティベースで 管理されている

Slide 56

Slide 56 text

manifestをKubernetesに適 用 することで 宣 言 されたmanifestの通りにコンテナが作成される

Slide 57

Slide 57 text

まとめ

Slide 58

Slide 58 text

まとめ ▶ コンテナを使 用 すると、ホストと隔離された環境を簡単に構築できるので開発にも 本番環境での利 用 にも便利 ▶ Docker Composeを利 用 すれば、複数コンテナの起動管理も簡単便利 ▶ Dev Containerを使うと開発環境もまるっとコンテナ化できるよ ▶ コンテナの本番利 用 はKubernetesをはじめとするコンテナオーケストレーションツールを 使 用 するのが良いよ

Slide 59

Slide 59 text

コンテナ/Kubernetesについてもっと学んでみたい 方 スリーシェイクの冬季インターンシップへの参加も 検討してみてください! URLはこちらのQRコードから! 最後に https://forms.gle/ 7 pPiQhCuSgnvpceaA

Slide 60

Slide 60 text

画像引 用 元 ▶ https://github.com/kubernetes/community/tree/master/icons ▶ https://github.com/kubernetes/kubernetes/tree/master/logo ▶ https://github.com/cncf/artwork/tree/master/projects/kubernetes ▶ https://github.com/kubernetes/kubeadm/tree/main/logos

Slide 61

Slide 61 text

Thanks / Question? ▶ @bells 1 7 ▶ Slide: https://speakerdeck.com/bells 1 7 ▶ @bells 1 7 _ ▶ 勉強会URL: https://talent.supporterz.jp/events/ 8 cb 9 a 3 0 0 - 5 0 6 c- 4 d 9 d-b 2 af-e 9 9 2 4 e 0 2 0 9 a 2 /