Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
モダンインフラの基礎を学ぼう!実践コンテナ入門
Search
bells17
July 17, 2024
Programming
590
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祭り #2 OP/ED
bells17
0
77
Kubernetes祭り #1 OP/ED
bells17
0
85
TFLintカスタムプラグインで始める Terraformコード品質管理
bells17
2
1.9k
Amazon VPC CNIに学ぶCNI-LT版
bells17
3
350
コードを読んで理解するko build
bells17
1
710
Kubernetes History Inspector(KHI)を触ってみた
bells17
0
610
スリーシェイクにおけるOSSの取り組み
bells17
4
800
コミュニティ紹介: Kubernetes Meetup Novice
bells17
1
410
社内活動の取り組み紹介 ~ スリーシェイクでこんな取り組みしてます ~
bells17
1
910
Other Decks in Programming
See All in Programming
Starting & Sustaining Code-Based E2E Testing for Non-Coding QA Teams( #jasstniigata )
teyamagu
PRO
1
390
仕様駆動開発による爆速プロダクト開発 / Bakusoku Spec Driven Development
kobakei
0
120
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
170
AI Agent時代のリアーキテクチャ戦略と実践
hokaccha
9
4.7k
thread_parallel_with_free-threaded_Python_and_NumPy.pdf
riku_sakamoto
0
340
UnityでSystem.Net.WebSocketsなWebSocketサーバが動かないのでUnity Monoのコードを覗いてみた / about implementing websocket server with unity mono
drumath2237
1
140
WebRTC映像をAirPlayに対応させる挑戦.pdf
monolithic_adam
0
290
Intent as Code
shoppingjaws
6
1k
GraphRAGのKnowledge Graphを 直接!見る/View-GraphRAG's-KnowledgeGraph-directly!
tyumugi1113
1
340
XP祭りでしか伝わらないフリップネタ #xpjug
murabayashi
0
150
大喜利で理解するLLM as a Judge / Understanding LLM-as-a-Judge through Ogiri
rockname
0
140
LL言語やWebフレームワークのPostgreSQL対応 〜DBの機能がユーザーに届くまで〜
kentaroutakeda
1
150
Featured
See All Featured
AI: The stuff that nobody shows you
jnunemaker
PRO
10
1k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
810
30 Presentation Tips
portentint
PRO
1
400
Why You Should Never Use an ORM
jnunemaker
PRO
61
10k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
470
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
500
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
670
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
520
sira's awesome portfolio website redesign presentation
elsirapls
0
420
Ruling the World: When Life Gets Gamed
codingconduct
0
340
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
420
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.6k
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 /