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.4k
コンテナの基礎
Hironobu Saitoh
February 22, 2021
Tweet
Share
More Decks by Hironobu Saitoh
See All by Hironobu Saitoh
オレのエンジニア的英語勉強法
hironobu
2
85
ConoHa WINGを支える技術(インフラ編)
hironobu
2
2.1k
俺がどんな風にConoHaを使っているのか 全部見せますスペシャル
hironobu
0
2.2k
俺用ツールをオープンソースで公開したら 意外と反応があった話
hironobu
0
110
ConoHaとDocker Machineで Dockerホストを作ってみよう
hironobu
2
1.2k
Goでデーモンを作ってみる
hironobu
4
3.3k
エバンジェリストの役割(HosCon大阪)
hironobu
0
610
自作サーバーの時代から 最新クラウドの時代へ、そして
hironobu
1
730
開発者× CloudStack × Stuck
hironobu
0
640
Other Decks in Technology
See All in Technology
ABEMAにおけるLLMを用いたコンテンツベース推薦システム導入と効果検証
cyberagentdevelopers
PRO
1
720
Azure AI ことはじめ
tsubakimoto_s
0
130
プレイドにおけるDatadog APMの活用方法
plaidtech
PRO
2
120
Azure Pipelinesを使用したCICDベースラインアーキテクチャ実践
yuriemori
0
190
目標設定は好きですか? アジャイルとともに目標と向き合い続ける方法 / Do you like target Management?
kakehashi
10
3k
Azure OpenAI Service Dev Day / LLMでできる!使える!生成AIエージェント
masahiro_nishimi
3
750
ACRiルーム最新情報とAMD GPUサーバーのご紹介
anjn
0
150
Amazon FSx for NetApp ONTAPのパフォーマンスチューニング要素をまとめてみた #cm_odyssey #devio2024
non97
0
220
JBUG岡山 #6 WordCamp男木島の チームビルディング
takeshifurusato
0
150
AWSで”最小権限の原則”を実現するための考え方 /20240722-ssmjp-aws-least-privilege
opelab
10
4.3k
AOAI Dev Day LLMシステム開発 Tips集
hirosatogamo
15
3.7k
What is DRE? - Road to SRE NEXT@広島
chanyou0311
3
630
Featured
See All Featured
10 Git Anti Patterns You Should be Aware of
lemiorhan
652
58k
Building Adaptive Systems
keathley
34
2k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
360
22k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
149
45k
Documentation Writing (for coders)
carmenintech
63
4.2k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
29
2.5k
Java REST API Framework Comparison - PWX 2021
mraible
PRO
20
7.2k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
26
1.6k
Designing on Purpose - Digital PM Summit 2013
jponch
113
6.6k
Debugging Ruby Performance
tmm1
71
11k
Why Our Code Smells
bkeepers
PRO
332
56k
In The Pink: A Labor of Love
frogandcode
139
22k
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回るの時間かかるし遅い • コンテナ化は「考えなきゃいけないことが増えただけ」 • メリットがわからない 「コンテナっているの︖」