Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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 /