【Dockerfileとは】イメージ作成(image build)や構文について【チュートリアル】

仮想環境を作成するときには、以下のようなフローが存在します。

  • ubuntu等のベースとなるOSをインストールする
  • パッケージリストの更新(apt-get update等)
  • nginxなどのミドルウェアのインストール
  • nginxをデーモンとして起動するコマンドの実行

これらのフローを毎回手動で実行すると、めんどうですし、ミスに繋がります。

しかし、Dockerfileを利用すると、上記のフローを1つのファイルにまとめ、そのファイルを元にDocker imageを作成することができるため、迅速かつ安全にオリジナルの仮想環境を作成することができます。

また、そのDockerfileを他の開発者やサーバーにシェアすることにより、同じ仮想環境をすべてのマシンで立ち上げることが可能です。

今回は、そんなDockerfileについて、まとめます!

DockerfileからDockerイメージをbuildする

Dockerfileは、記述を元にDockerイメージを作成するためのファイルなので、簡単な例を使って、Dockerfileを元にDockerイメージをbuildする方法をご紹介いたします。

適当なディレクトリで、Dockerfileというファイルを作り、以下の内容を記述して下さい。

Dockerfile

FROM命令は、元となるDockerイメージを指定する構文で、今回はnginxイメージを元にDocker imageを作成する記述になっています。

そして、上記のDockerfileのあるディレクトリで、以下のコマンドを実行すると、Dockerfileからimageを作成することができます。

【-t test:1.0】は、-tオプションを使って、イメージ名(test)とタグ名(1.0)を指定しています。

最後の【.】は、Dockerfileが存在する位置を表しています。

上記コマンドを実行したら、以下のコマンドを実行して、ホストマシン上に存在するDocker Imageを確認してみましょう。

このように、nginxイメージとtestイメージが存在することがわかります。

  • testイメージはDockerfileから作成されたImage
  • nginxイメージはtestイメージを作成するためにDocker Hubからインストールした公式イメージです

ともに、nginxイメージを元にDockerコンテナを作成するだけのDockerイメージですので、IMAGE IDが同じになっています。

buildして作成されたDocker Imageからコンテナを作成する

Dockerfileから作成されたDocker Imageを元にDockerコンテナを立ち上げるのはとても簡単です。

これを実行するだけで、作成したtest:1.0イメージを元にDockerコンテナが立ち上がります。

このDockerコンテナの正体は、localhost:8080で接続できるnginxなので、ブラウザからアクセスすることができます。

複数レイヤーのimageをもつDockerfileを作成する

FROM命令にnginxを指定したDockerfileからDockerイメージを作成しました。

次は、複数のレイヤーをもつimageを作成するためのDockerfileを作成します。

Dockerfileは記述された命令の数だけイメージを作成し、それをまとめたDockerイメージをbuildすることができます。

Dockerfile

上記のDockerfileをbuildして作成されたimageをtest:1.0だとすると、

コマンドを実行することで、Ubuntu上で動作するnginx環境にlocalhost:8080からアクセスができるようになります。

これは、Dockerfileに記述されたとおりに仮想環境が作られたおかげで、実行されている動作を1行ずつ説明すると

  1. FROM命令:Docker hubのubuntuイメージをベースイメージにする
  2. RUN命令:パッケージリストの更新
  3. RUN命令:仮で構築されたubuntuコンテナ上でnginxをinstallする
  4. EXPOSE命令:80番ポートを公開する
  5. CMD命令:コンテナ起動時に実行するコマンド(nginxを起動)を定義する

という処理が行われています。

このようにして、Dockerfileを使用すれば自分オリジナルの仮想環境を作成することができます!

その他のよく使う命令

以上で、DockerfileからDocker imageを作成する方法をご紹介いたしました。

以下では、Dockerfile内でよく使う命令を紹介します!

ENV命令

ENV命令は、環境変数を設定したいときにつかいます。

タイムゾーンを東京に設定したい場合は、このように記述します。

ADD命令

ホストマシンのファイルをDockerイメージにコピーするときに使用します。

上記命令を実行することで、index.htmlファイルをnginxのhtml公開ディレクトリに配置することができます。

RUN命令とCMD命令

RUN命令とCMD命令は共に頻繁に使用する命令ですが、動作が似ているため、両者の違いを以下の記事にまとめておきました!

DockerfileのRUN命令とCMD命令の違い【Docker】

 

ABOUTこの記事をかいた人

新卒でノマドワーカー(webデザイナー)として独立し、半年で月収100万円を達成する。その後、事務所を売却(バイアウト)したり、Youtuber(最高月間視聴回数109万回、チャンネル登録者1万人)をしたり、Openrecの公式配信者としてゲーム生実況をしたり、ベンチャー企業のCOOをしたり、パラレルキャリアを歩んできました。 2019年にミニマムライフコストを不労所得で稼げるようになったため、いまは、お金のことを考えずに、様々な企業でエンジニア修行をさせていただきながら、複数のメディアやアプリとweb制作事務所を運営しています。 趣味は株式投資(米国・日本株メイン)で、トレードを楽しむ日も多いです!