Dockerの使い方について、本や見聞きしたことの一部をまとめてみました。
Dockerの使用例
開発環境の提供
Linux、Windows、Mac、環境に関係なく同じ環境をDockerを介することで用意できる。
- 一つの物理マシン上で、複数のサーバーを立てる
- ツールを提供する
最後のツールを提供を目的に使用される玄人の方の話を聞いたので、それについて簡単にまとめていきます。Dockerをツールとして使用することが出来るようです。
Dockerの基本
まずは、Dockerの基本の話を少し。
たとえば、nginx
のサーバーを立ててみます。
/test
ディレクトリを作って、DockerFileを作ります。
FROM nginx:1.27.3
DockerFileは
- docker build
- docker run
の順で起動します。
docker build -t inoino-v1
docker run -p 80:80 -t inoino-v1
localhost:80
でnginxの画面が確認できれば、成功です。
インストラクション
DockerFile内に書かれる、いくつかのインストラクションについて説明します。
- FROM: 元となるDockerファイルの名前、Defaultの取得先はDocker HUB
- WORKDIR:bashとかでログインした時の、最初のディレクトリの設定
- RUN:docker build 時に実行されるブロック
- CMD:docker run 時やcompose upなど、起動時に実行される
※ CMDは一つだけ
CMDを上書きする
現状のDockerFileはこんな感じ
FROM nginx:1.27.3
この場合、CMDはないですが、FROMで読み込まれているファイル内で定義されています。
以下のリンクのファイル内でCMDが書かれています。
具体的には以下のように
CMD ["nginx", "-g", "daemon off;"]
すなわち、docker run時(起動時)に上のCMDが呼び出されてnginxが起動します。
DockerFileで上書き
DockerFileにCMDを記述すれば、FROMで読み込まれているnginxのCMDは実行されません。
FROM nginx:1.27.3
CMD touch /tmp/aaa.txt
この状態で、DockerFileを実行してみます。
docker build -t inoino-v1
docker run -p 80:80 -v ./:/tmp -it inoino-v1
マウントしたディレクトリにaaa.txt
が作成され、Dockerが終了します。
CLIのコマンドから上書き
docker run時(起動時)にはDefaultではCMDが実行されますが、CMDの代わりにDockerコンテナ内で実行できるコマンドなら実行できます。
例えば、こんな風に
docker run -p 80:80 -v ./:/tmp -it inoino-v1 touch /tmp/ccc.txt
この方法でも、マウントしたディレクトリにccc.txt
が作成されます。
ツールをDockerで使用する
上で通常のCMDでnginxを起動する代わりにccc.txt
やaaa.txt
を作成できました。
この特性を使用してツールとして使用することが出来るわけです。Docker内でツールを作成して、CMDを実行する代わりに、実行時にそのツールを実行するわけです。
最後に
内容は薄いですが、Dockerにこんな使い方もあると知られるのはいいことだと思ったため、記事として記述してみました。誰かのなにかになりますように。