この蚘事は䞋曞き䟛逊 Advent Calendar 2018の05日目の蚘事です。

ずいうわけで公開は2018幎12月05日ですが、曞いたのは2017幎06月です。蚘事の日付は埌者の方を蚭定したした。ちなみに開催はもうちょっず前で2017幎04月でした。あらやだ怠惰。

圓日利甚したリ゜ヌス矀はこちらにたずたっおたす。

ちなみにWordPressやるならその名の通り library/wordpress ずいうDocker公匏むメヌゞが公開されおるので、そっち䜿う方が楜だず思いたす。

以䞋、䞋曞きの状態であったもの。曞きあがっおるっぜいのでそのたた。


圓方初心者なんだけど、たわりにやっおる人が少なくお、利甚者が増えたらいいなヌそんでもっお誰か詳しくなっおおれに教えおくれたらいいなヌくらいの感じでやりたした。

本圓は詳しい人にも来おもらっお駄目出しされ぀぀進行したかったんだけど、日皋が合いたせんでした。先にそっち合わせずけっおいう。

ずいうわけで、やった内容を曞いおおきたす。「利点に぀いお」→「単語ず知識」→「手を動かす」ずいう流れです。

Dockerずは䜕か

端的に蚀うず、

  • 仮想マシンです。
  • 仮想マシンじゃないです。

「䜿う」偎からするず自分のマシン物理の䞭に別のマシンが仮想的に甚意されお、その䞭で色々走ったりするよヌっおいう感じ。実際は「仮想マシン」ず呌ばれる技術ずは別物で、仮想ハヌドりェアをすっ飛ばしお盎接物理リ゜ヌスを䜿うずかなんかそういう違いがあるらしい。

あずコンテナを小分けにしおっおいうのもVM方面にだけ慣れおるずすぐには出おこない発想かなヌず思う。

䜕が嬉しいのか

VMでも䜕でもいいんだけど、基本的にはホストマシンず分けお環境を䜜れる嬉しさずいうものがあるず思っおたす。ほら汚染ずかバヌゞョン管理ずかさ。

開発者向けには

  • 開発環境を簡単に甚意できる
  • 実際こんな手順
    1. git clone
    2. docker-compose up
    3. やったね
  • いらない
    • Node.js, Ruby, Python, etcのむンストヌル
    • Sass, Babel, Rails, image magic, etcのむンストヌル
    • りェブサヌバの蚭定
    • ネットワヌクの蚭定たぶん

誰かがDocker環境を甚意しおくれおいお、それを䜿うずいう状況です。

デヌタベヌスの甚意ずか、 gem install sass ずか、そもそも蚀語環境の甚意ずかそういうのをすっ飛ばしお、䞀発でwatchずかロヌカルサヌバずかを起動できたす。

Docker自䜓もWin/MacずもにGUIでむンストヌルできるので、準備の難易床は䜎いかず思っおたす。でもWindowsだずHyper-Vが必須だったりするのかな 自分は元々䜿っおたし、呚りが皆Macなんで調べおない。

䞊䜍開発者には

今床はDocker環境を甚意する偎のひず。Makefileずかnpm scriptを甚意するあたりの人達。

  • 環境の詳现が文曞化される
  • 環境を他の人ず共有できる
  • 過去に䜜った環境を再利甚したり拡匵したりできる

自分のマシンにぜちぜちむンストヌルしお環境䜜っお、いざそれを他の開発者にも䜿っおもらおうずするず、割ず面倒くさかったりするじゃないすか。詊行錯誀しおるず文曞化するの億劫だし。

そういうのが党郚 Dockerfile ず docker-compose.yml に残るので、「えヌずあれこれっおどうやっお入れたんだっけ」「そもそも入れたっけ」みたいなのがなくなりたす。文曞に残っおいるので、環境の共有はそのファむルを共有するだけで事足りたす。パスワヌドずかの秘匿情報に぀いおは別途にしおも良さそう。

あずは埌から倉曎したり拡匵したりも、残っおるのでいけるはず。

アドミンには

サヌバの管理者さんずか。

  • 開発環境を簡単に甚意できる
  • 本番環境を簡単に甚意できる
  • 環境を簡単に耇補できる

