Slide 1

Slide 1 text

Dockerを触ってみよう Cloud Native Okayama #01

Slide 2

Slide 2 text

あなた誰? • 名前:金田 晃(HN) • 趣味: • 自宅サーバ、自宅インフラ • 自宅Docker • AWS、PHP、Ruby、etc… • 電子工作、基板づくり • ジャンク漁り • 機械の分解、故障診断と修理 • 所属: • 広島電子工作娯楽部 • えれくら! • 元PL/SQLで元AWSで元鯖缶

Slide 3

Slide 3 text

技術書典6に初出店してきました!! 143冊完売!!

Slide 4

Slide 4 text

Docker is 何?  Vagrantと何が違うの?  コンテナって何?JR的な奴?なんでコンテナなのにクジラなの?  調べてみたけど、BSDのJail?Solarisコンテナと何が違うの?  Dockerって止めたらデータも消えるんでしょ?そんなの役に立つの?  起動が早いらしい  なんで流行っているのか分からん。XAMPP最強じゃね?  コンテナで簡単にというけど、逆にカスタマイズどうするのさ。Vagrantだっ て山のように設定するぞ。  DockerのPHPとCentOSのPHPって同じなの?  CronとかFTPとかSSHとかいままで出来ていた事をするにはどうすればいいの?  セキュリティやパッチ当てもせずデフォ設定で動いてそれ大丈夫なん??

Slide 5

Slide 5 text

その気持ち、すごく良く分かるよ!!!

Slide 6

Slide 6 text

2016/09/03 某所発表スライドより

Slide 7

Slide 7 text

守・破・離という言葉があります。 守:まずは基本的なDockerの動きを見てみよう。カスタ マイズとかVagrantとかと比較せず、とにかく黙ってコピ ペで動かそう。ドキュメントを見ろ! http://docs.docker.jp/index.html 破:やってみて、いろいろ仮説を立ててみて、Qiitaなど を参考に発展させる 離:自分でDockerイメージを作ってみたり、DockerHub に上げてみたり、人に教えてみたりする。

Slide 8

Slide 8 text

とにかく、まずは触ってみましょう。 触って、動きを見てみましょう。 次に、動きを予測(仮説)しながら、動か してみる(証明)

Slide 9

Slide 9 text

Dockerをやるうえでとても重要な事 Dockerイメージ:コンテナアプリを動かすため のライブラリや設定をパック詰めしたHDDイ メージ。Dockerfileから生成される。 Dockerコンテナ:Dockerイメージをマウントし、 実際に動かした環境のこと。1つのイメージから 複数のコンテナを作ることができる。 ボリューム:Dockerコンテナ内での変更を保持 する場所。

Slide 10

Slide 10 text

イメージとしては・・・ Dockerイメージ:ゲームのCDROM。書き込み や変更はできない。ゲーム機というプラット フォーム上で動作する。 Dockerコンテナ:起動したゲーム。同じゲーム でもプレイ内容は異なる。 ボリューム:メモリーカードや内臓メモリ

Slide 11

Slide 11 text

