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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Hironobu Saitoh
February 22, 2021
Technology
0
1.6k
コンテナの基礎
Hironobu Saitoh
February 22, 2021
Tweet
Share
More Decks by Hironobu Saitoh
See All by Hironobu Saitoh
オレのエンジニア的英語勉強法
hironobu
2
110
ConoHa WINGを支える技術(インフラ編)
hironobu
2
2.3k
俺がどんな風にConoHaを使っているのか 全部見せますスペシャル
hironobu
0
2.3k
俺用ツールをオープンソースで公開したら 意外と反応があった話
hironobu
0
130
ConoHaとDocker Machineで Dockerホストを作ってみよう
hironobu
2
1.3k
Goでデーモンを作ってみる
hironobu
4
3.6k
エバンジェリストの役割(HosCon大阪)
hironobu
0
710
自作サーバーの時代から 最新クラウドの時代へ、そして
hironobu
1
820
開発者× CloudStack × Stuck
hironobu
0
730
Other Decks in Technology
See All in Technology
AI実装による「レビューボトルネック」を解消する仕様駆動開発(SDD)/ ai-sdd-review-bottleneck
rakus_dev
0
140
The_Evolution_of_Bits_AI_SRE.pdf
nulabinc
PRO
0
220
Claude Code のコード品質がばらつくので AI に品質保証させる仕組みを作った話 / A story about building a mechanism to have AI ensure quality, because the code quality from Claude Code was inconsistent
nrslib
13
8k
僕、S3 シンプルって名前だけど全然シンプルじゃありません よろしくお願いします
yama3133
1
220
Google系サービスで文字起こしから勝手にカレンダーを埋めるエージェントを作った話
risatube
0
190
会社紹介資料 / Sansan Company Profile
sansan33
PRO
16
410k
身体を持ったパーソナルAIエージェントの 可能性を探る開発
yokomachi
1
120
チームのモメンタムに投資せよ! 不確実性と共存しながら勢いを生み出す3つの実践
kakehashi
PRO
1
110
内製AIチャットボットで学んだDatadog LLM Observability活用術
mkdev10
0
110
NewSQL_ ストレージ分離と分散合意を用いたスケーラブルアーキテクチャ
hacomono
PRO
4
350
JAWS FESTA 2025でリリースしたほぼリアルタイム文字起こし/翻訳機能の構成について
naoki8408
1
550
楽しく学ぼう!コミュニティ入門 AWSと人が つむいできたストーリー
hiroramos4
PRO
1
200
Featured
See All Featured
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.8k
A Tale of Four Properties
chriscoyier
163
24k
The SEO identity crisis: Don't let AI make you average
varn
0
420
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.7k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
340
Between Models and Reality
mayunak
2
230
So, you think you're a good person
axbom
PRO
2
2k
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
120
Code Review Best Practice
trishagee
74
20k
Designing Experiences People Love
moore
143
24k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.3k
Transcript
Copyright © GMO Internet Inc. All Rights Reserved. コンテナの基礎 GMOインターネット
Webプロモーション研究室 ⻫藤弘信
2 Copyright © GMO Internet Inc. All Rights Reserved. このセッションの⽬的
フロントエンドの⼈がコンテナ(Docker)の基礎的な理解を深める ⽬次 • コンテナとDocker。メリットやその必要性 • Webアプリを例に実際のコンテナの例 • Docker基礎 • ディスカッション
3 Copyright © GMO Internet Inc. All Rights Reserved. コンテナとDocker
コンテナ • アプリケーションとそのミドルウェアなどをパッケージ化する技術 • コンテナが動く環境なら(基本的に)どこでもアプリケーションが動作する • 仮想サーバー(Virtual machine)と似ているが技術的に全く別物 Docker • 上記のコンテナの実装の⼀つ • メジャーな実装の⼀つ • まずはこれを覚えましょう
4 Copyright © GMO Internet Inc. All Rights Reserved. コンテナがもたらすメリット
アプリケーションを正しく配置するため • 近年のアプリケーションは多くの外部ライブラリに依存している • npmとか • ミドルウェアにも依存している • PHPのバージョン違いとか • さまざまな外部サービスにも依存している(DB, キャッシュ, CDN etc…) • プロジェクトの環境も複数ある(Testing, Staging, Production) 依存関係を間違えるとアプリケーションの動作に⼤きな影響が出る
5 Copyright © GMO Internet Inc. All Rights Reserved. コンテナがもたらすメリット
アプリケーションを正しく配置するため (図は元内さんのパワポから引⽤)
6 Copyright © GMO Internet Inc. All Rights Reserved. コンテナがもたらすメリット
コンテナはアプリケーションの動作を保証しやすい • コンテナ内にはアプリケーションとミドルウェアが含まれている • 依存関係が内部で完結している • どこでもアプリを動かすことができる • コンテナをそのまま他の場所へ移せばすぐに動作させられる アプリケーションの環境依存を減らすことができ、 開発や運⽤の効率を上げることができる
7 Copyright © GMO Internet Inc. All Rights Reserved. コンテナのトレンド
コンテナ⾃体はすでに開発のメインストリーム • インフラの技術はすでにアプリのコンテナ化を前提にしたものが増えている • ビルドやCIシステムも同じ • 今はフロントの⼈でもガンガンコマンド叩く • JS界隈の⼈の⽅がむしろdocker好きな気がする(依存が多いので)
Copyright © GMO Internet Inc. All Rights Reserved. 実際のコンテナ
Copyright © GMO Internet Inc. All Rights Reserved. コンテナの実体 (⻫藤が普段開発する場合のツリー)
/home/hiro/dev └── onamae.com ├── datas ├── htdocs │ └── index.php ├── library │ └── lib.php └── var 具体的にコンテナとは何なのか • アプリケーションの実⾏に必要なファイルをまとめたもの • 例えばPHPのWebアプリの場合、PHPファイル、アセットファイル(js, css)、画像 ファイルなど
Copyright © GMO Internet Inc. All Rights Reserved. コンテナの実体 アプリケーションのファイルだけじゃない
• Webアプリを動作させるには、実⾏環境が必要 • 実⾏環境とはWebサーバー(Apache/Nginxなど), PHP, MySQLのようなもの • 上記を動かすにはOSも必要になる
Copyright © GMO Internet Inc. All Rights Reserved. • それらをパッケージ化して扱おうと考えて登場したのがコンテナ技術である
コンテナの実体 実⾏環境 OS Webアプリ コンテナ /home/hiro/dev └── onamae.com ├── datas ├── htdocs │ └── index.php ├── library │ └── lib.php └── var
Copyright © GMO Internet Inc. All Rights Reserved. • それらをまとめてパッケージ化したものがコンテナである
コンテナの実体 コンテナ /home/hiro/dev └── onamae.com ├── datas ├── htdocs │ └── index.php ├── library │ └── lib.php └── var これは…︖ 実⾏環境 OS Webアプリ
Copyright © GMO Internet Inc. All Rights Reserved. • コンテナはホストOS(のカーネル)を共⽤するのでコンテナには含まない
• ホストOS︖︖︖ コンテナの実体 コンテナ /home/hiro/dev └── onamae.com ├── datas ├── htdocs │ └── index.php ├── library │ └── lib.php └── var 実⾏環境 OS Webアプリ ホストOS
Copyright © GMO Internet Inc. All Rights Reserved. Windows/ macOS/
Linux コンテナの実体 実⾏環境 Webアプリ • DockerはWindows, macOS, Linuxなどにインストールできる • Dockerがインストールされていればどの環境でもコンテナが動く Docker
Copyright © GMO Internet Inc. All Rights Reserved. コンテナの実体 •
そのコンテナを動作させるものをコンテナランタイムと呼ぶ • Dockerはコンテナランタイムの⼀つ コンテナにはWebアプリを実⾏するために必要なものがすべて含まれている 実⾏環境 Webアプリ Docker
Copyright © GMO Internet Inc. All Rights Reserved. 実際の運⽤ •
実運⽤では複数のコンテナが連携してシステムを構成する • ⼀つのコンテナに⼀つの機能を割り当てる Docker サーバー / インフラ / PC ・・・ Webサーバ 実⾏環境 Webアプリ データベース
17 Copyright © GMO Internet Inc. All Rights Reserved. 開発環境として
開発環境としてDockerを使うのも全然あり • VSCodeのRemote Development • コンテナ内に開発環境を作る • ローカルに開発環境を作る必要が無い • VSCodeが(ある程度)⾃動でやってくれる • マシンが変わってもOK https://code.visualstudio.com/docs/remote/remote-overview
Copyright © GMO Internet Inc. All Rights Reserved. Docker基礎 まとめ
• コンテナはアプリケーションとその実⾏環境をパッケージにしたもの • Dockerとはコンテナを動作させるランタイムの有名な実装の⼀つ • 近年のアプリケーションは多くの依存関係を持っている • コンテナでアプリケーションの依存関係をシンプルにできる • それにより開発や運⽤の効率を上げることができる
Copyright © GMO Internet Inc. All Rights Reserved. Dockerを触ってみる
Copyright © GMO Internet Inc. All Rights Reserved. Docker基礎 •
creative-docker-vmをclone • git clone • Vagrantで仮想マシンを⽴ち上げてログイン • vagrant up • vagrant ssh • dockerで使うCentOSのコンテナイメージを取得する • docker pull centos • コンテナを作成して中に⼊る • docker run –ti --rm centos /bin/bash (←このコマンドは後で説明します) • cat /etc/redhat-release
Copyright © GMO Internet Inc. All Rights Reserved. Docker基礎 ローカルPC(Mac,
Windows) Docker(CentOS7) vagrant (creative-docker-vm) vagrant up docker run –ti –rm centos /bin/bash ここは仮想マシン(VM)の中 ここはコンテナの中 どんな環境になっているのか(イメージ図)
22 Copyright © GMO Internet Inc. All Rights Reserved. Docker基礎
コンテナイメージを⽴ち上げるための最⼩限のコマンド docker run –ti --rm centos /bin/bash -t –i --rmはオプション runはコンテナを作成/実⾏するサブコマンド centosイメージを使って /bin/bashを実⾏する
Copyright © GMO Internet Inc. All Rights Reserved. Docker基礎 いろいろなコンテナイメージを利⽤することができる
https://hub.docker.com/
Copyright © GMO Internet Inc. All Rights Reserved. PHPのコンテナイメージを使ってみる(https://hub.docker.com/_/php) •
現在の環境のPHPのバージョンを確認 • php -v • PHP5.3イメージを作成 • docker run -ti --rm php:5.3-cli /bin/bash • (⾃動でイメージ取得が⾏われる) • php -v • exit • 環境が戻ったことを確認 • php -v Docker基礎
Copyright © GMO Internet Inc. All Rights Reserved. PHPのコンテナイメージを使ってみる(2)(https://hub.docker.com/_/php) •
php7.2-apacheイメージを使ってphpinfoを出してみる • htdocsフォルダを作る • <?php phpinfo(); と書いたindex.phpを⽤意 • docker run --rm -p 80:80 -v “$PWD”:/var/www/html php:7.3-apache • ブラウザから http://localhost:8090/ を開く(phpinfoが出るはず) • 以下のコマンドも試してみる • docker run --rm -p 80:80 -v “$PWD”:/var/www/html php:5.3-apache Docker基礎
Copyright © GMO Internet Inc. All Rights Reserved. Docker基礎 +
ローカルPC(Mac, Windows) Docker(php7.3-apache) vagrant (creative-docker-vm) vagrant: 80 ローカルPC: 8090 ここは仮想マシン(VM)の中 ここはコンテナの中 php7.3-apache実⾏時のポート図 + docker: 80 vagrant: 80
27 Copyright © GMO Internet Inc. All Rights Reserved. Docker基礎
まとめ • docker runコマンドでコンテナを作成できる • コンテナイメージを利⽤することで⾊々なOSやミドルウェアをすぐに⽤意できる • バージョン違いなどもすぐに試せる • コンテナで⽤意した環境の中ですぐに開発を始められる︕ • 開発が終わった後、コンテナから新しいコンテナイメージを作れる(今度やる)
Copyright © GMO Internet Inc. All Rights Reserved. ディスカッション
Copyright © GMO Internet Inc. All Rights Reserved. • チーム開発では主にPHPファイルとアセット(JS/CSS/Image)を扱ってる
• サーバーの適切なフォルダにデプロイ/アップロードすれば動いていた • DBなど環境に応じて設定を切り替える必要があるけどノウハウがあるので無問題 • わざわざコンテナやDockerにする必要性を感じない • コンテナはイメージ作るの複雑でCI回るの時間かかるし遅い • コンテナ化は「考えなきゃいけないことが増えただけ」 • メリットがわからない 「コンテナっているの︖」