Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
モダンインフラの基礎を学ぼう!実践コンテナ入門
Search
bells17
July 17, 2024
Programming
540
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
モダンインフラの基礎を学ぼう!実践コンテナ入門
技育CAMPアカデミアでの発表資料です
https://talent.supporterz.jp/events/8cb9a300-506c-4d9d-b2af-e9924e0209a2/
bells17
July 17, 2024
More Decks by bells17
See All by bells17
Kubernetes祭り #1 OP/ED
bells17
0
48
TFLintカスタムプラグインで始める Terraformコード品質管理
bells17
2
1.5k
Amazon VPC CNIに学ぶCNI-LT版
bells17
3
310
コードを読んで理解するko build
bells17
1
630
Kubernetes History Inspector(KHI)を触ってみた
bells17
0
570
スリーシェイクにおけるOSSの取り組み
bells17
4
710
コミュニティ紹介: Kubernetes Meetup Novice
bells17
1
380
社内活動の取り組み紹介 ~ スリーシェイクでこんな取り組みしてます ~
bells17
1
820
Kubernetes Code Contribution入門
bells17
5
1.5k
Other Decks in Programming
See All in Programming
AIで効率化できた業務・日常
ochtum
0
150
ローカルLLMを使ってB2Bサービスを作っていての学び
yaotti
0
220
過去最大のMCPアップデート! 2026-07-28 RC版の謎に迫る
licux
6
410
TypeScript+Orvalで実現する型安全かつ堅牢でスケーラブルなマルチチャネル通知基盤 / TSKaigi Night talks ~after conference~
d0riven
0
360
ふつうのFeature Flag実践入門
irof
8
4.2k
Contextとはなにか
chiroruxx
1
380
Spec Driven Development | AI Summit Lisbon
danielsogl
PRO
0
210
決定論的オーケストレーションの設計と実装 / Design and Implementation of Deterministic Orchestration
nrslib
4
1.5k
Inside Stream API
skrb
1
800
メソッドのジェネリクスでGoの夢は広がるか? / Kyoto.go #65
utgwkk
3
980
エンジニア向け会社紹介/Findy Company Profile
findyinc
6
350k
AI時代のUIはどこへ行く?その2!
yusukebe
22
7.5k
Featured
See All Featured
How to train your dragon (web standard)
notwaldorf
97
6.7k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
180
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.9k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.2k
The agentic SEO stack - context over prompts
schlessera
0
830
Speed Design
sergeychernyshev
33
1.9k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.2k
Statistics for Hackers
jakevdp
799
230k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
290
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
Transcript
モダンインフラの基礎を学ぼう! 実践コンテナ 入門 技育アカデミア (2024/7/17) 株式会社スリーシェイク@bells 1 7
▶ 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
スリーシェイクについて
Sreake SREの 支 援概要 SREの考え 方 に従って、AWSやGoogle Cloudを利 用 しているサービスの
技術戦略、設計、構築、運 用 までワンストップで対応 伴 走 型の 支 援で最終的にクライアントの内製化 ・ 自 走 がゴール
過去の執筆記事/登壇資料
今 日 の内容
本 日 のおしながき ▶ Dockerを使ってみる ▶ コンテナとは? ▶ コンテナレジストリにイメージをpushしてみる ▶
コンテナ/Docker 入門 まとめ ▶ コンテナランタイムについて学ぼう ▶ Docker Composeを使ってアプリケーション環境を構築してみよう ▶ コンテナ/Docker 入門 まとめ ▶ Dev Containerで開発環境をコンテナで構築してみよう ▶ 本番環境でコンテナを使うには? ▶ Kubernetesを触ってみよう 今 日 のセッションで試す内容は下記のリポジトリで公開しています https://github.com/bells 1 7 /go-web-sample コンテナとそれを取り巻く周辺情報の基本を サクッと紹介する内容になります
はじめに皆さんの経験について教えてください ▶ 何かしらのプログラムを書いた経験のある 方 ▶ Linuxを使ってWebサーバーを構築したことのある 方 ▶ Webアプリケーションを 一
通り開発したことのある 方 ▶ コンテナを使って開発環境を構築したことのある 方
Dockerを使ってみる
None
None
None
Dockerを使うと ▶ コンテナと呼ばれるパッケージ化されたアプリケーションの実 行 や コンテナの作成が可能になります ▶ 例えば + Nginxのコンテナを起動してWebサーバーを構築
+ Goで構築したWebアプリケーションを組み込んだコンテナを作成 + NginxのコンテナをForward Proxyにして 自 作のWebアプリケーションコンテナと連携
None
コンテナとは?
コンテナ ▶ アプリケーションの実 行 に必要な環境を1つのパッケージにまとめたもの (=コンテナイメージ) + ソースコードやバイナリ + ランタイム
+ システムライブラリ + etc … ▶ Linuxカーネルの機能であるnamespace, cgroup, pivot_rootなどを利 用 することで コンテナという仕組みを実現
先ほどビルドしたGoアプリ
ソースコードをベースとなる コンテナイメージに渡して アプリケーションをビルド 実 行用 のベースイメージに先ほど ビルドしたバイナリを配置 → コンテナ起動時にバイナリを実 行
するよう設定 Docker fi le
ビルドしたコンテナを実 行
コンテナレジストリに イメージをpushしてみる
コンテナレジストリを使うと 作成したイメージをリモートの保存しておくことができます ▶ 今回はコンテナレジストリの代表例であるDocker Hubを利 用 します ▶ https://hub.docker.com/ ▶
ビルドしたイメージ名と同じgo-web-sampleというリポジトリを作成しておきます
None
作成イメージにタグを付けてpushする
None
pushしたイメージをpull(ダウンロード)して 実 行 することもできます
コンテナ/Docker 入 門 まとめ
コンテナまとめ ▶ コンテナとは、アプリケーションの実 行 に必要な環境を1つのパッケージにまとめたもの ▶ コンテナは既存のコンテナイメージを実 行 する以外にも、Docker fi
leを 使 用 して独 自 のイメージを作成したり、作成したイメージをpushして コンテナレジストリに保存したりできます ▶ コンテナレジストリにあるイメージをpullしてローカルで実 行 することもできます ▶ 独 自 のイメージを作るためには(基本的には)Docker fi leを書いてビルドする必要があります
コンテナと仮想マシンとの 比 較 コンテナはホストOSの1プロセスとして実 行 されます
コンテナ 仮想マシン メモリ消費 少ない 多い 起動時間 数秒 数 十 秒~数分
起動できるOSについて 例えばLinuxサーバー上で Windows Serverを 立 ち上げることはできない ハードウェアを仮想的に エミュレートしているので 起動するOSの制約が少ない コンテナと仮想マシンとの 比 較
コンテナランタイムについて学ぼう
%PDLFS DPOUBJOFSE SVOD $POUBJOFS1SPDFTT ざっくりとしたDockerの中 身 高 レベル コンテナランタイム 低レベル
コンテナランタイム なんかいい感じに コンテナ作る 「こんないい感じで コンテナ作っといて」 「なんかいい感じに コンテナ作っといて」
https://opencontainers.org/
OCI Specまとめ ▶ Runtime Spec: 低レベルコンテナランタイムに関する仕様 ▶ Image Spec: コンテナイメージのフォーマットに関する仕様
▶ Distribution Speci fi cation: コンテナレジストリに関する仕様 高 レベルコンテナランタイムに関する仕様は特に定められていない
%PDLFS DPOUBJOFSE SVOD $POUBJOFS1SPDFTT もしかしてDockerさん必要無い..? 高 レベル コンテナランタイム 低レベル コンテナランタイム
https://github.com/containerd/nerdctl containerdをdocker cliのように操作できるツール
その他にも ▶ youki: Rust製コンテナランタイム ▶ CRI-O: Red Hatが開発したKubernetes 用 の軽量コンテナランタイム
▶ Podman: Red Hatが開発したデーモンレスなコンテナランタイム といった 高 レベルコンテナランタイムがある ちなみに3-shakeは youki開発者のうたもくさんに 技術顧問になっていただいています
低レベルコンテナランタイム ▶ runc: containerdでデフォルトで利 用 されている標準的なコンテナランタイム ▶ gVisor: Googleが開発したセキュアなコンテナランタイム ▶
Nabla Containers: unikernelを使ったホストとコンテナの分離を 行 うコンテナランタイム ▶ Kata Containers: VMを使ってホストとコンテナの分離を 行 うコンテナランタイム 低レベルコンテナランタイムはruncを標準としてセキュアにする 方 向で いろんなコンテナランタイムが 生 まれている印象
ついでにコンテナレジストリも ▶ 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コンテナレジストリ
Docker Composeを使って アプリケーション環境を構築してみよう
3FWFSTF1SPYZ (P8FC4BNQMF 例えば先程のアプリをこんな構成にしたいとします
下記のようなdocker-compose.ymlファイルを作成
docker compose upコマンドを実 行
プロキシサーバー経由でレスポンスが返ってくるのが確認できる
こんな感じでDocker Composeを使うと ▶ 複数コンテナをまとめて起動したり、コンテナ間で通信を 行 ったりすることが可能に ▶ 今回のようなProxy - Webの構成だけじゃなくて、Proxy
- Web - DBのような構成に したりと様々な構成を作ることが可能なので、開発環境の構築に最適
Dev Containerで開発環境をコンテナで構築してみよう
Dev Containerとは? ▶ Dev Containerを使うと開発環境をまるっとコンテナで構築可能 ▶ 元々はVisual Studio Code(VSCode)のRemote Developmentの1機能
▶ 今は( 一 応)オープンな仕様になっているので、Dev Containerの仕様を満 たした機能を実装したエディタであればVSCode以外でも利 用 できる ▶ Dev Containerに対応したエディタとdevcontainer.jsonという 設定ファイルがあれば利 用 可能
ほぼ最 小 限のdevcontainer.jsonはこれだけ ただし、これだとreverse-proxyは 手 動で起動する必要がある
これでreverse-proxyを 自 動起動できる
Dev Containerを使うと ▶ ローカル開発環境が統 一 されるので、環境差分によるバグなども少なくなる ▶ 個々 人 がそのアプリケーション向けの開発環境の構築を
行 う必要がなくなるので便利 ▶ 特に同じ 言 語の別のバージョンを使 用 したアプリケーション開発も同時並 行 で 行 っている ようなケースだと、asdfなどを 用 いたバージョン切り替えを 行 わなくても良くなる
他にもいろんな機能があって便利なのでより詳しくはこちらを参照
本番環境でコンテナを使うには?
本番環境でコンテナを使うのに必要な機能 ▶ 複数サーバーを跨いでコンテナの起動状況を管理してくれる ▶ 起動したコンテナへのルーティングや負荷分散 ▶ 予め設定した設定情報などをコンテナに 自 動で渡してくれる ▶
起動しているコンテナのアップデート機能 (新しいバージョンのコンテナと差し替えてくれる) ▶ etc …
主なコンテナオーケストレーター ▶ Kubernetes ▶ AWS ECS ▶ Cloud Run(Google Cloud)
▶ App Engine(Google Cloud) ▶ Heroku ▶ etc …
最後に少し Kubernetesを触ってみよう
Kubernetes とは? ▶ Kubernetesはコンテナオーケストレーターの1つ ▶ etcd/control plane/worker nodeによって構成されたクラスターを構築し、 様々なコンテナをKubernetes上のnodeで動作させたり、動作させてるコン テナとネットワークをいい感じに連携できるようにすることができる
▶ デプロイするコンテナなどをmanifestファイルで宣 言 的に記述することで、 宣 言 した状態になるようにKubernetesがいい感じに調整処理を 行 ってくれる ▶ Googleが内部で運 用 していたコンテナ基盤であるBorgをOSS向けに作り直 したコンテナオーケストレーター ▶ また、KubernetesはCloud Native Computing Foundation(CNCF)に寄贈 されており、CNCFのGraduatedプロジェクトとしてコミュニティベースで 管理されている
manifestをKubernetesに適 用 することで 宣 言 されたmanifestの通りにコンテナが作成される
まとめ
まとめ ▶ コンテナを使 用 すると、ホストと隔離された環境を簡単に構築できるので開発にも 本番環境での利 用 にも便利 ▶ Docker
Composeを利 用 すれば、複数コンテナの起動管理も簡単便利 ▶ Dev Containerを使うと開発環境もまるっとコンテナ化できるよ ▶ コンテナの本番利 用 はKubernetesをはじめとするコンテナオーケストレーションツールを 使 用 するのが良いよ
コンテナ/Kubernetesについてもっと学んでみたい 方 スリーシェイクの冬季インターンシップへの参加も 検討してみてください! URLはこちらのQRコードから! 最後に https://forms.gle/ 7 pPiQhCuSgnvpceaA
画像引 用 元 ▶ 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
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 /