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
92
ConoHa WINGを支える技術(インフラ編)
hironobu
2
2.2k
俺がどんな風にConoHaを使っているのか 全部見せますスペシャル
hironobu
0
2.3k
俺用ツールをオープンソースで公開したら 意外と反応があった話
hironobu
0
120
ConoHaとDocker Machineで Dockerホストを作ってみよう
hironobu
2
1.2k
Goでデーモンを作ってみる
hironobu
4
3.5k
エバンジェリストの役割(HosCon大阪)
hironobu
0
670
自作サーバーの時代から 最新クラウドの時代へ、そして
hironobu
1
780
開発者× CloudStack × Stuck
hironobu
0
700
Other Decks in Technology
See All in Technology
システムとの会話から生まれる先手のDevOps
kakehashi
PRO
0
290
勝手に!深堀り!Cloud Run worker pools / Deep dive Cloud Run worker pools
iselegant
2
430
ガバクラのAWS長期継続割引 ~次の4/1に慌てないために~
hamijay_cloud
1
270
Mastraに入門してみた ~AWS CDKを添えて~
tsukuboshi
0
270
今日からはじめるプラットフォームエンジニアリング
jacopen
4
230
SDカードフォレンジック
su3158
1
630
MCPを活用した検索システムの作り方/How to implement search systems with MCP #catalks
quiver
12
6.8k
Road to Go Gem #rubykaigi
sue445
0
790
ここはMCPの夜明けまえ
nwiizo
28
9.9k
ビジネスとデザインとエンジニアリングを繋ぐために 一人のエンジニアは何ができるか / What can a single engineer do to connect business, design, and engineering?
kaminashi
0
100
AI AgentOps LT大会(2025/04/16) Algomatic伊藤発表資料
kosukeito
0
140
От ручной разметки к LLM: как мы создавали облако тегов в Lamoda. Анастасия Ангелова, Data Scientist, Lamoda Tech
lamodatech
0
750
Featured
See All Featured
GraphQLとの向き合い方2022年版
quramy
46
14k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
Imperfection Machines: The Place of Print at Facebook
scottboms
267
13k
Why You Should Never Use an ORM
jnunemaker
PRO
55
9.3k
How to Ace a Technical Interview
jacobian
276
23k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
How to Think Like a Performance Engineer
csswizardry
23
1.5k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
9
760
Git: the NoSQL Database
bkeepers
PRO
430
65k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
Typedesign – Prime Four
hannesfritz
41
2.6k
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回るの時間かかるし遅い • コンテナ化は「考えなきゃいけないことが増えただけ」 • メリットがわからない 「コンテナっているの︖」