CentOSあるある(架空の例です)  WordPressを動かすぞ! 標準リポジトリでPHP、MySQL、Apacheを入れる。 データベースを覗きたいな。 phpMyAdminを入れる PHPのバージョンが古いよ!MySQLが古いよ! RemiやRPMForgeなど外部リポジトリをググって入れる。 依存関係でガリガリ汚染される(この時はたいてい気づかない)  Railsやってみたいな。 ググってrbenvな環境を作る。 Gemのインストールでライブラリ依存でコケる。nokogiri辛い・・・・ 依存パッケージを消すと、PostfixやCronなどが消し飛んだ(涙  OSのセキュリティアップデート当てないとな。 以下略・・・

Slide 12

Slide 12 text

Dockerはゲームのソフトみたいなもの  一つのサーバ内に異なるディストリの、アプリが動く環境がパックされたものが動作する。 Docker(CoreOS) WordPress CentOS7の環境 四角いEC Cent6の環境 MySQL phpMyAdmin Ubuntu16の環境 Hyper-V

Slide 13

Slide 13 text

チュートリアルをする時間はないので・・ ここでは、Dockerに触ることを目的とし、とりあえ ずPHP公式コンテナを動かしてみましょう。 docker run -d -v "%cd%/web:/var/www/html" -p 80:80 --name okayama-php71 php:7.1-apache %cd%はコマンドプロンプトで相対パス 指定するため。LinuxやMacは多分 $PWDでいける・・と思う

Slide 14

Slide 14 text

チュートリアルをする時間はないので・・ 次に、PHP7.2のコンテナを動かしてみましょう。 DocumentRootは先ほどと共通にしているのがミソです docker run -d -v "%cd%/web:/var/www/html" -p 8080:80 --name okayama-php72 php:7.2-apache %cd%はコマンドプロンプトで相対パス 指定するため。LinuxやMacは多分 $PWDでいける・・と思う

Slide 15

Slide 15 text

このように、Dockerはカジュアルに誰かが作ったコ ンテナイメージを使って環境(コンテナ)を作るこ とができる。 でも、複数のコンテナ使うの面倒じゃない?? Docker-composeという仕組みがあるよ。

Slide 16

Slide 16 text

dockercompose dockercomposeは1つ以上のコンテナを作る定義を記述したもの。 (実際はかなり機能があるので、リファレンス参照のこと) docker run -d -v "%cd%/web:/var/www/html" -p 80:80 --name okayama-php71 php:7.1-apache version: ‘3’ services: php71: image: php:7.1-apache volumes: - ./web:/var/www/html ports: - 80:80 docker-compose.yml

Slide 17

Slide 17 text

docker-composeで書くとこんな感じ version: '3' services: php71: image: php:7.1-apache volumes: - ./web:/var/www/html ports: - 80:80 php72: image: php:7.2-apache volumes: - ./web:/var/www/html ports: - 8081:80

Slide 18

Slide 18 text

どうでしょうか?  ここまでで、PHPバージョンごとにアプリケーションのテストと かできそうな雰囲気ですよね? 実際には各種エクステンションを入れたりしないといけないの で、カスタムイメージを作る必要がある。 といってもさほど難しくはない。 (参考:https://bit.ly/2CIWXX5)  Dockerはカジュアルに誰かが作ったコンテナイメージを使って環 境を作ることができる。 構築が大変なアプリケーションをコンテナとしてパックすれば、 便利に使える! デモとしてRedmine、Jenkins、GitBucketとバックエンド のDB含め一気に構築します。

Slide 19

Slide 19 text

全てDockerコンテナです。

Slide 20

Slide 20 text

Dockerで難しいと思うところ  どのサイズでコンテナ化すればいいか悩む  基本1プロセス1コンテナらしいけど、それだと構成要素が増えすぎて管理が手間 だしなぁ・・・ 3つを超えたあたりからcomposerでも管理がカオス気味に・・  データコンテナってどの単位で作ればいいんだろう?  初期設計が難しい・・  Cronやiptablesやsyslogなど当たり前にできたことをどうすればいいのか?が悩む  Docker内にユーザを作ったりSSHキーを入れたりするのはどうなんだろう???  メモリ消費やディスクIOが多い気がする。割とサクッと死ぬので実運用はちょっと怖い。  ログを監視して何かアクションを起こす系はどうするのがいいんだろう??

Slide 21

Slide 21 text

まとめ  開発環境など一時的な環境をサクッと作るにはDockerはおす すめ。  環境をゲームのソフトのように扱える。  コンテナ内に永続的データは保持できないので、サーバ内に 状態を持たせるなど永続的データとそうでないものの区別を する必要がある。 サーバの冗長構成をとる際には必須の考え方なので、開発 者に意識させるのにちょうどいい(ぇ  一つのサーバに何でもやらせてたのとは勝手が違うので、構 成や設計には注意が必要。