仮想環境を作成するときには、以下のようなフローが存在します。
- ubuntu等のベースとなるOSをインストールする
- パッケージリストの更新(apt-get update等)
- nginxなどのミドルウェアのインストール
- nginxをデーモンとして起動するコマンドの実行
これらのフローを毎回手動で実行すると、めんどうですし、ミスに繋がります。
しかし、Dockerfileを利用すると、上記のフローを1つのファイルにまとめ、そのファイルを元にDocker imageを作成することができるため、迅速かつ安全にオリジナルの仮想環境を作成することができます。
また、そのDockerfileを他の開発者やサーバーにシェアすることにより、同じ仮想環境をすべてのマシンで立ち上げることが可能です。
今回は、そんなDockerfileについて、まとめます!
DockerfileからDockerイメージをbuildする
Dockerfileは、記述を元にDockerイメージを作成するためのファイルなので、簡単な例を使って、Dockerfileを元にDockerイメージをbuildする方法をご紹介いたします。
適当なディレクトリで、Dockerfileというファイルを作り、以下の内容を記述して下さい。
Dockerfile
1 |
FROM nginx |
FROM命令は、元となるDockerイメージを指定する構文で、今回はnginxイメージを元にDocker imageを作成する記述になっています。
そして、上記のDockerfile
のあるディレクトリで、以下のコマンドを実行すると、Dockerfileからimageを作成することができます。
1 |
docker build -t test:1.0 . |
【-t test:1.0】は、-tオプションを使って、イメージ名(test)とタグ名(1.0)を指定しています。
最後の【.】は、Dockerfileが存在する位置を表しています。
上記コマンドを実行したら、以下のコマンドを実行して、ホストマシン上に存在するDocker Imageを確認してみましょう。
1 2 3 4 |
docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest 9beeba249f3e 5 days ago 127MB test 1.0 9beeba249f3e 5 days ago 127MB |
このように、nginxイメージとtestイメージが存在することがわかります。
- testイメージはDockerfileから作成されたImage
- nginxイメージはtestイメージを作成するためにDocker Hubからインストールした公式イメージです
ともに、nginxイメージを元にDockerコンテナを作成するだけのDockerイメージですので、IMAGE IDが同じになっています。
buildして作成されたDocker Imageからコンテナを作成する
Dockerfileから作成されたDocker Imageを元にDockerコンテナを立ち上げるのはとても簡単です。
1 |
docker container run -p 8080:80 test:1.0 |
これを実行するだけで、作成したtest:1.0イメージを元にDockerコンテナが立ち上がります。
このDockerコンテナの正体は、localhost:8080で接続できるnginxなので、ブラウザからアクセスすることができます。
複数レイヤーのimageをもつDockerfileを作成する
FROM命令にnginxを指定したDockerfileからDockerイメージを作成しました。
次は、複数のレイヤーをもつimageを作成するためのDockerfileを作成します。
Dockerfileは記述された命令の数だけイメージを作成し、それをまとめたDockerイメージをbuildすることができます。
Dockerfile
1 2 3 4 5 |
FROM ubuntu RUN apt-get -y update RUN apt-get install -y nginx EXPOSE 80 CMD 【"nginx", "-g", "daemon off;"】 |
上記のDockerfileをbuildして作成されたimageをtest:1.0だとすると、
1 |
docker container run -p 8080:80 test:1.0 |
コマンドを実行することで、Ubuntu上で動作するnginx環境にlocalhost:8080からアクセスができるようになります。
これは、Dockerfileに記述されたとおりに仮想環境が作られたおかげで、実行されている動作を1行ずつ説明すると
- FROM命令:Docker hubのubuntuイメージをベースイメージにする
- RUN命令:パッケージリストの更新
- RUN命令:仮で構築されたubuntuコンテナ上でnginxをinstallする
- EXPOSE命令:80番ポートを公開する
- CMD命令:コンテナ起動時に実行するコマンド(nginxを起動)を定義する
という処理が行われています。
このようにして、Dockerfileを使用すれば自分オリジナルの仮想環境を作成することができます!
その他のよく使う命令
以上で、DockerfileからDocker imageを作成する方法をご紹介いたしました。
以下では、Dockerfile内でよく使う命令を紹介します!
ENV命令
ENV命令は、環境変数を設定したいときにつかいます。
1 |
ENV TZ=Asia/Tokyo |
タイムゾーンを東京に設定したい場合は、このように記述します。
ADD命令
ホストマシンのファイルをDockerイメージにコピーするときに使用します。
1 |
ADD index.html /usr/share/nginx/html/ |
上記命令を実行することで、index.htmlファイルをnginxのhtml公開ディレクトリに配置することができます。
RUN命令とCMD命令
RUN命令とCMD命令は共に頻繁に使用する命令ですが、動作が似ているため、両者の違いを以下の記事にまとめておきました!
DockerfileのRUN命令とCMD命令の違い【Docker】