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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
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
FDE という解 ― 暗黙知と明示知をつなぐ、伴走型エンジニアリング ―
otanet
0
120
AI Engineering Summit Tokyo 2026 AIの前に、やることがある 〜医療データ企業の4フェーズ〜
dtaniwaki
0
2.5k
失敗を経て、Harness Engineering で 大切にしたいことを考える / Learning from Failure: What Matters in Harness Engineering
bitkey
PRO
1
250
"何を作るか"を任される エンジニアは、どう育つのか
yutaokafuji
1
530
Agentic Web
dynamis
1
200
JSAI2026 オーガナイズドセッションOS-27「不動産とAI」趣旨説明 / JSAI2026 Organized Session OS-27 “Real Estate and AI”: Statement of Purpose
ykiyota
0
170
日本 Fintech 未来予測レポート 2027〜2028年(手動編集版)
8maki
0
1k
AGENTS.mdとSkillsで始めるAIエージェント活用
sonoda_mj
2
190
EventBridge Connection
_kensh
5
680
RSA暗号を手計算したくなること、ありますよね?? (20260615_orestudy6_rsa)
thousanda
0
130
2026 TECHFRESH 畢業分享會 - AI-Native 重塑軟體工程與虛擬講師
line_developers_tw
PRO
0
630
AWSシリコン最前線 〜AI時代のチップ選択を読み解く〜
htokoyo
2
370
Featured
See All Featured
Technical Leadership for Architectural Decision Making
baasie
3
400
Visualization
eitanlees
152
17k
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
770
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
190
We Have a Design System, Now What?
morganepeng
55
8.2k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
310
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.7k
RailsConf 2023
tenderlove
30
1.5k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
570
The Curse of the Amulet
leimatthew05
1
13k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.7k
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
ご清聴ありがとうございました!