Docker がよく分からないまま取り残されてしまったそこのキミ!
ブートキャンプへようこそ!!
ビクッ
前回の記事が謎の好評を頂いたので、まさかの第二弾です。
でも隊長のキャラを維持するのは思いのほかキツいので、今日は普通にやります。
めっちゃ過酷なのかと思ってら、親切丁寧な内容だった。
— 紅茶 (@afternoonteeee) January 25, 2021
※ 参考: 前回の記事
本日のミッション: Dockerfile を書いてみよう
今日は、Dockerfile という設定ファイルを書いて、Docker イメージを作ってみよう。
ぉぉぅ。
前提知識: イメージとコンテナ
あ、ところで何の説明もなく Docker イメージという言葉を使っているけど、大丈夫?
一応大丈夫。
イメージとコンテナは、クラスとインスタンスの関係に似ているという理解。
さすがアプリケーションプログラマ。
どうしても最初は抽象論っぽく感じる人が多いんだけど、既知の概念と対応させると理解しやすいよね。
うん。
Docker イメージの作り方は2通り
Docker イメージは、既存のコンテナから作る方法と、Dockerfile から作る方法の2通りがあるのだ。
一方、Dockerfile からイメージを作れば、ベースとなるイメージに対してどのような変更を加えたかが分かる。
後からさらに変更を加えたい場合も、Dockerfile の必要箇所を編集するだけで済むんだ。
Dockerfile の方がいいってこと?
ケースバイケースだけどね。
でも、Dockerfile から イメージの作り方を知っておくのはよいことだよ。
ハンズオン
イメージに含めるファイルを作る
ここに index.html と Dockerfile を作る。
とりあえず nano か vi を使おう。
じゃあとりあえず vi で。
index.html
<html> <body> <div>Hello, World</div> </body> </html>
Dockerfile
FROM httpd COPY index.html /usr/local/apache2/htdocs/
HTML はいいとして、Dockerfile は何が書いてあるの?
今回は2行だから分かりやすいと思う。
ざっくりこんな感じ。
ふむ。
で、2行目は、「作業フォルダにある index.html を、Apache のドキュメントルートにコピーしてね」という意味。
作業フォルダに無いファイルを、コピー元に指定することはできない。
イメージに含めたいファイルは、前もって作業用フォルダにまとめておく必要があるということか。
そう。
ls
コマンドで、index.html と Dockerfile があることを確認しておこう。
docker build でイメージを作る
これで準備は完了なので、docker build コマンドを使ってイメージを作ってみるよ。
$ docker build -t myhelloworld .
おk
ちなみにこのコマンドの意味はこんな感じ。
-t
オプションでイメージ名myhelloworld
を指定している。
これで Docker イメージができたの?
うん。
docker image ls
コマンドで確認できるよ。
なるほど、myhelloworld
がいる……。
docker run でコンテナを起動する
せっかくだから動かしてみるか。
docker run
コマンドを叩いてみよう。
$ docker run -dit --name hello -p 8080:80 myhelloworld
……長いよ。
長いね。
hello
という名前をつける8080
番ポートを、コンテナの80
番ポートに結びつけるオプションの指定のところで、「-
」が1個だったり2個だったり統一されていない気がするのですが……?
まぁそこは、ぶっちゃけわびさびの世界ですな。
なんとなく緩い基準はあるっぽいのだけど。
-p
ってなにもの?
ブラウザを開いて、コンテナを動かしているホストの IPアドレス:8080 にアクセスしてみよう。
ぉぉ。
httpd のコンテナは、80
番ポートで通信を待ち受けているんだ。
-p 8080:80
と指定すると、ホストの8080
番ポートに対する通信が、そのままコンテナの80
番ポートに透過されるようになる。
ふむ。
まぁそこは追い追いですな。
とりあえず今日のミッションは以上です。
お疲れ様でした。
おつかれしたー(舐めプ
反省会
そもそも、こんなことして何が嬉しいんだっけ。
一番大きな動機は、開発環境の構成をそのまま本番環境に持っていけることだと思う。
開発環境で正常動作していたのに、なぜか本番環境で動かなくなるとか、あるあるだよね。
笑い事じゃないけど。
あと、実際に運用する段階でも嬉しいことはあるよ。
例えば、Web サイトを運営していたら、予想外にアクセスが急増したとしよう。
そういえば去年、シャープの EC サイトにアクセスが集中してダウンしたね。
そんなとき、同じような構成のサーバを新しく立てて、負荷分散することがあるんだ。
スケールアウトというのだけど。
はい。
Docker イメージがあれば、簡単に構成を複製できるよね。
あぁなるほど。
とりあえず、Docker イメージづくりの基本はたったこれだけ。
❶ 作業フォルダを作る
❷ イメージに含めたいファイルを集める
❸ Dockerfile を書く
❹ docker build
コマンドを叩く
なんかできそうな気がしてきた。
まぁがんばってください。
つづく(かもしれない)