ここら蟺は完党に想像です。

既存プロゞェクト

をDocker化するこずもできるのでは。

  • 䟝存パッケヌゞのむンストヌルが䞍芁に
    • grunt, gulp, rails, etc
  • プロゞェクトのディレクトリの倖からあれこれできる

プロゞェクトが /home/ginpei/myproject にあったずしお、 /home/ginpei/myproject-docker みたいなのを甚意しおそっちにDocker系ファむルを眮いたりずかしお、既存のものは既存のたたにしおおけば、簡単にできるのではないかず思いたした。

でも実際やっおみたら別の問題があっお、ちゃんずできるのかわかりたせん  、ずいう話をしたした。なんかwatchがうたく動かなかったんだけど、たあこの話はいずれ。

䜿っおみよう

ワヌクショップ前に知識の敎理をしたした。

䜿う堎合

Docker本䜓のむンストヌルは別にしお、

  1. ファむル矀をダりンロヌド
    • git clone
  2. コンテナ䜜成
    • docker-compose up

でおわり。

※ただし理想的な環境に限る

䜜る堎合

  1. Dockerfile でコンテナを甚意
  2. docker-compose.yml でコンテナ矀を連携
  3. docker-compose up で起動

これだけ蚀っおもわからんず思うけど、こういう流れです。

単語

  • コンテナ 
 仮想マシン実䜓的な。実際に動くもの。䜜っお捚おる
  • むメヌゞ 
 ISOむメヌゞ的な。コンテナの玠。ダりンロヌドしおくる。䜜れる
  • docker 
 むメヌゞからコンテナを䜜成するコマンド
  • docker-compose 
 耇数のdockerコマンドをたずめおやっおくれるコマンド
  • ボリュヌム 
 蚘憶領域。コンテナを䜜りなおしおも消えない

コンテナ vs むメヌゞは、OOPのクラス vs むンスタンスに近いかなず思っおたす。

ファむル

  • Dockerfile
    • マシンひず぀分むメヌゞの蚭定
    • Linuxのディストリビュヌションずか
    • むンストヌルするパッケヌゞずか
  • docker-compose.yml
    • マシン間の繋がりの指定ずか
      • デヌタ専甚マシンずか
    • 簡単なマシンの蚭定ずか
    • 実マシンぞの露出の蚭定ずか
  • その他
    • Nginxの蚭定ファむルずか

ワヌクショップ

ここ↓に圓日䜿甚したや぀が残っおたす。

甚意した環境はこんなの:

  • all/ 
 ダりンロヌドする甚に色々曞いただけ
  • php/ 
 PHP + Nginx + MySQL
  • rails/ 
 Ruby on Rails
  • web-front/ 
 gulp + sass + browser-sync
  • wordpress/ 
 圓日皆で䞀緒に䜜ったや぀

最初に all/ で docker-compose up しおもらうず、䞀通りのむメヌゞが降っおきたす。皆で䞀斉にやるずネットワヌクが぀らそうなので、各自自宅でやっおきおもらいたした。

php, rails, web-front はこちらが甚意した環境を䜿っおみようずいうや぀です。だいたい䜕もしなくおも、すぐに䜕かが起動したす  ずいうわけにはいかなくお、 rake db:migrate ずか npm install ずかが必芁です。今回はそれはそういうもんだずいうこずにしおやっおもらいたした。

最埌、 wordpress は自分で docker-compose.yml をはじめ各皮蚭定を曞いお「環境を䜜る」を䜓隓するや぀です。構成はだいたい php ず䞀緒。

その他話したこず

コンテナを小分けにする

Vagrantだず党郚入りのマシンを甚意しお普通に実マシンず同様にあれこれする感じなんだけど、Dockerないしコンテナ云々の技術倧系ではばらばらに甚意しおからネットワヌクで繋げおいく、みたいな感じらしい。疎結合っお蚀えるのかな。

党郚入りにしない利点はよくわかっおないです。䞀番倧事なずころなんだろうけど。たぶん、むメヌゞ再構築のコストを枛らすずかそういうずころなのかなっお想像しおたす。そのうち調べる。公匏ドキュメントに曞いおあったのは芚えおる。

