8月4日(土)、もくもく寺というグループが主催するDockerハンズオンに参加してきました。
わたしが所属する会社でも、Dockerは日常的に使われています。ディレクタのわたしは実際に触ることはないものの、なんか「環境構築」とか「環境立ち上げて〜」とかって言葉で聞いてもイメージしづらいし、実際に触ってみるのが一番!という気持ち半分、あわよくばDocker使えるようになってそっち(制作・開発側)に…みたいな気持ち半分…?!で参加してきました。
※2018/8/11 ご指摘をいただき、一部修正しました。にしきさんありがとうございました!
Dockerについて、学んだポイント
ハンズオンは2部構成で、1部が初級(そもそもDockerとは何か、実際にDockerを触ってみよう)で2部が中級(Dockerfileを書いてみよう)となっていました。特に2部に関しては、もともと開発バリバリやっていてコマンドラインも使いこなしてて…という方が、「Dockerはまだ使ったことないからこの機会に勉強してみよう!」という雰囲気だったように思います…(つまりわたしにはレベルが高かった、よく考えたら思いきった飛び込み方をしたものだ、と思いました 笑)
ですが細かい技術的なことはさておき、Dockerがどんなもので、どんな仕組みでどんな設定で動くのか、実際に手を動かした分実感を持って理解ができたので、参加して良かったハンズオン!
以下、わたしが理解した範囲で学んだことをまとめていこうと思います!
Dockerとは何か?
これはもう、初級編の講師を担当された湊川あいさんの「マンガでわかるDocker」を読んでいただくのが早いです!Web制作、Git、Google Analyticsの「マンガでわかる」シリーズでお馴染みの湊川さんですが、Dockerもほんと分かりやすかった…
と言ってしまうとブログに書くことがなくなってしまうので(笑)、マンガの内容と当日の講義を振り返りつつ、簡単にまとめてみようと思います。
「Dockerってなに?」の問いに対しては、「エミュレータみたいなもの」という説明が分かりやすかったです。PC内にゲーム機を立ち上げてプレイしたり、手元に特定のOS・バージョンの実機がない場合に仮想のマシンをPC内で起動して検証したりする、あれです。
あるシステムやWebサイトの開発にあたっては、そのシステム・Webサイトを動かすのに必要なアプリケーションが入っている開発環境が必要になります。Dockerでは、必要なアプリケーションを入れた「コンテナ」と呼ばれるものを用意し、それを起動すると開発環境が立ち上がるので、その環境の中で開発ができます。
同じコンテナを使えば、複数人で開発しても「今作っているこのサイト、先輩のPCだと動くのにわたしのPCだと動かない!」とならないし、ローカルと同じDockerコンテナを本番サーバに入れれば、「ローカルでは上手く行ってたのになんで本番では動かないの?!」とならない。
また、開発中のシステム・WebサイトのDockerfileやイメージ(後述)さえあれば、誰が開発に加わっても同じ開発環境があっという間に作れます。
複数のシステム・Webサイトを開発していて、それぞれ必要なアプリケーションやそのバージョンが違う、という時にも、それぞれの開発環境用のコンテナを用意しておけば、すぐに切り替えができます。便利!
Dockerを使うには?
まずはここから…
- Dockerをインストールする
- Dockerクライアントを起動する
- コマンドラインで指令を出す
3のコマンドについての詳細は省きますが、ハンズオンでは
- Docker Hubからpullしてきたイメージを使用して、コンテナを起動する
- Dockerfileをビルドしてできたイメージを使用して、コンテナを起動する
- 今までに使用したイメージやコンテナ、現在起動中のコンテナを確認する
といったことを実践しました。
Docker Hubとは、様々な人が作成したDockerイメージが公開されているサイトです。GithubのDocker特化版みたいな。ここから、使いたいものをpullしてきて使うことができます。
また、Dockerfileとイメージ、コンテナという単語に対して、それってそもそも何なの?どういう関係?どう違うの?と疑問が湧き上がってきましたが、
Dockerfileをbuild→Docker imageが出来上がる
Docker imageをrun→Docker containerが生成され、起動する
これが理解でき、とてもスッキリしました!
Dockerfileは、コンテナに必要なアプリケーションのインストールコマンドなどを書いておくものです。
もう少し具体的に説明すると、作成元となるイメージの指定(例えば:ハンズオンではalpineというOSのイメージを使用していました)をして、そのイメージに書かれたコマンドを指定して実行させたり。Dockerfile内に記述したコマンドの実行先を指定したり。
使用できる指令は、リファレンスにまとまっています。全部英語ですが…
こうして作成したDockerfileをビルド($ docker build)すると、ファイル内に記述した指令に基づいてイメージが作成されます。コマンドが実行されるごとに、ファイルが上に積み重なっていくのを想像してください。
出来上がったイメージを$ docker runすると、コンテナが生成されて起動します。
Dockerfileを作るという作業は、どちらかといえばバックエンド寄りの知識が必要な領域のようです。今回、2部はDockerfileを作成してみるという内容でしたが、私は途中からコピペ→ビルドを繰り返すことすらままならなくなり…
講師のyouchanさんは難しい内容でも噛み砕いて説明してくださったので、概要はスッと入ってきたものの、実際のコマンド・コードを打つとなるとどうにも…でした。
もっと自分がレベルアップした日にはいつか。。。
というわけで、ハンズオンではもっと具体的なDockerfileの書き方や活用の仕方まで踏み込んで教えていただきましたが、わたしのまとめはここまでにします。
ハンズオンの良さ
何はともあれ、今回ちょっと(いや、かなり)背伸びをしてDockerfileを書くところまで自分の手で体験できたことで、Dockerの理解が深まったのではないかと思っています。
ハンズオン、という形式の勉強会に参加するのは実は今回が初めてでした。一人で、本を見ながら、というスタイルで新しい知識や技術を身につけることが多いですが、ハンズオンも良いな〜と思いました。
特に、
- 困ったらすぐ助けを呼べる
- まとまった時間集中して、一定の知識量・作業量を獲得・確保できる
- 本のように視覚(文字)だけでなく、講師の方の説明を聴きながら手を動かすので、より得られる情報量が多く理解が早い
という点がありがたかったです。
ついて行けていない私を察知して(もはや自ら助けを求める余裕すらなかった←)何とか追いつけるようにサポートしてくださったスタッフのM.Kさん(実名出して良いのかわからないのでイニシャルで)には頭が上がりません。。。
また、同じ参加者なのに助けてくださったゆうきゃんさん(たまたま隣の席になったがために…)、この場をお借りしてお詫びと御礼を申し上げますm(_ _)m
いつか、わたし自身が他の方に同じことができるようになると良いなと思って勉強します。
兎にも角にも、Dockerという初めて触れるものを学ぶ場として、とても良い機会と時間をいただきました!
まとめ
マンガを読んで予習こそしていたものの、当日初めて触ったDocker。半日のハンズオン形式でかなり理解が深まったので、次はぜひ実践の場で使ってみたいです…!
ディレクタとしても、エンジニアがどんな方法でどんなツールを使っているのか具体的に中身を知ることは、実装者とのコミュニケーションや制作物に対する理解につながると思っています。
今回Dockerハンズオンを企画してくださったもくもく寺スタッフのみなさま、講師のおふたり、素敵な勉強会をありがとうございました!