

[こちら](http://docs.docker.jp/compose/django.html)にDocker-
ComposeでDjangoとPostgreSQLを動かす例があります。

この例ではdocker-
compose.ymlでコマンドを定義していますが、サービス定義で`build`を指定している場合にはDockerfileの`CMD`でもコマンドを定義することができます。

[docker-composeのcommand](https://docs.docker.com/compose/compose-
file/#/command)  
[DockerfileのCMD](https://docs.docker.com/engine/reference/builder/#/cmd)

### docker-compose.yml

[code]

    version: '2'
    services:
      db:
        image: postgres
      web:
        build: .
        command: python manage.py runserver 0.0.0.0:8000
        volumes:
          - .:/code
        ports:
          - "8000:8000"
        depends_on:
          - db
    
[/code]

### Dockerfile

[code]

    FROM python:2.7
    ENV PYTHONUNBUFFERED 1
    RUN mkdir /code
    WORKDIR /code
    ADD requirements.txt /code/
    RUN pip install -r requirements.txt
    ADD . /code/
    # CMD <-ここでもコマンドを定義できる
    
[/code]

このような場合にはdocker-compose.ymlの`command`とDockerfileの`CMD`のどちらで定義したほうがいいのでしょうか？  
それぞれのメリット／デメリットがあれば教えてください。


CC BY-SA 3.0
2016-11-18T04:17:46.713
30495
2016-11-18T05:36:32.267
18862
question
docker docker-compose
コマンドはdocker-compose.ymlとDockerfileのどちらで定義するほうがいい？


`docker-compose.yml` で command を書くと、`docker-compose up`
を実行したときに、その内容が実行されます。`Dockerfile` で指定した CMD はこのときは無視されます。

なので、`docker run` で特定のコマンドを実行したいときは `Dockerfile` の CMD に書けばいいし、`docker-compose
up` でコマンドを実行したいときは `docker-compose.yml` に記述すればいいと思います。

(ただ、`docker run` の引数で実際に実行するコマンドを上書きできたりもします)


CC BY-SA 3.0
2016-11-18T05:36:32.267
30498
2016-11-18T05:36:32.267
2322
30495
answer