例えばnginxのconfファイルを更新して反映させたい時ありますよね。
定義前提例
docker-compose.yml
version: '2'
services:
nginx:
build: ./nginx
container_name: nginx
ports:
- 80:80
(以下略)
nginx/Dockerfile
FROM nginx
COPY nginx.conf /etc/nginx/nginx.conf
COPY default.conf /etc/nginx/conf.d/default.conf
EXPOSE 80 443
Bash
$ docker-compose -p foo up -d
※ -p foo
オプションにつけるとイメージ名やネットワーク名やボリューム名にfoo_
という接頭辞が付きます。
dockerコマンド
Bash
$ docker cp default.conf nginx:/etc/nginx/conf.d/default.conf
$ docker exec nginx nginx -s reload
当然Docker Composeを使っていたとしても上記の方法でも更新・反映は出来ますがDocker Composeの機能を使う方が良さ気かな?って。
docker-composeコマンド
docker-compose -p foo build nginx
docker-compose -p foo up -d nginx
するとRecreating nginx
と表示されます。
nginxのイメージのみ作りなおしてコンテナも新しく作って既存コンテナと入れ替えてくれます。
これなら、更新したdefault.conf
がイメージに反映された状態になりますし、Docker Composeを折角使っているならこっちの方が良いのかなー?って気分に。
注意
ただし、コンテナを作りなおすわけなので一瞬とは言えnginxが止まる瞬間が出来ちゃうと思うのでそれが困る場合は使えないですね。そーゆー場合はdockerコマンドを使う方法しか無さ気?