また少しDocker担当から離れていきそうなので備忘録もかねて記述していきたいと思います。
今回は簡単にFROM, RUN, CMDのご紹介です。
FROM
DockerfileはFROMを記述して、ベースとなるイメージを決めます。
ex.ubuntuの最新バージョンのイメージを指定する場合
FROM ubuntu:latest
慣れるまでは自分が必要とするツールが揃っているものを指定するのもいいと思います。慣れてきたらOSのみで欲しいツールを入れていくことを検討するといいと思います。
RUN
このコマンドを使うことでサーバーに必要なものを好きなようにカスタマイズすることが可能です。
ex.イメージOS上にtest1.txt,test2.txtというファイルを作成する
RUN touch test1.txt
RUN touch test2.txt
RUN
コマンドを複数行と実行することでイメージOS上の環境を整えていくことが可能ですが、RUN
ごとにレイヤーが作られます。
レイヤーが増えるとイメージが大きくなるので注意が必要です。
レイヤーを少なくする工夫
レイヤーを作るコマンドRUN, COPY, ADDを複数使う必要がある場合は&&でコマンドをつなげて記述する。1行が長くなるとDockerfileが見辛くなるので(バックスラッシュ)で改行をする。
RUN apt-get update
RUN apt-get install aaa
RUN apt-get install bbb
RUN apt-get install ccc
↓
RUN apt-get update && apt-get install aaa bbb ccc
↓インストールのパッケージが増えると見辛くなるので改行で整えます。
RUN apt-get update && apt-get install \
aaa \
bbb \
ccc```
インタラクティブに実行許可のyを入力する必要があるのでyesを意味する-yを入れるとインストールがスムーズに実行されます。
```docker:Dockerfile
RUN apt-get update && apt-get install \
aaa \
bbb \
ccc
キャッシュを有効利用する
apt-getなどでツールをインストールする記述をする時に一つ一つaaa,bbbがうまくインストールされたのでつなげてcccを記述して試す...と実行結果を得るためにネットワークへのアクセスが毎回発生してしまいます。
aaa bbb cccのツールをインストールしたい場合
RUN apt-get install \
aaa \
bbb
これがうまくいったので続けてcccを記述するとキャッシュが利用されずに全てをネットワーク上から取得する事になる。
RUN apt-get install \
aaa \
bbb \
ccc
↓まずは違うRUNで記述します。
RUN apt-get install \
aaa \
bbb
RUN apt-get ccc
というように後から追記するものはまず分けてうまく動作するかを試します。うまくいけば1行で記述するようにすることで記述から実行の一連の時間のロスをなくすことができます。
CMD
・Dockerfileの最後に記述することで、コンテナのデフォルトで実行されるコマンドの指定をすることができます。
CMD ["コマンド", "パラメータ1", "パラメータ2", "パラメータ3"]
ex.バッシュを起動する
FROM ...
RUN ...
CMD ["bin/bash"]
おしまい
上記紹介したコマンド:FROM, RUN, CMDで簡単なウェブサーバーなどの環境を作ろうと思えば作れるようになると思います。Docker、便利なんでぜひお試しください。