概要
普段から開発環境はDockerを使っていて、
仕事でよく使うDockerコマンドをまとめました。
前提
- Railsアプリケーション・データベース・バックグラウンドプロセス(例: Webpackerなど)がそれぞれ独立したDockerコンテナで稼動
【基本】コンテナの作成・起動・停止・削除
まずは、基本的に使うコマンドから。[コンテナID]は「docker ps
」から確認できます
コマンド | 役割 |
---|---|
docker build [コンテナID] | コンテナの作成 |
docker start [コンテナID] | コンテナの起動 |
docker compose up | コンテナの作成・起動 |
docker stop [コンテナID] | コンテナの停止 |
docker rm [コンテナID] | コンテナの削除 |
バックグラウンド上でコンテナの作成・起動
-d
のオプションはデタッチド・モードと言います。
バックグラウンド上でコンテナを立ち上げるモードです。これをつけずに「docker compose up
」をすると、ログがサウナで流れる汗のように出てきます。
$ docker compose up -d
これが何だかんだ1番使ってるコマンドかもしれません。
動いているコンテナの一覧を表示
compose up
などで起動した現在稼働中のコンテナ一覧を表示。
コンテナID(CONTAINER ID )やコンテナ名(NAMES)を確認したい時によく使うコマンド
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c3f279d17e0a nginx "/docker-entrypoint.…" 3 hours ago Up 3 hours 0.0.0.0:80->80/tcp webserver
4e5021d210f6 mysql:5.7 "docker-entrypoint.s…" 2 days ago Up 24 hours 3306/tcp, 33060/tcp mysqldb
存在するコンテナの一覧を表示
- 動いているコンテナと停止しているコンテナの一覧を表示します
ここで「STATUS」の欄が「Exited」になっていたら存在はしているけど停止しているコンテナ。
下記の1番下のCONTAINER ID「5a0f2d3c9e5a」のコンテナとかがその例になります。
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c3f279d17e0a nginx "/docker-entrypoint.…" 3 hours ago Up 3 hours 0.0.0.0:80->80/tcp webserver
4e5021d210f6 mysql:5.7 "docker-entrypoint.s…" 2 days ago Up 24 hours 3306/tcp, 33060/tcp mysqldb
5a0f2d3c9e5a my-rails-app "/bin/bash" 12 hours ago Exited 0.0.0.0:3000->3000/tcp my-rails-container
railsコンテナの中に入って、rails c
でコンソールを叩きたい
## railsコンテナの中に入る
$ docker compose exec -it [railsコンテナID] bash
## railsコンソールを開く
$ bundle exec rails console
railsコンテナの中で、binding.pry
でデバッグをしたい時
rails使っている人なら大体知ってると思うので、binding.pryの説明は省略します。
$ docker attach [railsコンテナ]
## この後にrailsのログが流れる
## binding.pryの書かれている箇所の画面に遷移したりすると、以下のように処理が止まって、デバッグできる
3: def index
4: @tweets = Tweet.all
=> 5: binding.pry
6: end
[1] pry(#<TweetsController>)>
railsコンテナのルーティングを確認したい時
## railsコンテナの中に入る
$ docker compose exec -it [railsコンテナID] bash
## railsコンソールを開く
$ bundle exec rails routes
seedファイルからテストデータを作りたい時
## railsコンテナの中に入る
$ docker compose exec -it [railsコンテナID] bash
## railsコンソールを開く
$ bundle exec rails db:seed
railsコンテナでbundle install
したい時
Gemfileを更新したら実施する
docker compose exec rails bundle install
データベースのテーブル構造を確認したい時
## DBコンテナの中にはいる
$ docker compose exec -it [DBコンテナID] bash
$ mysql
$ show databases;
##ここでmysqlで管理しているデータベースがずらっと出てくる
$ use [確認したいデータベース名];
$ show [確認したいテーブル名];
余談
1年前くらいは「railsコンテナの中に入る」という意味がわからないくらいDockerを使えてませんでしたが、今は割とサクサク使えるようになってきました。
何が言いたいかというと、「Docker意味分からん」っていう人も実務でガシガシ使わざるを得ない環境に1年くらいいると良い感じに使えるようになってると思います。
終わりに
「こんなDockerコマンドもRailsアプリの開発でよく使うよ!」
「そのコマンド、ちょっと違うかもよ?」などの意見がありましたら、
編集リクエスト・コメントどしどしお待ちしてます