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
技術書LT #11 実践 Docker - ソフトウェアエンジニアの「Docker よくわか...
Search
yamamoto-yuta
July 05, 2023
Technology
1.8k
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
860
「必要とされるデータ基盤」であり続けるためにやってきたこと / What We've Done to Make a Needed Data Analytics Platforms Grow
yamamotoyuta
0
600
他チームへ越境したら、生データ提供ソリューションのクエリ費用95%削減へ繋がった話 / Cross-Team Impact: 95% Off Raw Data Query Costs
yamamotoyuta
0
870
プロダクト観点で考えるデータ基盤の育成戦略 / Growth Strategy of Data Analytics Platforms from a Product Perspective
yamamotoyuta
1
2.2k
ヤプリのデータカタログ整備 1年間の歩み / Progress of Building a Data Catalog at Yappli
yamamotoyuta
4
4.2k
私のdbt布教用資料 〜TROCCOUG Ver.〜 / My Guide to Evangelizing dbt - TROCCOUG Ver.
yamamotoyuta
1
3.2k
データカタログの最初の一歩 〜データ組織向けに dbt docs を整備している話〜 / Maintaining dbt docs for data organizations
yamamotoyuta
2
3.6k
次の10年を戦える分析用データ基盤構築の第一歩 - dbtによる基盤刷新とクエリ費用90%削減への取り組み -
yamamotoyuta
1
2.1k
Other Decks in Technology
See All in Technology
ルールやカスタム機能、どう活かす?ハンズオンで体感するIBM Bobの出力コントロール
muehara
1
120
AI活用を推進するために ファインディが下した、一つの小さな決断
starfish719
0
290
2026TECHFRESH畢業分享會 - AI 時代的人生存檔點
line_developers_tw
PRO
0
630
非エンジニアがClaudeと挑んだ「1ヶ月間プロダクト30本ノック」
askokc
0
220
Dario Amodi『Policy on the AI Exponential』を理解する
nagatsu
0
210
Bucharest Tech Week 2026 - Reinventing testing practices in the AI era
edeandrea
PRO
1
130
就職⽀援サービスにおけるキャリアアドバイザーのシフトスケジューリング
recruitengineers
PRO
1
120
作って終わりにしない タイミーのセマンティックレイヤー育成の現在地
chanyou0311
3
2.1k
On-behalf-of Token exchange with AgentCore Identity
hironobuiga
2
130
実装は速くなった、レビューはどうする? ― 自身のレビューをAIで再現させるサーヴァントエンジニアリングのすゝめ / Implementation got faster. So what about reviews? — An invitation to Servant Engineering: Recreating your own code reviews with AI
nrslib
8
4.5k
小さくはじめるSLI/SLO ~育てながら組織に定着させる実践知~ / Starting Small with SLI/SLOs: Building Adoption Through Continuous Growth
nari_ex
2
1.2k
Oracle Cloud Infrastructure IaaS 新機能アップデート 2026/3 - 2026/5
oracle4engineer
PRO
1
250
Featured
See All Featured
How to make the Groovebox
asonas
2
2.2k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.1k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
240
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
170
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.9k
Claude Code のすすめ
schroneko
67
230k
A Soul's Torment
seathinner
6
2.9k
Designing for Performance
lara
611
70k
How to train your dragon (web standard)
notwaldorf
97
6.7k
The Spectacular Lies of Maps
axbom
PRO
1
790
Everyday Curiosity
cassininazir
0
230
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
ご清聴ありがとうございました!