6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

GalaxyAdvent Calendar 2019

Day 11

Docker-composeを使ってみよう

Last updated at Posted at 2019-12-09

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」

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) について

スマートに書きたい。
バージョンなど変更する場合がある値。
同じ文字打つのめんどい。
という時に!

command
#テキストエディタで開いて
nano .env
.env
#環境変数を入力して保存
VER=16.04
DIR=/home/peta/ws
CMD=touch test_20191107.txt

docker-conpose.ymlはこんな感じ

yaml=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 書くのに時間かかりそう。(コンテナの組み合わせを考えたりも)
 →時間かかりますが、一度できたら流用しやすそう。

【まとめ】
共有・再現する際に非常に役立ちそう。


おわり。

6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?