こんにちは、まゆみです。
Dockerに関する記事をシリーズで書いています。
今回の記事では、
- Dockerfileの概要
- Dockerfileの作り方
に焦点を置いて書いていこうと思います
Dockerfileについての初めての記事になりますので、表面的な内容のみを扱って書いていきますね。
ではさっそく、はじめて行きます。
#Dockerfile とは?
第一回目の記事では、他のエンジニアが書いてくれたDockerfileをDocker hub から引っ張ってきて、Docker Imageを作ることを紹介しました。
今回の記事では、他のエンジニアが書いたfile ではなく、自らDockerfileを書いていきます。
上記のイラストでは、一番左にある黄緑色の『Dockerfile』と書いてあるところですね。
Dockerfileとは、Docker Imageの設計図となるものです。
では、実際にどのようにその設計が書かれているのか、Docker hubにあるDockerfile の中身を見てみましょう
##実際のDockerfile の中身は?
Dockerfileはどれも同じようなパターンで書かれていますので、まずDocker hub にあるubuntuのDockerfileの中身を見て、Dockerfile のパターンに慣れてみましょう
Dockerfile の書き方のパターンはざっくり上のようになります。
大文字でコードの文頭に書かれているのが、『Instruction』と言われるもので、何をするのかの指示になります。(それぞれのInstructionについては後で、一つづつ詳しく解説します)
その後に続くのが『Argument(引数)』と呼ばれるものです。
では、シンプルなDockerfileを作りながら
それぞれのInstructionが何をするように指示しているのか?
それぞれのプロセスでは何が起こっているのか
解説していきます
まずは簡単なDockerfileを作ります
#Dockerfileを作る
mkdir my_first_image
cd my_first_image
code .
①何か好きな名前のディレクトリーを作り(場所はどこで作っても良いです)
②そのディレクトリーのなかに入り
③そこで、エディターを開いてください。
私は、Visual Studio Code の設定を変えてますので
code .
で、カレントディレクトリ―内でエディターを開けますが、そのような設定をしていない方は、上記のコードをうってもエディターは開きません。
とにかく、作ったディレクトリー内でエディターを開いてくださいね。
次にそのディレクトリー内に
Dockerfile
を作ってください。
下のようになります。ファイル名を『Dockerfile』とすると、Dockerのアイコンが表示されますので、そうなればOKです。
そのあと、エディターに次のように書きます。
それぞれのコードが何を意味しているかは、後述するので、今はとりあえず下のように書いてみてください。
コマンドラインに戻り、
今現在、先ほどあなたが作ったディレクトリーにいること
その中にDockerfileがあることを確認
します。
そしてその後
docker build .
と打ってください。
docker build の後の.(ドット)は『現在いるディレクトリ―』を示しています。
今いるディレクトリー内で、イメージをbuild しますよという意味です。
なのでDockerfileからDocker Imageをbuild する時には、ちゃんとDockerfileが存在するディレクトリーにいるようにしましょう。
docker build . を実行すると、Dockerfileの中身が実行されているのが分かると思います(青の文字の赤の下線が引かれているところ)
その後、どんなImagesができたのか『docker images』で調べると、ちゃんと作られているのが分かります。
ただ、いま作ったImageにはImage名が作られていません。(REPOSITORYのところがnoneになっています)
もし、名前を付けたいときは
docker build -t <name> <directory>
としてください。
下のようになります
#Docker Container を作る
では、Imageが作られたので、次はそのImageからContainerを作ってみます。
docker run <imageID>
すると、Dockerfile を書いた時に
CMD ["コマンド"]
で書いたコマンドが実行されているのが分かります。
#DockerfileのInstructionについて
では、今回エディターで作ったDockerfile のInstructionがそれぞれ何を意味するのかを書いていきますね。
今回の記事で紹介する他にもInstructionはありますが、今回の記事では
FROM
RUN
CMD
のみに的を絞って解説していきます
##FROM
全てのDockerfile は『FROM』から始まります
FROMの後には、ベースとなるイメージを指定します。
今回はubuntuというLinux系のOSを指定しました。
このFROMで引っ張ってきたベースイメージの上で、RUN以降のInstructionで実行されるLinuxのコマンドを実行する事になります
##RUN
RUNはベースイメージに対して、特定のコマンドを実行させます。
update されたパッケージを取ってきてインストールさせたり、Container内にファイルを作って、その中に何かテキスト情報を書いたりできます。(今回の場合、my_first_fileにhello と書き込みました)
今回作ったDockerfileのRUNの結果がどのように反映されているか確かめてみましょう
##CMD
CMD はCommandの略です。
Containerを最初に作る時に実行されるコマンドを書きます
CMD ["コマンド"]
と、角括弧にクォーテーションマークで囲んだコマンドを入れます。
前述した、『Docker Containerを作る』という見出しのついたセクションに、実際どのようにコマンドが実行されたかの結果のスクショを貼っていますので、確認しておきたいかたは見てくださいね。
#まとめ
今回の記事はここで締めくくらせていただきます
Dockerfileのざっくりした内容を書かせていただきました。
次回の記事ではもう少し踏み込んだ内容について書いていこうと思います!