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
技術書LT #11 実践 Docker - ソフトウェアエンジニアの「Docker よくわか...
Search
yamamoto-yuta
July 05, 2023
Technology
1.9k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
技術書LT #11 実践 Docker - ソフトウェアエンジニアの「Docker よくわからない」を終わりにする本
yamamoto-yuta
July 05, 2023
More Decks by yamamoto-yuta
See All by yamamoto-yuta
プロダクトデザイナーに学ぶ、『見る気が起きる』ダッシュボードの作り方 / Creating Engaging Dashboards: Lessons from Product Designers
yamamotoyuta
3
1.2k
「必要とされるデータ基盤」であり続けるためにやってきたこと / What We've Done to Make a Needed Data Analytics Platforms Grow
yamamotoyuta
0
660
他チームへ越境したら、生データ提供ソリューションのクエリ費用95%削減へ繋がった話 / Cross-Team Impact: 95% Off Raw Data Query Costs
yamamotoyuta
0
940
プロダクト観点で考えるデータ基盤の育成戦略 / Growth Strategy of Data Analytics Platforms from a Product Perspective
yamamotoyuta
1
2.5k
ヤプリのデータカタログ整備 1年間の歩み / Progress of Building a Data Catalog at Yappli
yamamotoyuta
4
4.5k
私のdbt布教用資料 〜TROCCOUG Ver.〜 / My Guide to Evangelizing dbt - TROCCOUG Ver.
yamamotoyuta
1
3.6k
データカタログの最初の一歩 〜データ組織向けに dbt docs を整備している話〜 / Maintaining dbt docs for data organizations
yamamotoyuta
2
4k
次の10年を戦える分析用データ基盤構築の第一歩 - dbtによる基盤刷新とクエリ費用90%削減への取り組み -
yamamotoyuta
1
2.2k
Other Decks in Technology
See All in Technology
Flutter Widget Previewerで始めるUIプレビューとVRTの自動化
sakusaku3939
0
160
なぜAI時代に技術記事を書くのか?どう書くのか? 〜bunの場合〜
kworkdev
PRO
0
160
AIコーディングエージェント開発_全体像
happysamurai294
0
110
AI時代、つくる力を自分たちの手に。 ──電通×KAG、アジャイルとAI駆動開発で挑む開発の変革
yuukiyo
3
410
Vibe-to-Spec開発_実践ガイド
happysamurai294
0
110
AWS DevOps Agentはどこまで任せられるか 〜機能の現在地と、機能拡張の実践〜
nyankotaro
0
270
ひとりで始めた AI駆動開発、チームに広げて何が変わったのか
kenichiodo
0
140
日本AIベンチャーレポート2026
kentarofujii
0
250
You Have Agency(サンキュー、Ruby)
snoozer05
PRO
4
490
データマネジメント × 法務で作りあげる、 freeeの新しいデータガバナンスへの軌跡
freee
PRO
2
530
Maestro MCPとClaude Code Skillsによる自律的なE2Eテスト支援
asmz
0
310
素人でもできた!AIを使った短編小説創作入門
delhi09
PRO
0
160
Featured
See All Featured
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
560
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
Building a Scalable Design System with Sketch
lauravandoore
464
34k
How to Ace a Technical Interview
jacobian
280
24k
Into the Great Unknown - MozCon
thekraken
41
2.8k
A Tale of Four Properties
chriscoyier
163
24k
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.6k
Designing Experiences People Love
moore
143
24k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
740
Paper Plane
katiecoart
PRO
5
54k
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
330
The Limits of Empathy - UXLibs8
cassininazir
2
740
Transcript
技術書LT #11 実践 Docker ソフトウェアエンジニアの「Docker よくわからない」を終わりにする本 2022-11-22 山本雄太
Webで無料で読めます https://zenn.dev/suzuki_hoge/books/2022-03-docker-practice-8ae36c33424b59
• 「Docker よくわからない」を終わりにする本 • 感想: 今まで何となくの理解でやってた部分がちゃんと説明されていてスッキリした ◦ Docker って仮想 OS
的…ではない? ◦ docker run と docker exec て何が違うの? ◦ docker exec -it <container> bash の bash の部分って何? ◦ etc… どんな本?
どんな内容? 概念理解 基礎 実践
• Docker触ったことない人 ◦ この本の内容一通りやれば、理解も実際に手を動かす部分もバッチリになれる • とりあえず動かしながらDockerを始めた人 ◦ (山本はこのパターン) ◦ 本の前1/4の内容は、手を動かしながら始めるとすっ飛ばしがちな内容が多い(と感じた)
どんな人に(特に)オススメ?
「本の前1/4」て具体的にどの辺? 概念理解 基礎 実践
1. Docker Desktop って何? 2. Docker コンテナは仮想 OS っぽいけど仮想 OS
ではない 3. コンテナ起動時に実行する命令の指定方法 4. volume マウント、 bind マウント、 Dockerfile の COPY 命令の違い 5. Docker Hub のレイヤー情報の見方 ここからは山本が個人的に勉強になった点を抜粋して紹介します
1. Docker Desktop って何?
• Windows や Mac で Docker を使うためのデスクトップアプリ • Docker を動かすための一式が入っている
◦ Linux カーネル, Docker Engine, Docker Compose, Kubenetes, etc… → だから Linux 以外の OS でも Docker が使えるようになる 1. Docker Desktop って何? 図の引用: 1部: Docker とは|実践 Docker - ソフトウェアエンジニアの「Docker よくわからない」を終わ りにする本 図の引用: 1部: 仮想化とは|実践 Docker - ソフトウェアエンジニアの「Docker よくわからない」を終わ りにする本
2. Docker コンテナは 仮想 OS っぽいけど仮想 OS ではない
• 実体は Linux の Namespace (名前空間)という機構で分離された1プロセス • 名前空間とは… ◦ Linux
カーネル内のグローバルなリソースを管理する機構 ◦ プロセスIDやファイルシステムのマウントポイント等を管理 ◦ これにより、ホスト-ゲスト間、ゲスト間の環境分離が可能に • 「Linux の Namespace 自体はもう 20 年近く存在する技術であり、それをコンテナ やイメージというものを用いて扱いやすくした技術が Docker」らしい 2. Docker コンテナは仮想 OS っぽいけど仮想 OS ではない この PID 2 を kill しても... この PID 2 には 影響なし 元の図: Linuxカーネル4.1の名前空間(ドラフト)
• なので、実際にはホストマシン上の Linux カーネルを利用している ◦ Intel Mac だと動くのに M1 Mac
だと動かない事象が発生するのはこれが原因 2. Docker コンテナは仮想 OS っぽいけど仮想 OS ではない カーネルが違う 元の図: 1部: 仮想化とは|実践 Docker - ソフトウェアエンジニアの「Docker よくわからない」を終わりにする本
3. コンテナ起動時に実行する命令の 指定方法
• イメージにはコンテナ起動時にどんなコマンドを実行するか定義されている ◦ 例)Nginx イメージの場合: CMD ["nginx" "-g" "daemon off;"]
• 起動時に実行するコマンドは自分で指定できる ◦ Dockerfile の CMD 命令 ◦ docker exec [option] <container> command(←コレ) ◦ docker-compose.yml の command: • 指定した場合、次の優先度でコマンドは上書きされる ◦ docker-compose.yml の command: = docker exec の command > Dockerfile の CMD 命令 > イメージで指定されたコマンド 3. コンテナ起動時に実行する命令の指定方法
3. コンテナ起動時に実行する命令の指定方法 $ docker container run \ --name nginx1 \
--rm \ --detach \ nginx:1.21 $ docker container run \ --name nginx2 \ --rm \ --interactive \ --tty \ nginx:1.21 \ bash そのままコンテナを起動した場合 起動時に bash を 実行するよう指定した場合 # ps x PID TTY STAT TIME COMMAND 1 ? Ss 0:00 nginx: master process nginx -g daemon off; 36 pts/0 Ss 0:00 bash 387 pts/0 R+ 0:00 ps x # ps PID TTY TIME CMD 1 pts/0 00:00:00 bash 346 pts/0 00:00:00 ps コンテナ内で ps を実行した結果 コンテナ内で ps を実行した結果 PID 1 はイメージで指定されたコマンド( Nginx の起動コマンド)に なっている PID 1 は指定したコマンドに なっている
3. コンテナ起動時に実行する命令の指定方法 $ docker container run \ --name ubuntu1 \
--rm \ --interactive \ --tty \ my-ubuntu CMD $ docker container run \ --name ubuntu1 \ --rm \ --interactive \ --tty \ my-ubuntu \ echo "exec" exec $ docker-compose up [+] Running 2/0 ⠿ Network tech-book-lt_default Created 0.0s ⠿ Container tech-book-lt-sample-1 Created 0.0s Attaching to tech-book-lt-sample-1 tech-book-lt-sample-1 | compose tech-book-lt-sample-1 exited with code 0 CMD 命令の通り “CMD” と出る (イメージ指定の命令は上書きされる ) 指定通り “exec” と出る ( CMD 命令は上書きされる) 指定通り “compose” と出る ( CMD 命令は上書きされる) FROM ubuntu:20.04 CMD ["echo", "CMD"] Dockerfile version: '3' services: sample: image: my-ubuntu tty: true command: echo "compose" docker-compose.yml 起動時に echo “CMD” を実行 起動時に echo “compose” を実行 そのままコンテナを起動した場合 docker exec で指定した場合 docker-compose.yml で指定した場合 起動時に echo “exec” を実行 Ubuntu イメージのレイヤー 起動時に bash を実行
4. volume マウント、 bind マウント、 Dockerfile の COPY 命令の違い
4. volume マウント、 bind マウント、 Dockerfile の COPY 命令の違い 効果
ホストマシンとの関係 volume マウント Docker が管理する領域をコンテナ内の指定ディレクトリ に割り当てる ホストマシンからはアクセスできない =ファイルを削除したりしてもホストマシンには影響が出ない bind マウント ホストマシンの指定ディレクトリ をコンテナ内の指定ディレ クトリに割り当てる ホストマシンからアクセスできる =ファイルを削除するとホストマシンからも消える Dockerfile の COPY 命令 指定ファイルをイメージビルド時にコピー する コンテナを起動するとファイルが存在 →変更の反映にはイメージの再ビルドが必要
4. volume マウント、 bind マウント、 Dockerfile の COPY 命令の違い dir-C/
内のファイルを削除すると volume-A からも削除される ↓ ホストマシンには影響なし dir-D/ 内のファイルを削除すると、 dir-B/ からも削除される ↓ ホストマシンに影響あり
4. volume マウント、 bind マウント、 Dockerfile の COPY 命令の違い COPY
命令 bind マウント COPY bind マウント イメージビルド時に COPY コンテナ起動時に bind マウント 元の図: https://zenn.dev/suzuki_hoge/books/2022-03-docker-practice-8ae36c33424b59/viewer/3-5-bind-mount
5. Docker Hub のレイヤー情報の見方 (例: rails:5.0.1 イメージの場合)
5. Docker Hub のレイヤー情報の見方(例: rails:5.0.1 イメージの場合) Rails イメージの Tag ページにあるレイヤー情報
22 レイヤー Rails のリポジトリにある Dockerfile 4 レイヤー なぜ違う? 元の図: https://zenn.dev/suzuki_hoge/books/2022-03-docker-practice-8ae36c33424b59/viewer/2-8-dockerfile
5. Docker Hub のレイヤー情報の見方(例: rails:5.0.1 イメージの場合) ruby:2.3 のレイヤー ( 18
レイヤー) Rails の Dockerfile ( 4 レイヤー) 元の図: https://zenn.dev/suzuki_hoge/books/2022-03-docker-practice-8ae3 6c33424b59/viewer/2-8-dockerfile
ご清聴ありがとうございました!