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
Hironobu Saitoh
February 22, 2021
Technology
0
1.5k
コンテナの基礎
Hironobu Saitoh
February 22, 2021
Tweet
Share
More Decks by Hironobu Saitoh
See All by Hironobu Saitoh
オレのエンジニア的英語勉強法
hironobu
2
92
ConoHa WINGを支える技術(インフラ編)
hironobu
2
2.2k
俺がどんな風にConoHaを使っているのか 全部見せますスペシャル
hironobu
0
2.3k
俺用ツールをオープンソースで公開したら 意外と反応があった話
hironobu
0
120
ConoHaとDocker Machineで Dockerホストを作ってみよう
hironobu
2
1.3k
Goでデーモンを作ってみる
hironobu
4
3.5k
エバンジェリストの役割(HosCon大阪)
hironobu
0
680
自作サーバーの時代から 最新クラウドの時代へ、そして
hironobu
1
790
開発者× CloudStack × Stuck
hironobu
0
710
Other Decks in Technology
See All in Technology
作曲家がボカロを使うようにPdMはAIを使え
itotaxi
0
390
生成AI開発案件におけるClineの業務活用事例とTips
shinya337
0
190
あなたの声を届けよう! 女性エンジニア登壇の意義とアウトプット実践ガイド #wttjp / Call for Your Voice
kondoyuko
4
510
プロダクトエンジニアリング組織への歩み、その現在地 / Our journey to becoming a product engineering organization
hiro_torii
0
140
ビギナーであり続ける/beginning
ikuodanaka
3
350
Connect 100+を支える技術
kanyamaguc
0
160
Claude Code Actionを使ったコード品質改善の取り組み
potix2
PRO
6
2.6k
Node-RED × MCP 勉強会 vol.1
1ftseabass
PRO
0
180
SpringBoot x TestContainerで実現するポータブル自動結合テスト
demaecan
0
120
asken AI勉強会(Android)
tadashi_sato
0
140
Amazon Bedrockで実現する 新たな学習体験
kzkmaeda
2
690
【5分でわかる】セーフィー エンジニア向け会社紹介
safie_recruit
0
26k
Featured
See All Featured
Build The Right Thing And Hit Your Dates
maggiecrowley
36
2.8k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
The Straight Up "How To Draw Better" Workshop
denniskardys
234
140k
The Cult of Friendly URLs
andyhume
79
6.5k
How STYLIGHT went responsive
nonsquared
100
5.6k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
Faster Mobile Websites
deanohume
307
31k
What's in a price? How to price your products and services
michaelherold
246
12k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
15
1.5k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
Making the Leap to Tech Lead
cromwellryan
134
9.4k
Java REST API Framework Comparison - PWX 2021
mraible
31
8.7k
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回るの時間かかるし遅い • コンテナ化は「考えなきゃいけないことが増えただけ」 • メリットがわからない 「コンテナっているの︖」