参考サイト: https://www.youtube.com/watch?v=lZD1MIHwMBY
Docker公式チュートリアルより分かりやすい
目次
- 4 Dockerを使ってみよう
- 5 アプリを作成・実行しよう
- 6 Dockerfileを作ろう
- 7 Docker Compose でRailsを構築
4 Dockerを使ってみよう
docker run hello-world
このコマンドは、hello-world
という名前のDockerイメージを実行し、その出力を表示しています。出力には、Dockerのインストールが正しく機能していることを示すメッセージが含まれています。
具体的には、以下の手順が実行されました。
- DockerクライアントがDockerデーモンに接続しました。
- Dockerデーモンは、Docker Hubから "hello-world" イメージをプル(ダウンロード)しました。
- Dockerデーモンは、そのイメージから新しいコンテナを作成し、現在表示されている出力を生成する実行可能ファイルを実行しました。
- Dockerデーモンはその出力をDockerクライアントにストリーミングし、クライアントはそれを端末に送信しました。
windows10のubuntuからVSCodeを開きたい
Windows 10 で WSL (Windows Subsystem for Linux) を使用している場合、以下の手順で Ubuntu から Visual Studio Code を開くことができます。
まず、Windows 10 上で Visual Studio Code をインストールしてください。インストールがまだの場合は、以下のリンクからダウンロードしてインストールしてください: https://code.visualstudio.com/
Visual Studio Code の拡張機能「Remote - WSL」をインストールします。拡張機能タブ(左サイドバーの四角形のアイコン)を開き、「Remote - WSL」を検索し、インストールしてください。
WSL の Ubuntu ターミナルを開きます。
code .
これにより、現在のディレクトリで Visual Studio Code が開きます。Visual Studio Code は自動的に WSL モードになり、Ubuntu 環境内でコードを編集できるようになります。
code . でエラーになる
以下で解決
WSL2 で使用している DNS サーバーを確認してください。/etc/resolv.conf ファイルを開き、次のようになっていることを確認します。
nameserver 8.8.8.8 nameserver 8.8.4.4
5 アプリを作成・実行しよう
rubyサンプルの説明
require 'webrick' server = WEBrick::HTTPServer.new( DocumentRoot: './', BindAddres: '0.0.0.0', Port: 8000 ) server.mount_proc('/') do |req, res| res.body = 'hello' end server.start
このRubyコードは、WEBrickというRubyの組み込みHTTPサーバーを使って、簡単なWebサーバーを起動する例です。
require 'webrick'
: WEBrickというRubyの組み込みHTTPサーバーライブラリを読み込んでいます。サーバーの設定を行っています。
server.mount_proc('/') do |req, res|
: サーバーのルートパス('/')にアクセスしたときの処理を定義しています。req
はリクエストオブジェクトで、res
はレスポンスオブジェクトです。res.body = 'hello'
: レスポンスのボディに"hello"という文字列を設定しています。server.start
: WEBrickサーバーを起動します。これにより、サーバーがリクエストを受け付ける準備が整います。
このコードを実行すると、ポート8000でHTTPサーバーが起動し、ルートパス('/')にアクセスすると"hello"という文字列が表示される簡単なWebサーバーが動作します。
Dockerfileサンプルの説明
FROM ruby:2.7 RUN mkdir /var/www COPY main.rb /var/www CMD ["ruby", "/var/www/main.rb"]
FROM ruby:2.7
: Ruby 2.7がインストールされたイメージをベースとして使用しています。RUN mkdir /var/www
:/var/www
ディレクトリを作成しています。これはアプリケーションのファイルを格納するディレクトリとして使われます。COPY main.rb /var/www
: ホストマシン上のmain.rb
ファイルを、コンテナ内の/var/www
ディレクトリにコピーしています。これにより、コンテナ内でアプリケーションのコードが利用できるようになります。CMD ["ruby", "/var/www/main.rb"]
: コンテナが起動する際に実行されるデフォルトのコマンドを指定しています。この場合、コンテナ起動時にruby /var/www/main.rb
が実行されることになります。
CMD
だけでは、コンテナ内にアプリケーションのコードが存在しないため、実行できません。RUN
とCOPY
は、必要なディレクトリを作成し、アプリケーションのコードをコンテナにコピーするために使用されています。これにより、CMD
で指定されたコマンドが正しく実行される環境が整います。
dockerイメージビルド
docker image build -t sample/webrick:latest .
docker image build -t sample/webrick:latest .
は、Dockerfileを使用してDockerイメージをビルドするコマンドです。以下は、各パーツの説明です。
docker image build
: Dockerイメージのビルドを開始するコマンドです。Dockerfile内の命令に従って、新しいイメージが作成されます。-t sample/webrick:latest
: イメージにタグを付けるオプションです。タグは、イメージのバージョンや役割を識別するために使用されます。この場合、イメージ名は「sample/webrick」で、タグは「latest」となります。.
: Dockerfileが存在するディレクトリを指定します。この場合、現在のディレクトリ(.
)が使用されます。Dockerは、このディレクトリ内のDockerfileを読み込み、イメージのビルドに使用します。
コマンドを実行すると、DockerはDockerfileの命令に従ってイメージをビルドし、ビルドが完了すると、指定された名前とタグでローカルのDockerイメージリポジトリに保存されます。このイメージは、docker run
コマンドでコンテナを作成・実行する際に使用できます。
dockerコンテナ作成実行
docker container run -p 8000:8000 --name webrick sample/webrick:latest
Dockerイメージから新しいコンテナを作成し、実行するコマンドです。以下は、各パーツの説明です。
docker container run
: Dockerイメージから新しいコンテナを作成し、実行するコマンドです。-p 8000:8000
: ホストマシンとコンテナ間でポートのマッピングを行うオプションです。この場合、ホストマシンのポート8000がコンテナ内のポート8000にマッピングされます。これにより、ホストマシンからコンテナ内のサービスにアクセスできるようになります。--name webrick
: コンテナに名前を付けるオプションです。この場合、作成されるコンテナの名前は「webrick」になります。コンテナ名を指定することで、後でコンテナを操作する際に便利になります。sample/webrick:latest
: 実行するDockerイメージを指定します。この場合、「sample/webrick:latest」という名前のイメージが使用されます。このイメージは、先程のdocker image build -t sample/webrick:latest .
コマンドでビルドされたものです。
コマンドを実行すると、指定されたイメージから新しいコンテナが作成され、実行されます。また、ホストマシンのポート8000とコンテナ内のポート8000がマッピングされるため、ホストマシンからコンテナ内のサービスにアクセスできるようになります。
http://localhost:8000/にアクセス
helloを表示
やったぜ
コンテナの停止と削除
docker container stop webrick docker container rm webrick
その他コマンド
docker container logs webrick
docker container logs webrick
コマンドは、Docker コンテナのログを表示するために使用されます。この場合、webrick
という名前のコンテナのログを表示することを指示しています。
コマンドを実行すると、webrick
コンテナで実行されているプロセスの標準出力と標準エラー出力が表示されます。これにより、コンテナ内のアプリケーションが生成するメッセージやエラーを確認できます。これは、デバッグやトラブルシューティングに役立ちます。
例えば、先程の sample/webrick:latest
イメージから作成された webrick
コンテナを実行した場合、コンテナ内で実行されている WEBrick サーバーが生成するログが表示されることが期待されます。これには、HTTP リクエストの情報やエラーメッセージが含まれることがあります。
docker container exec webrick ruby -v
docker container exec webrick ruby -v
コマンドは、実行中の Docker コンテナ(この場合は webrick
という名前のコンテナ)内で ruby -v
コマンドを実行することを指示しています。
docker container exec
コマンドは、実行中のコンテナ内で任意のコマンドを実行するために使用されます。このコマンドは、コンテナ内の環境を調べたり、デバッグやトラブルシューティングを行ったりする際に役立ちます。
ruby -v
コマンドは、インストールされている Ruby のバージョンを表示します。このコマンドを docker container exec
と組み合わせることで、webrick
コンテナ内で使用されている Ruby のバージョンを確認することができます。これは、アプリケーションが正しい Ruby のバージョンで実行されているかどうかを確認するために役立ちます。
docker system prune -a
docker system prune -a
コマンドは、Docker システム内の未使用のリソースを削除するために使用されます。これには以下のものが含まれます。
- 未使用のイメージ(-a フラグを使用しない場合は、ダングリングイメージのみ)
- 未使用のコンテナ
- 未使用のネットワーク
- 未使用のボリューム(デフォルトでは削除されませんが、--volumes フラグを追加すると削除されます)
-a
フラグは、すべての未使用のイメージを削除することを意味します。これには、現在使用されていないものの、将来使用される可能性のあるイメージも含まれます。このフラグを使用することで、システム上のディスクスペースを節約できますが、次回コンテナを実行する際に再度イメージをダウンロードする必要があります。
このコマンドを実行する前に、重要なデータがコンテナやボリュームに保存されていないことを確認してください。未使用のリソースが削除されると、それらのデータも失われます。
6 Dockerfileを作ろう
Gemfileサンプルの説明
このコードは、Ruby言語で書かれたGemfileです。Gemfileは、Rubyプロジェクトの依存関係(使用するgemライブラリ)を定義するために使われます。このGemfileでは、以下の内容が記述されています。
# frozen_string_literal: true
は、文字列リテラルが変更不可能(frozen)であることを示します。これにより、パフォーマンスが向上する場合があります。source "https://rubygems.org"
は、gemのソースとしてRubyGems.orgを指定しています。これは、gemを検索・インストールする際のデフォルトの場所です。git_source(:github)
は、カスタムのgit_source
を定義しています。この設定により、GitHubリポジトリから直接gemをインストールすることができます。repo_name
という引数を使用して、対象となるGitHubリポジトリを指定します。gem "sinatra"
は、このプロジェクトがsinatra
というgemに依存していることを示しています。Sinatraは、Rubyで軽量なWebアプリケーションを作成するためのDSL(ドメイン固有言語)を提供するフレームワークです。この行があることで、bundle install
コマンドを実行すると、Sinatra gemがプロジェクトにインストールされます。
Dockerfileサンプルの説明
このDockerfileは、Dockerイメージを構築するための設定ファイルです。各行の説明は以下の通りです。
FROM ruby:2.7
: このイメージは、Ruby 2.7をベースとしています。Ruby 2.7の公式Dockerイメージを使用して、新しいDockerイメージのベースレイヤを作成します。WORKDIR /var/www
: コンテナ内での作業ディレクトリを/var/www
に設定します。これ以降の命令は、このディレクトリを基準として実行されます。COPY ./src /var/www/
: ビルドコンテキスト(Dockerfileがあるディレクトリ)内のsrc
フォルダを、コンテナ内の/var/www/
にコピーします。これにより、アプリケーションのソースコードがコンテナに含まれるようになります。CMD ["/bin/bash"]
: コンテナが実行される際にデフォルトで実行されるコマンドを指定します。この例では、/bin/bash
が実行されるため、コンテナ起動時にBashシェルが開きます。
このDockerfileを使用してイメージをビルドし、そのイメージからコンテナを作成することで、Ruby 2.7がインストールされ、アプリケーションのソースコードが/var/www
ディレクトリに配置された環境で作業を行うことができます。
dockerイメージビルド
docker image build -t sample/sinatra:latest .
コマンドは、現在のディレクトリ(.
)にある Dockerfile
を使用して、sample/sinatra:latest
という名前で Docker イメージをビルドします。
このコマンドを実行すると、Dockerfile に記述された手順に従ってイメージが作成されます。イメージが正常にビルドされると、sample/sinatra:latest
という名前でローカルの Docker イメージリストに追加されます。
このコマンドを実行する前に、Dockerfile
が正しく記述されていることを確認してください。また、Docker が正常にインストールされ、実行されていることを確認してください。
dockerコンテナ作成実行
docker container run -it -p 4567:4567 --name sinatra -v ${PWD}/src:/var/www sample/sinatra
このコマンドは、Dockerでsinatraという名前のコンテナを実行し、ローカルのポート4567をコンテナ内のポート4567にマッピングします。また、カレントディレクトリ内のsrc
フォルダを、コンテナ内の/var/www
フォルダにマウントしています。
以下は、コマンドの各部分の説明です:
docker container run
: Dockerコンテナを実行するためのコマンドです。-it
: コンテナを対話的モード(インタラクティブモード)で実行し、ターミナルをアタッチします。これにより、コンテナ内のプロセスと対話することができます。-p 4567:4567
: ローカルマシンのポート4567を、コンテナ内のポート4567にマッピングします。これにより、ローカルマシン上でアクセス可能なURLから、コンテナ内のサービスにアクセスできます。--name sinatra
: このコンテナにsinatraという名前を付けます。名前を付けることで、後でこのコンテナを簡単に参照できます。-v ${PWD}/src:/var/www
: カレントディレクトリ内のsrc
フォルダを、コンテナ内の/var/www
フォルダにマウントします。これにより、コンテナ内とローカルマシン上のフォルダの内容が同期されます。ファイルが更新されると、コンテナ内でもすぐに反映されます。sample/sinatra
: 実行するDockerイメージの名前です。これは、事前にdocker image build
コマンドでビルドされたイメージです。
このコマンドを実行すると、sample/sinatra
イメージを使用して新しいコンテナが起動され、対話的モードで実行されます。そして、ローカルマシンのポート4567を使用して、コンテナ内のサービスにアクセスできます。
Bundler
利点
- プロジェクトごとに独立したgem環境が持てる。
- インストールされたgemを簡単に他の開発者や環境と共有できる。
コマンド説明
bundle config --local set path 'vendor/bundle'
は、Bundler の設定をローカル(プロジェクト固有)に変更し、依存関係(gem)をインストールするディレクトリを vendor/bundle
に指定するコマンドです。
Bundler は、Ruby の依存関係管理ツールで、プロジェクトに必要な gem(Ruby のライブラリやツール)を管理し、インストールすることができます。通常、gem はシステムのグローバルな場所にインストールされますが、このコマンドを使用することで、プロジェクト固有のディレクトリに gem をインストールすることができます。
このコマンドを実行すると、現在のプロジェクトディレクトリに .bundle
というディレクトリが作成され、その中に設定ファイルが生成されます。この設定ファイルには、ローカルの設定が記録されており、以降の bundle install
コマンドは、この設定を使用して gem を vendor/bundle
にインストールします。
お試しrubyサンプルの説明
このコードは、RubyのWebアプリケーションフレームワークSinatraを使用して、簡単なWebサーバーを実装しています。
require 'sinatra'
: Sinatraライブラリを読み込んでいます。configure do
ブロック: アプリケーションの設定を行います。get '/' do
ブロック: HTTP GETリクエストがルート("/")に来たときの処理を定義しています。'Hello world~'
: 文字列 'Hello world~' を返して、ブラウザに表示します。
このコードを実行すると、Webサーバーが起動し、ポート4567でリッスンします。ブラウザでサーバーのIPアドレスとポートにアクセスすると、'Hello world~' と表示されます。
rubyサンプル実行
bundle exec ruby app.rb
Bundlerを使ってRubyアプリケーションを実行する方法です。
bundle exec
: Bundlerを使って、アプリケーションで使用されるgemパッケージの正しいバージョンを読み込んで実行します。これにより、アプリケーションが依存しているgemパッケージのバージョンが衝突しないようにします。ruby app.rb
:app.rb
という名前のRubyファイルを実行します。このファイルは、通常、SinatraなどのWebフレームワークを使用したWebアプリケーションのエントリーポイント(メインファイル)です。
このコマンドを実行することで、app.rb
ファイル内のアプリケーションが起動し、依存しているgemパッケージのバージョンが正しく管理されます。
http://localhost:4567/にアクセス
Hello world~ が表示される
やったぜ
Dockerfileに上記を反映
RUN bundle config --local set path 'vendor/bundle' RUN bundle install CMD ["bundle", "exec", "ruby", "app.rb"]
以下はRUNの省略形
RUN bundle config --local set path 'vendor/bundle' \ && bundle install
なぜDokcerfileでCMD ["bundle", "exec", "ruby", "app.rb"]
DockerfileのCMD
命令では、コマンドとその引数を配列形式で指定することが推奨されています。この方法は、"exec form"と呼ばれています。
CMD ["bundle", "exec", "ruby", "app.rb"]
のように書く理由は以下の通りです。
シェルを介さずに直接実行: 配列形式(exec form)で指定されたコマンドは、シェルを介さずに直接実行されます。これにより、シェルの挙動に依存しないようになり、セキュリティ上のリスクが低減されます。
引数の扱いが明確: コマンドと引数が個別の要素として配列内に記述されているため、空白文字や特殊文字が含まれる引数を正しく扱うことができます。
可読性と保守性の向上: コマンドと引数が明確に分かれているため、Dockerfileの可読性と保守性が向上します。
したがって、CMD
命令を使用する際は、コマンドと引数を配列形式で指定することがベストプラクティスとされています。
Dockerfileを変更したが、COMMANDが "/bin/bash"のままです。なぜ?
ビルド忘れてた
ビルドし直したらいけた
http://localhost:4567/にアクセス
Hello world~ が表示される
やったぜ
7 Docker Compose でRailsを構築
Docker関連のファイルを用意
Dockerfileサンプルの説明
このDockerfileは、以下の手順でDockerイメージを構築しています。
FROM ruby:2.7
: この行は、ベースイメージとしてRuby 2.7を使用することを指定しています。Dockerは、指定されたベースイメージを元に新しいイメージを構築します。RUN
コマンドで、複数の操作を実行しています:WORKDIR /app
: 作業ディレクトリを/app
に設定します。これにより、このディレクトリが以降のコマンドの実行場所となります。COPY ./src /app
: ホストマシン上の./src
ディレクトリの内容を、Dockerイメージ内の/app
ディレクトリにコピーします。RUN
コマンドで、2つの操作を実行しています:bundle config --local set path 'vendor/bundle'
を実行し、bundleのインストール先をvendor/bundle
に設定します。これにより、依存関係がプロジェクト内の指定されたディレクトリにインストールされます。bundle install
を実行し、Gemfileに記載された依存関係をインストールします。
このDockerfileは、Ruby 2.7をベースにしたイメージを作成し、Node.jsとYarnをインストールし、アプリケーションのソースコードと依存関係をイメージ内にコピーしています。これにより、アプリケーションを実行するために必要なすべてのコンポーネントがDockerイメージに含まれることになります。
Gemfileサンプルの説明
このコードは、Rubyの依存関係管理ツールであるBundler用のGemfileの一部です。Gemfileは、プロジェクトで使用するRubyのgem(ライブラリやツール)とそのバージョンを指定するために使用されます。このコードで指定されている内容は以下の通りです。
source 'https://rubygems.org'
: この行は、gemの取得元として https://rubygems.org を指定しています。RubyGems.orgは、Rubyコミュニティのためのパッケージ管理サービスで、gemをホストし、公開しています。gem 'rails', '~> 6.1.0'
: この行は、プロジェクトがRails gemを依存関係として使用することを指定しています。また、~> 6.1.0
は、Rails gemのバージョンを指定しています。この指定により、Railsのバージョン6.1.x(6.1.0以上、6.2.0未満)がインストールされることになります。~>
演算子は、「最後の指定されたバージョン番号を上げることができるが、それ以前の番号は固定」という意味です。
このGemfileは、Ruby on Railsフレームワークのバージョン6.1.xをプロジェクトに追加するための設定を行っています。
docker-compose.ymlサンプルの説明
このコードは、Docker Composeの設定ファイル(docker-compose.yml
)で、2つのサービス(db
とweb
)を定義しています。Docker Composeは、複数のコンテナを一度に管理・実行するためのツールです。
version: '3'
: この行は、使用するDocker Composeファイルのバージョンを指定しています。バージョン3は現在の主要バージョンです。services:
: この行から、2つのサービス(db
とweb
)を定義しています。db:
: このサービスは、MySQLデータベースを実行するコンテナを定義しています。image: mysql:8.0
: MySQL 8.0のイメージを使用します。command: --default-authentication-plugin=mysql_native_password
: MySQLの認証プラグインをmysql_native_password
に設定します。volumes:
: ホストの./src/db/mysql_data
ディレクトリをコンテナの/var/lib/mysql
ディレクトリにマウントします。これにより、データが永続化されます。environment:
: 環境変数を設定します。ここでは、MySQLのルートパスワードをpassword
に設定しています。
web:
: このサービスは、Railsアプリケーションを実行するコンテナを定義しています。build: .
: 現在のディレクトリにあるDockerfile
を使用して、イメージをビルドします。command: bundle exec rails s -p 3000 -b '0.0.0.0'
: Railsサーバをポート3000で実行し、すべてのIPアドレスからの接続を許可します。volumes:
: ホストの./src
ディレクトリをコンテナの/app
ディレクトリにマウントします。これにより、コードの変更がすぐに反映されます。ports:
: ホストのポート3000をコンテナのポート3000にマップします。これにより、ホストからアプリケーションにアクセスできます。depends_on:
: このサービスがdb
サービスに依存していることを示します。これにより、db
サービスが先に起動されます。
このdocker-compose.yml
ファイルは、MySQLデータベースとRailsアプリケーションを実行する2つのコンテナを一度に管理・実行するための設定を行っています。
ymlの名前の由来は?
YMLファイルは、YAMLファイルの略称です。YAMLは、"YAML Ain't Markup Language"(以前は "Yet Another Markup Language")の略で、これは再帰的な頭字語です。YAMLは、データ構造や設定ファイルなどに使用される人間に読みやすいデータシリアライゼーション言語です。その名前は、YAMLがマークアップ言語ではなく、データ表現言語であることを強調しています。YAMLの名前の一部である "Ain't" は、否定の意味を持ちます。
初期設定
docker-composeからrailsを作成
docker-compose run web rails new . --force --database=mysql
このコマンドは、Docker Composeを使用して、新しいRailsアプリケーションを作成します。詳細については以下の通りです。
docker-compose run
: Docker Composeを使用して、指定されたサービスのコンテナを実行します。ここでは、web
サービスが指定されています。web
: Docker Composeファイルで定義されたweb
サービスを実行します。通常、Railsアプリケーションのコードをホストするサービスです。rails new . --force --database=mysql
:web
サービスのコンテナ内で実行されるコマンドです。これは、現在のディレクトリ(.
)で新しいRailsアプリケーションを作成し、MySQLをデータベースとして使用するように設定します。既存のファイルがある場合は--force
オプションによって上書きされます。
このコマンドを実行すると、web
サービスのコンテナ内で新しいRailsアプリケーションが作成され、その設定がMySQLデータベースを使用するようになります。このコマンドは、Railsアプリケーションの初期設定を行うために一度だけ実行する必要があります。
error failed to solve: error from sender: open xx/rails_docker/src/db/mysql_data/#innodb_redo: permission denied
これで解決
.dockerignore
ファイルを作成し、次の内容を追加してください。
src/db/mysql_data
このエラーは、Dockerがビルドコンテキスト内の一部のファイルにアクセスできないことを示しています。ファイルが存在するが、Dockerデーモンに対して適切な権限が設定されていないため、ビルドが失敗しています。
この場合、src/db/mysql_data
ディレクトリが問題を引き起こしているようです。これはおそらく、DockerコンテナでMySQLデータが保存されているディレクトリであり、ホストマシンにマウントされているため、アクセス権限の問題が発生していると考えられます。
これにより、src/db/mysql_data
ディレクトリはビルドコンテキストに含まれなくなり、権限の問題が解決されるはずです。その後、再度ビルドを試みてください。
Gemfileが更新されたのでビルドし直す
docker-compose build
データベースの設定
./src/config/database.yml
password: password host: db
docker-compose run web rails db:create
docker-compose run web rails db:create
コマンドは、Docker Composeを使用してRailsアプリケーションのデータベースを作成するためのコマンドです。ここで、web
はDocker Composeファイル内のRailsアプリケーションを表すサービス名です。
このコマンドを実行すると、Docker Composeは以下の手順を実行します。
docker-compose.yml
ファイル内で定義されたweb
サービスのコンテナを起動します。このコンテナは、Railsアプリケーションの実行環境を含んでいます。- 指定されたコマンド
rails db:create
を実行します。これにより、config/database.yml
ファイルに記述された設定に基づいて、データベースが作成されます。
データベース作成が正常に完了すると、新しく作成されたデータベースが利用可能になります。Railsアプリケーションは、データベースとのやりとりを行うために、このデータベースを使用します。
起動
docker-compose up
docker-compose up
コマンドは、Docker Compose を使ってマルチコンテナアプリケーションを起動および実行します。このコマンドは、以下の手順を実行します。
現在のディレクトリ内の
docker-compose.yml
ファイルを読み込みます。このファイルには、アプリケーションで使用するサービス(コンテナ)、ネットワーク、およびボリュームの構成が記述されています。記述されたサービス(コンテナ)のイメージがローカルにない場合、リモートレジストリ(通常は Docker Hub)からイメージをダウンロード(プル)します。
サービス間の依存関係に従って、サービス(コンテナ)を順番に起動します。また、指定されたポートやボリューム設定を適用します。
コンテナが正常に起動すると、
docker-compose.yml
ファイルで定義されたコマンドが実行され、アプリケーションが起動します。
docker-compose up
コマンドは、アプリケーションのすべてのサービス(コンテナ)を一度に起動・実行できるため、複数のコンテナが連携して動作するアプリケーションの開発やテストに役立ちます。また、-d
オプションを追加することで、コンテナをバックグラウンドで実行することもできます(例:docker-compose up -d
)。
http://localhost:3000/にアクセス
Yay! You’re on Rails!
その他操作
停止
docker-compose down
docker-compose down
は、Docker Compose を使用して実行しているコンテナ、ネットワーク、ボリューム、およびイメージを停止および削除するコマンドです。これは、コンテナと関連するリソースをクリーンアップするために使用されます。
このコマンドは、以下の動作を行います:
- 実行中のコンテナを停止します。
- コンテナ、ネットワーク、およびボリュームを削除します。
追加のオプションを使用することで、イメージも削除できます:
--rmi all
: すべてのイメージを削除します。--rmi local
: Compose ファイルで定義されているイメージのみを削除します。
docker-compose down
コマンドを実行すると、関連するリソースが削除されるため、データが失われる可能性があります。そのため、実行する前に、重要なデータが適切にバックアップされていることを確認してください。
ログ
docker-compose logs
コンテナにbashで入る
docker-compose exec web /bin/bash