Docker-compose とは
ちょっと調べてみました。
複数のDockerコンテナをまとめて自動化・管理するツールらしい。
連携(コンテナ間のネットワーク連携)もできるらしい。
参考URL:
Docker compose ことはじめハンズオン
Docker-compose インストール
Docker Desktop for Mac でDockerをinstallした場合は不要。(Windowsも同じく)
Linuxの場合は上記参考URLを参照。(丸投げ)
Docker-compose.yml 作成
ディレクトリ構成は下記の通り
.(/yourlocal_dir)
├── .env
├── Dockerfile
├── docker-compose.yml
├── input/
├── output/
└── script/
docker-compose.ymlの基本のき
「見本のdocker-conpose.yml」
version: "3" # バージョン
services: # 起動するコンテナの定義
ubuntu:
image: ubuntu:16.04 # 使いたいイメージをinstall
container_name: ubuntu # コンテナの名前
volumes:
- /yourlocal_dir:/tmp/wk #hostとマウント
working_dir: /tmp/wk #コンテナ内のワークディレクトリ
command: touch test.txt # コマンド記入
・image:
・・・使いたいイメージを指定する...ではなく作成したdockerfileを指定することもできる。image:
のところをbuild: .
に変更でおk。
・command:
デフォルトのコマンドを上書きしますので要注意。
複数にコマンドを記入したい場合は下記の通り。
command: >
bash -c "touch test.txt &&
mkdir output/test &&
mv test.txt output/test/"
はい、できた。
さて、「見本のdocker-conpose.yml」 を動かすと/yourlocal_dir/
の中に test.txt ができます。
参考URL:Docker Compose - docker-compose.yml リファレンス
これだけは覚えとけ!docker-composeコマンド
まず、docker-conpose.ymlのあるディレクトリに移動。
cd /yourlocal_dir
起動
イメージがない場合は自動でインストールしてくれます。
今回の場合、瞬殺でtest.txtが出来上がります。
docker-compose up -d
Dockerfileをbuildする場合はこちら。
docker-compose up --build
コンテナの一覧
docker-compose ps
止める
docker-compose stop
再起動
docker-compose restart
logをみる。
docker-compose logs
コンテナの中に入ってみる。
docker-compose exec [コンテナ名] /bin/bash
出るときは[control+C]
捨てる
お疲れ様でした。
-f は強制終了。つけない場合は Are you sure? [yN] と聞かれる。
docker-compose rm -f
複数のコンテナの内、1つだけ止めたい!という場合は下記の通り。
下記ルールは他docker-composeコマンドでも使えるようですよ。
docker-compose stop [container_name]
参考URL:docker-compose コマンドまとめ
ちょっと上級者編(筆者的に)
環境変数(.env) について
スマートに書きたい。
バージョンなど変更する場合がある値。
同じ文字打つのめんどい。
という時に!
#テキストエディタで開いて
nano .env
#環境変数を入力して保存
VER=16.04
DIR=/home/peta/ws
CMD=touch test_20191107.txt
docker-conpose.ymlはこんな感じ
version: "3" # バージョン
services: # 起動するコンテナの定義
ubuntu:
image: ubuntu:${VER} # 使いたいイメージをinstall
container_name: ubuntu # コンテナの名前
volumes:
- ${DIR}:/tmp/wk #hostとマウント
working_dir: /tmp/wk #コンテナ内のワークディレクトリ
command: ${CMD} # コマンド記入
他のPCや仲間に共有したときに、.env
を変更するだけでいいようにdocker-compose.ymlを書いといたらいいですね。
参考URL:docker-compose.ymlで.envファイルに定義した環境変数を使う
別にDockerだけでよくね? という方へ
筆者の個人的感想です。
【利点】
・いろんなコンテナを同時に使える。組み合わせられる。
・docker-compose.ymlへ、コマンドや設定を書いているので、のちのち管理しやすい。
・ymlで書くのでわかりやすい(個人的見解)
→後から見やすいかな?と思いました。
・docker-compose.ymlを渡すだけでまるまる共有できる!!!再現できる!!!(docker-composeコマンド使えたら)
【問題点】
・docker-compose.yml 書くのに時間かかりそう。(コンテナの組み合わせを考えたりも)
→時間かかりますが、一度できたら流用しやすそう。
【まとめ】
共有・再現する際に非常に役立ちそう。
おわり。