5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DOCKER COMPOSE のRUNとEXECの違い

Posted at

概要

Docker composeを使用する際に出現する'docker compose run'コマンドと'docker compose exec'コマンドについて違いを簡単にまとめてみました。

今回使用する環境情報

  • macOS
  • Docker Desktop
  • Ruby 3.3

Docker環境の構成

今回は以下のようなフォルダ構成で検証します

project/
├── docker-compose.yml
└──  Dockerfile

dockerfile

FROM ruby:3.3

WORKDIR /app

COPY Gemfile* ./

RUN bundle install || true

COPY . .

CMD ["irb"]

docker-compose.yml

version: "3.9"
services:
  ruby:
    build: .
    container_name: ruby_app
    volumes:
      - ./app:/app
    working_dir: /app
    tty: true     
    stdin_open: true

検証

実際にこの環境を使ってrunとexecを使った場合のコンテナの立ち上がり方の違いを見てみます。

まずはコンテナを起動します。

docker compose up

起動中のコンテナを確認します。

docker ps
CONTAINER ID   IMAGE              COMMAND   CREATED              STATUS              PORTS     NAMES
8bc7a959b05b   test_docker-ruby   "irb"     About a minute ago   Up About a minute             ruby_app

今一つのコンテナが起動している状態です。

runコマンドの場合

この状態で、

docker compose run ruby bash

と実行すると

CONTAINER ID   IMAGE              COMMAND   CREATED              STATUS              PORTS     NAMES
7adabb4ee676   test_docker-ruby   "bash"    3 seconds ago        Up 3 seconds                  test_docker-ruby-run-f93d667dc83e
8bc7a959b05b   test_docker-ruby   "irb"     About a minute ago   Up About a minute             ruby_app

exitでコンテナから抜けると

CONTAINER ID   IMAGE              COMMAND   CREATED          STATUS          PORTS     NAMES
8bc7a959b05b   test_docker-ruby   "irb"     42 minutes ago   Up 42 minutes             ruby_app

この挙動を見ると、runコマンドは一時的に新しいコンテナを立ててそのコンテナに入ることがわかります。

execコマンドの場合

では、execを実行すると

docker compose exec ruby bash
CONTAINER ID   IMAGE              COMMAND   CREATED          STATUS          PORTS     NAMES
8bc7a959b05b   test_docker-ruby   "irb"     47 minutes ago   Up 47 minutes             ruby_app

となり、execコマンドはすでに立っているコンテナに入ることがわかります。

まとめ(結論)

コマンド 動作 用途
docker compose run 一時的に新しいコンテナを立ち上げて入る テスト実行・一回限りの処理
docker compose exec 既存のコンテナに入る 稼働中のアプリに接続・確認

結論

  • compose run 一時的に新しいコンテナを立てそこに入る
  • compose exec 既存のコンテナに入る

この記事が「runexec の違い」を整理する助けになれば幸いです

5
3
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
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?