Dockerいろいろ使って思うこと
はしもとまさ
@相模原Docker & Kubernetes やってみたい人MeetUp
2019/1/27
自己紹介
✔
はしもとまさ (or 鹿野月美)
– Twitter : @shikanotsukimi
✔
東海道らぐ 関東案内人
– 横浜オフを企画している人
– 並行してかな漢字変換『Genji』を自作してます
✔
ちびぎーこ保護者会(別名: 日本openSUSEユーザ会)
– ぶっちゃけ『橋本』さん多すぎるので、『鹿』です。
– 本日冬コミ本、400円で売ってます(笑) ←修太さんのKubernetesネタや鹿の小説など
✔
小説書いてます!
– 『ユーレイだってAIしたい! 〜OSC事務局の日常〜』:
毎週火曜更新。オープンソースカンファレンス応援小説……のはず?
https://kakuyomu.jp/works/1177354054887855183
本日のお題。
いくらなんでもDocker & docker-composeに
振り回されすぎだよ〜!!!
……というお話。
Dockerに触れてみて思ったことと
Dockerに躓いたときのお話(クイズ形式)を
お話します。
(およそどこかの再放送ですが、全て通して見たことある方はいないはず)
ところで……
Dockerってなによ!?
そもそもDockerってなに?
✔
疑問1: そもそも仮想マシンと何が違うの?
– 環境構築だけなら仮想マシンのほうが楽?
– 仮想マシンより高速・軽量って本当?
✔
疑問2: Docker を使うメリット&使いどころは?
– Docker と一緒によく聞く「DevOps」って?
– Docker ってどう使うべき?
– 結局 Docker ってなんなの?
Docker と仮想マシン、何が違うのか?
✔
仮想マシン: ハイパーバイザ上で動作
✔
Docker: ホストのOS(カーネル)上で動作
出典:さくらのナレッジ https://knowledge.sakura.ad.jp/13265/
この部分が
Dockerにはいない
⇒ホストと
共有しているから
仮想マシンより高速&軽量って本当?
1.高速かどうかは状況次第では???
2.本当に軽量なの?
⇒ Rasberry Pi で動くのはどっち!?
✔ 仮想マシン
⇒ 無理!(準仮想化なら辛うじていけるかな?)
✔ Docker
⇒ 正式サポートされてます!!
同一OS(カーネル)上で動くので、新たにOSを起動する必要なし!
少し話をずらします。。。
「DevOps」っていったいなに?
✔
読み方は?
✔
そもそも何の略?
…ここにいらっしゃる方は説明する必要もない気もしますが?
「DevOps」とは
「でぶおぷす」って読みます。
✔
「Development」と「Operations」を略したもの
⇒ 開発チームと運用チームが共同で作業を行うこと
✔
アジャイル開発のひとつ「テスト自動化」を
イメージすると、理解しやすいかも。
⇒ Jenkins, Ansible, Git, Docker……などを使用します
……で、Docker と DevOps、どう関係あるの?
例) Mastodonサーバーを構築してみよう!
✔
Mastodon とは
= Twitterもどきのオープンソース  https://joinmastodon.org/
イチから構築しようと思うと、考えただけでもぞっとしますね
✔
必要なミドルウェア(※たぶん抜粋)
– Nginx (Webサーバー)
– Ruby on Rails (Webアプリサーバー)
– PostgreSQL (DBサーバー)
– Redis (DBサーバーその2)
– Postfix (メールサーバー)
 ・・・・・。
