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
550
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
59
TFLintカスタムプラグインで始める Terraformコード品質管理
bells17
2
1.6k
Amazon VPC CNIに学ぶCNI-LT版
bells17
3
320
コードを読んで理解するko build
bells17
1
650
Kubernetes History Inspector(KHI)を触ってみた
bells17
0
580
スリーシェイクにおけるOSSの取り組み
bells17
4
730
コミュニティ紹介: Kubernetes Meetup Novice
bells17
1
390
社内活動の取り組み紹介 ~ スリーシェイクでこんな取り組みしてます ~
bells17
1
840
Kubernetes Code Contribution入門
bells17
5
1.6k
Other Decks in Programming
See All in Programming
AI駆動開発を妨げる技術的負債の解消アプローチ / ai-refactoring-approach
minodriven
17
9.2k
はてなアカウント基盤 State of the Union
cockscomb
1
1.3k
Laravelで学ぶ Webアプリケーションチューニング入門/web_application_tuning_101
hanhan1978
4
1.2k
ビデオ通話が繋がる0.2秒で何が起きているのか
supurazako
2
150
Terraform標準の組織で AWS CDKをどう使うか
mu7889yoon
1
330
Welcome to the "Parametricity" 🏙️ − Generic だけど Specific な世界 −
guvalif
PRO
1
180
Claude Opus 4.6以後の受託開発エンジニアの変化(Claude Code開発ノウハウ大公開スペシャルbyクラスメソッド)
iidatakuma
1
820
壊れたパーサから始める関数型設計と構成的なパーサ #fp_matsuri
raiga0310
2
380
AI時代、エンジニアはどう育つのか -未経験エンジニアの成長を間近で見て考えたこと-
thasu0123
0
140
ローカルLLMでどこまでコードが書けるか -縮小版 / How much code can be written on a local LLM Shortened
kishida
2
200
才能?センス?知らん、 続けたもん勝ちだ。-- 結婚・出産・癌を越えてなお、私がプロダクトを創り続ける理由
16bitidol
2
890
PHP Application における Kubernetes 内 gRPC 通信
ganchiku
0
520
Featured
See All Featured
Documentation Writing (for coders)
carmenintech
77
5.4k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
550
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
400
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
470
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
10k
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
470
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.7k
Being A Developer After 40
akosma
91
590k
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.5k
Rails Girls Zürich Keynote
gr2m
96
14k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
420
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 /