LoginSignup
4
7

More than 1 year has passed since last update.

Dockerfileやdocker-compose.yml、その他のファイル修正時のdocker-composeコマンド集

Last updated at Posted at 2021-10-10

はじめに

Dockerfileやdocker-compose.yml、その他のファイルのコードを修正した際、どのようにコンテナを起動すればよいか分からなかったため、まとめてみました。

Dockerのイメージとコンテナの違い

イメージ: 実行環境の構成を保存した情報
コンテナ: image を実際に動かした実行環境

以下のポイントも抑える必要があります。
・コンテナ を動かすには、ベースとなる イメージ が必ず必要なこと
・コンテナ を破棄しても イメージ が残っている場合があること
・リポジトリ内のソースコードは、 イメージ 内に含まれている場合と コンテナ 上に含まれている場合があること

Docker起動までの流れ

イメージ構築→コンテナ構築→コンテナ起動

コマンド イメージ構築 コンテナ構築 コンテナ起動
build × ×
up △(--build必要)
start × ×
run ○ (単独) ○ (単独) ○ (単独)

イメージ構築→コンテナ構築→コンテナ起動

# フォアグラウンドで起動
docker-compose up --build

# バックグラウンドで起動
docker-compose up --build -d

イメージ構築のみ

docker-compose build -d

Dockerfile更新の反映する場合

イメージ構築→コンテナ構築→コンテナ起動が必要

Dockerは一度ビルドするとキャッシュというのが作成され、2回め移行のビルド処理がはやくなります。
ただし、Dockerfileを更新する場合、--no-cache オプションを付けないと、Dockerはキャッシュを使ってimageを構築してしまうので、更新したDockerfileを見てくれず新しいimageが作られません。

# イメージ再構築
docker-compose build --no-cache

# コンテナ構築・起動(バックグラウンド)

docker-compose up -d

Dockerfile更新時は、イメージから作り直す必要があります。

docker-compose.yml更新の反映する場合

docker-compose.yml の記載内容のうち build sectionを編集した場合

イメージ構築→コンテナ構築→コンテナ起動が必要

# イメージ再構築
docker-compose build 

# コンテナ構築・起動(バックグラウンド)

docker-compose up -d

docker-compose.yml の記載内容のうち build section以外を編集した場合

コンテナ構築→コンテナ起動が必要

docker-compose up -d

Dockerfileとdocker-compose.yml以外のファイル更新を反映する場合

Dockerfile 内で ADDCOPY によって、反映したいファイルがイメージに取り込まれている場合

Dockerfileの中でローカルのソースコードを読み込む処理がある場合は、イメージの再構築が必要です。
(イメージ内でソースコードを抱えているため、ローカル側のソースコードの修正が反映しないので、作り直す必要がある)

イメージ構築→コンテナ構築→コンテナ起動が必要

# イメージ再構築
docker-compose build --no-cache

# コンテナ構築・起動(バックグラウンド)

docker-compose up -d

反映したいファイルがイメージに取り込まれていない場合

即反映される場合と、コンテナ構築→コンテナ起動が必要なパターンがあります

# コンテナ構築・起動(バックグラウンド)

docker-compose up -d

ローカルのボリュームとコンテナのボリュームをマウントしてる場合は、即反映されるため、特にすることはありません。

単独のサービスのイメージ構築→コンテナ構築→コンテナ起動

docker-compose run サービス名

# コンテナを起動後、指定したコマンドを実行する
docker-compose run コンテナ名 rails new

イメージの一覧を確認

docker images
# REPOSITORY   TAG   IMAGE   ID   CREATED   SIZE

コンテナの一覧を確認

#起動中のコンテナ一覧
docker ps

# 停止中も含める
docker ps -a
# CONTAINER ID   IMAGE   COMMAND   CREATED   STATUS   PORTS   NAMES

起動中のコンテナ内でコマンド実行

# 起動中のコンテナのシェルへ接続
docker exec -it コンテナID(orNAMES) /bin/bash
[root@xxxxxxx /]# 

ログ確認

docker-compose logs

# 最新5行からtailする
docker-compose logs -f --tail="5"

# 最新5行からタイムスタンプ付きでtailする
docker-compose logs -f --tail="5" -t

コンテナの開始と停止

# 開始
docker-compose start

# 再起動
docker-compose restart

# 停止
docker-compose stop

後片付け

# 停止と削除(コンテナ・ネットワーク)
docker-compose down

# 停止と削除(コンテナ・ネットワーク・イメージ)
docker-compose down --rmi all

# 停止と削除(コンテナ・ネットワーク・ボリューム)
docker-compose down -v

# 全てを無に返す
docker-compose down --rmi all --volumes

イメージ名の削除

#コンテナが停止中のイメージのみ削除できる
docker rmi イメージID(orNAMES)

コンテナの削除

#停止中のコンテナのみ
docker rm コンテナID(orNAMES)

#起動中のコンテナも削除できる
docker rm -f コンテナID(orNAMES)

参考記事

docker-compose up とか build とか start とかの違いを理解できていなかったのでまとめてみた
Docker利用時のソースコードの変更反映

4
7
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
4
7