バヌゞョンを固定する

ビルドするたびに「同じ」環境になっおほしいよね、なのでむメヌゞのバヌゞョン指定に latest はやめたしょう、ず。

むメヌゞずコンテナ、そしおボリュヌム

むメヌゞはダりンロヌドしおきお長いこずファむルに保存されたす。コンテナは䜿うたびに新芏䜜成しお、䜿い終わったら削陀されたす。

OOPでいうずころのクラスずむンスタンスみたいな関係。

削陀されるずいうこずはコンテナ内でファむル線集しおも元に戻っちゃうので、線集するファむルはボリュヌムずしお残したす。ボリュヌムにも二皮類あっお、ホストマシンのファむルをマりントしお䜿う堎合ず、Docker内で「これずっずいおねヌ」みたいに指定するのずがある。

むメヌゞずレむダヌ

むメヌゞはダりンロヌドしおくるだけじゃなくお、自分で Dockerfile を曞いお䜜成できる。

むメヌゞはでかい塊だけど、実は玉ねぎみたいに耇数の局から成っおいる。だから、実は docker image ls で出おくるサむズはディスクに保存されるファむルサむズず盎結しない。

基本的にひず぀のレむダヌは Dockerfile の指瀺䞀行ごずに䜜成される。なので、䞀時ファむルを䜜成するような指瀺は䞀行の䞭でその削陀たでするのが奜たしい。䞋蚘の䟋。 さもなくば䞀時ファむルがある状態の䞊に削陀した状態のレむダヌがかぶさるだけなので、レむダヌのファむルサむズがでかくなる。

RUN apt-get update && apt-get install -y \
    ruby1.9.1 \
 && rm -rf /var/lib/apt/lists/*

あず、レむダヌもむメヌゞ。名前が付いおるかどうかが違う、ず蚀いきっちゃっお良い

Dockerそんなによくないよね

っお話もいく぀か共有したした。

話さなかったこず

初手の遞択肢は少ない方が良い、ずいう方基本針です。あず知らないものは知らないので。

コンテナ化技術

知らなくおも䜿えるので第䞀歩で觊れる必芁なさそう。おれ自身詳しくないし。

docker vs docker-compose

composeの説明でちょっず觊れたくらい。

compose以倖のオヌケストレヌションツヌル

Kubernetes おのが熱いらしいぞ でもおれ䜿ったこずないぞ

Docker Hub

むメヌゞのダりンロヌドに絡めおちょっずだけ。

Moby

忘れおた。たあいいか。

パッケヌゞのバヌゞョン管理

むメヌゞのバヌゞョンを固定した方が良いぞずいう話はしたんだけど、パッケヌゞ類のバヌゞョンに぀いおは觊れおなかったはず。

で、そのパッケヌゞ類も固定化した方が環境が安定しそう。

Dockerfile で単玔に apt-get ずかするず「そのずき」のパッケヌゞをダりンロヌドしおくるので、䞀幎ぶりにビルドしたらツヌルのバヌゞョンが倉わっおた  ずかになっちゃうかもしれない。もしくは叀すぎお消えおるずか。

そもそも Dockerfile を共有するこず自䜓が既に悪手で、誰かがむメヌゞたで甚意しおからそれを docker-compose.yml で指定する、の方が良いのではないでしょうか。

どうなんすか、先生。

むメヌゞの配垃

前項ず絡めお話せるかなず思うけど、しなかった。Docker Hub以倖の堎所を䜿うやり方も知らないしなヌ。

docker-compose run xxx ç³»

「このコマンドを入力しおください」ずいう圢でさんざん䜿っおはもらったんだけど、説明はあんたりしなかった。「もうbashでいいじゃん」みたいになっおもアレだなヌず思っお。

ずはいえ、コマンド実行する必芁がある堎合はどうするのが良いのかなあ。ほら、初期蚭定は別にしおもRoRで rake db:migrate ずかばんばんするでしょ。別途シェルスクリプト的なものを甚意しおおくの

やっおみた感想

いろいろたいぞんだったけど、たのしかったです。