⇒ 開発&運用スキルの両方が求められそう……
Mastodon を Docker で構築する場合
✔
docker-compose でどっかーんと構築!
docker-compose = 複数のdockerコンテナを制御
※ docker-compose.yml というファイルを書くだけで基本OK
✔
一般に公開されているMastodonインスタンスも
Dockerを使用しているケースはかなりあります
例)mikutter (https://social.mikutter.hachune.net/)
Mastodonの場合はややコマンドが複雑ですが
やはりDockerを使うとかなり楽!
docker-compose の超基本的な使い方
✔
イメージの作成
$ docker-compose build
✔
コンテナ起動
$ docker-compose up –d
✔
コンテナ停止
$ docker-compose down
本当に基本的な操作としてはこれだけです
結局のところ、Docker ってなにか?
Dockerは
「使い捨て簡易アプリサーバー」
注:あくまで個人的な主観です!!
Docker を使うメリット
✔
ホストと同一OS上で動作するため軽い
– 起動&停止がさくさくできる
– 逆に「軽い」というメリットを生かさないとダメ!
●
Dockerイメージはなるべく小さく作ること!
●
ポイントとしては「1アプリ=1イメージ」
●
ホストマシンもそんなに高スペックである必要なし!
⇒1GBを超えるイメージとか作ったらあかん!!
✔
常に同じ環境を構築できる
– テスト環境構築にちょうど良い!
– 「DevOps」には欠かせないツール(Kubernetes等)
Docker を使う際の注意点
✔
Dockerコンテナを停止すると
書かれたものはすべて消えます!!
※だから「使い捨て」
⇒例:
●
DBサーバーのストレージ
●
ログファイル
✔
対処法:
ホストPC上にマウントポイントを作成し
Dockerコンテナが吐き出すログなどはそこへ書くように設定する
※ようは、消したくないものはホストへ書きましょう!
さて、ここからはちょっとマニアックなDocker実践編!
これから
docker-composeに関する問題を
3つを出します!
いくつ答えられるかな?
docker-compose = 複数のDockerコンテナを一括管理するみたいなアレ
問1: 【初級】ネットワークが繋がらない!?
✔
下記のdocker-compose.ymlの場合、Dockerコンテナ同士の通信が出来ません。
どうすればいいでしょうか?「一番簡単な方法」はなんでしょう?
app1:
image: app1
port: 8080:80
app2:
image: app2
port: 8081:80
app3:
image: app3
「app1」と「app3」が
会話をするには
どうすれば???
問1 答え
✔
docker-composeのネットワーク管理は「Version2」から! (らしい?)
version: '2'
services:
app1:
image: app1
port: 8080:80
container_name: app1
app2:
image: app2
port: 8081:80
container_name: app2
app3:
image: app3
container_name: app3
これで、app1から
「ping app3」(名前解決)
が通るようになる
他にも方法あるだろうけど
これが一応答えということで。
問2:【中級】外からアクセスできない!??
✔
なぜかこれだとタブレットからアクセスできないんですけどなぜ!?
version: '2'
services:
app1:
image: app1
port: 30000:30000
container_name: app1
app2:
image: app2
port: 30001:30001
container_name: app2
app3:
image: app3
container_name: app3
タブレットから
30000ポートで開いているはずのアプリと
UDP通信したいだけなのに!!!
注:ホスト側で30000ポートを
別アプリが使用していたというオチではありません!!
問2:ヒント
✔
なぜかこれだとタブレットからアクセスできないんですけどなぜ!?
version: '2'
services:
app1:
image: app1
port: 30000:30000
container_name: app1
app2:
image: app2
port: 30001:30001
container_name: app2
app3:
image: app3
container_name: app3
タブレットから
30000ポートで開いているはずのアプリと
UDP通信したいだけなのに!!!
これ、言われりゃそりゃ気づくんだけど…orz
問2:答え
✔
UDP通信する場合はこんな感じで…orz (そもそもiptable由来らしい)
version: '2'
services:
app1:
image: app1
port: 30000:30000/udp
container_name: app1
app2:
image: app2
port: 30001:30001/udp
container_name: app2
app3:
image: app3
container_name: app3
おいら、気づいて解決するまでに
まる1日くらいかかりましたorz
問3: 【上級】ALSA専有問題!??
✔
下記の図の通りdockerでコンテナを立てたつもりが
どういうわけだか「コンテナ3」がリソースビジーで立ち上がりません。
どうすればよいでしょうか?
Dockerエンジン
コンテナ1 コンテナ2 コンテナ3
/dev/snd/pcmC1D0c
/dev/snd/pcmC1D0p 再生
録音
前提条件:
Dockerを使用しない場合は
「アプリ1」
「アプリ2」
「アプリ3」
ちゃんと同時動作します!
アプリ1 アプリ2 アプリ3
問3: 答え(たぶん)
✔
どうやらDockerコンテナひとつがデバイスファイルをそのものを専有する模様
……ということは、こんな感じで回避できた!!
Dockerエンジン
コンテナ1 コンテナ2
/dev/snd/pcmC1D0c
/dev/snd/pcmC1D0p 再生
録音
いろいろ試してこれしかうまくいってない…
コンテナ内のアプリがPulseAudioを使用しても
同じことが起きてるのでまぁこう考えるのが妥当かなと
アプリ1 アプリ2
アプリ3
コンテナ3
は削除
ご清聴ありがとうございました!

More Related Content

PDF
もちょブログ解析入門
PDF
cocos2d-xを勉強し始めるまで
ZIP
夜トコ04:tumblrとは何か?
PDF
【LT用前編】Rancherでマルチクラウド をやってみた
PPT
非情勤司書という生(逝)き方 遠藤元康
PDF
MMySQL Router を監視しちゃうぞ! MySQL Casual Talks #12y sql casual talks #12 (1)
PDF
Save The Zoo 20070127 Kouno
PDF
よわよわエンジニアがde:code 2020に感化されて新しくコミュニティを立ち上げてみた話
もちょブログ解析入門
cocos2d-xを勉強し始めるまで
夜トコ04:tumblrとは何か?
【LT用前編】Rancherでマルチクラウド をやってみた
非情勤司書という生(逝)き方 遠藤元康
MMySQL Router を監視しちゃうぞ! MySQL Casual Talks #12y sql casual talks #12 (1)
Save The Zoo 20070127 Kouno
よわよわエンジニアがde:code 2020に感化されて新しくコミュニティを立ち上げてみた話

What's hot (18)

PDF
Scalaを遊ぶ!会 参加者募集のおしらせ。
PDF
Unity assetevent
KEY
Sendagaya.rbのご紹介
PDF
1日で作るカジュアルゲーム、FlappyXXXXを作ろう
PDF
「攻城団」へのご協賛のお願い
PPTX
魔王の作り方2017
KEY
SNS 「github」で遊ぼう
PPTX
Word pressもくもく勉強会に出てからの変化について
PDF
佳作 仕事について 坂口結衣
KEY
アジャイルサムライ読書会札幌道場
PDF
【構想メモ】C97「同人作家が知っておきたい検索エンジンの知識」
PDF
コミュニティサイトを爆速で作成し、お手軽に運用する方法
PDF
ロリポップのWordPressをssl化した話
PDF
1年かけてgemを1つ作りました
PPT
Memcache Queue
PDF
カーリルとデザイン
KEY
OSC 2012 HIROSHIMA
PDF
CUIのツールを1行で Web GUI化する ライブラリを作ってみた
Scalaを遊ぶ!会 参加者募集のおしらせ。
Unity assetevent
Sendagaya.rbのご紹介
1日で作るカジュアルゲーム、FlappyXXXXを作ろう
「攻城団」へのご協賛のお願い
魔王の作り方2017
SNS 「github」で遊ぼう
Word pressもくもく勉強会に出てからの変化について
佳作 仕事について 坂口結衣
アジャイルサムライ読書会札幌道場
【構想メモ】C97「同人作家が知っておきたい検索エンジンの知識」
コミュニティサイトを爆速で作成し、お手軽に運用する方法
ロリポップのWordPressをssl化した話
1年かけてgemを1つ作りました
Memcache Queue
カーリルとデザイン
OSC 2012 HIROSHIMA
CUIのツールを1行で Web GUI化する ライブラリを作ってみた
Ad

More from Masahiko Hashimoto (20)

PDF
OSSかな漢字変換『Egoistic Lily』の紹介&今後の展望
PDF
DNNを使用した新しいかな漢字変換『EgoisticLily』 その仕組みとは?
PDF
自作かな漢字変換「Genji」をつくったよ
PDF
BrowserMob-Proxyのお話
PDF
DeepLearning入門以前
PDF
かな漢字変換ソフト「Genji」をつくってみた
PDF
あひるに焼かれた話と今後のおーぷん万葉について
PDF
ホットな日本語入力技術のお勉強。〜 OSC 2016 Hamanako 編 〜
PDF
おーぷん万葉プロジェクトとは
PDF
C++アプリをCmakeとEclipseで開発するお話
PDF
おーぷん万葉プロジェクトの進捗とIzumoのその後
PDF
ホットな日本語技術の(ちょっとした)お勉強。
PDF
京都発祥日本語入力「FreeWnn」は(今度こそ)どこまで賢くなれるか?
PDF
TrieとLOUDS??
PDF
C言語なWebSocketの遊び方。
PDF
アヒルヤキを変換してみよう
PDF
Nginxで日本語入力を遊んでみよう!
PDF
続・Cannaをフォークしてみた
PDF
Cannaをフォークしてみた
PDF
秘伝:クラウドに開発環境をえいっ!と構築する方法
OSSかな漢字変換『Egoistic Lily』の紹介&今後の展望
DNNを使用した新しいかな漢字変換『EgoisticLily』 その仕組みとは?
自作かな漢字変換「Genji」をつくったよ
BrowserMob-Proxyのお話
DeepLearning入門以前
かな漢字変換ソフト「Genji」をつくってみた
あひるに焼かれた話と今後のおーぷん万葉について
ホットな日本語入力技術のお勉強。〜 OSC 2016 Hamanako 編 〜
おーぷん万葉プロジェクトとは
C++アプリをCmakeとEclipseで開発するお話
おーぷん万葉プロジェクトの進捗とIzumoのその後
ホットな日本語技術の(ちょっとした)お勉強。
京都発祥日本語入力「FreeWnn」は(今度こそ)どこまで賢くなれるか?
TrieとLOUDS??
C言語なWebSocketの遊び方。
アヒルヤキを変換してみよう
Nginxで日本語入力を遊んでみよう!
続・Cannaをフォークしてみた
Cannaをフォークしてみた
秘伝:クラウドに開発環境をえいっ!と構築する方法
Ad

Recently uploaded (11)

PPTX
生成AIとモデルベース開発:実はとても相性が良いことを説明します。まあそうだろうなと思われる方はご覧ください。
PDF
ココロ分解帳|感情をやさしく分解し自分と他者を理解するためのモバイルノートアプリ
PDF
20250826_Devinで切り拓く沖縄ITの未来_AI駆動開発勉強会 沖縄支部 第2回
PPTX
Cosense - 整えずして完全勝利!Cosenseが他のwikiツールと違う理由
PDF
R-SCoRe: Revisiting Scene Coordinate Regression for Robust Large-Scale Visual...
PDF
Working as an OSS Developer at Ruby Association Activity Report 2025
PDF
Yamaha DT200WR Real Enduro ENGINE CYLINDER TRANSMISSION
PDF
翔泳社 「C++ ゼロからはじめるプログラミング」対応 C++学習教材(三谷純)
PDF
20250823_IoTLT_vol126_kitazaki_v1___.pdf
PDF
Geminiの出力崩壊 本レポートは、Googleの大規模言語モデル「Gemini 2.5」が、特定の画像と短文入力に対して、誤った地名を推定し、最終的に...
生成AIとモデルベース開発:実はとても相性が良いことを説明します。まあそうだろうなと思われる方はご覧ください。
ココロ分解帳|感情をやさしく分解し自分と他者を理解するためのモバイルノートアプリ
20250826_Devinで切り拓く沖縄ITの未来_AI駆動開発勉強会 沖縄支部 第2回
Cosense - 整えずして完全勝利!Cosenseが他のwikiツールと違う理由
R-SCoRe: Revisiting Scene Coordinate Regression for Robust Large-Scale Visual...
Working as an OSS Developer at Ruby Association Activity Report 2025
Yamaha DT200WR Real Enduro ENGINE CYLINDER TRANSMISSION
翔泳社 「C++ ゼロからはじめるプログラミング」対応 C++学習教材(三谷純)
20250823_IoTLT_vol126_kitazaki_v1___.pdf
Geminiの出力崩壊 本レポートは、Googleの大規模言語モデル「Gemini 2.5」が、特定の画像と短文入力に対して、誤った地名を推定し、最終的に...

Dockerいろいろ使って思うこと