#はじめに
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 内で ADD
や COPY
によって、反映したいファイルがイメージに取り込まれている場合
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利用時のソースコードの変更反映