🐳

🐳 Docker初心者必見!環境構築と便利コマンド集まとめ🔰

2024/06/04に公開

はじめに

こんにちは、Takeです。都内の自社開発企業でエンジニアとして働いています。
開発環境のスムーズな構築と、よく使用するDockerコマンドをまとめました。

前提

my-app-containerは実際のコンテナ名に置き換えて使用してください。

https://docs.docker.com/reference/cli/docker/

https://docs.docker.jp/index.html

環境構築

データベースの作成

docker compose run --entrypoint 'bundle exec rails db:create' my-app-container

マイグレーション

docker compose run --rm my-app-container bundle exec rake db:migrate

マイグレーションファイルを適用して、データベースの構造を更新します。

コンテナに入る

docker compose run my-app-container ash

bashではなくashを使用しました。

https://qiita.com/HorikawaTokiya/items/f9188d05a58bad47ce8d

https://engineering.nifty.co.jp/blog/26586

コンテナ内でDBマイグレーションの確認

コンテナにログインした状態で実行

bundle exec rails db:migrate:status

コンテナの起動

docker compose up -d

ビルド

イメージのビルド

docker build

単一のDockerfileに基づいてイメージをビルドします。

docker build .

CurrentディレクトリでDockerfileからイメージを生成します。

docker compose build

docker-compose.ymlファイルに基づいて複数のサービスのためのDockerイメージを一括でビルドするためのものです。(MySQLなどデータベースなどの情報を含む場合もあります。)

キャッシュを使用せずにイメージをビルド

docker compose build --no-cache

イメージ一覧表示

docker images

Docker Composeでイメージ一覧表示

docker compose images

実行中のコンテナのリスト表示

推奨

docker container ls

または

docker ps

コンテナの停止

docker stop $(docker ps -a -q)

コンテナ内でBashを実行

docker compose run <Container名> bash

ファイル一覧表示

ls -l

コンテナ内のディレクトリやファイルの詳細な一覧を表示します。

コンテナの削除

docker rm <ContainerID>

seedデータ作成

コンテナにログインして実行

docker compose run my-app-container ash
bundle exec rake db:seed

コンテナにログインせずに実行

docker run --rm my-app-container bundle exec rake db:seed

--rmオプションを使用するメリットはコマンド実行後に自動的にコンテナを削除することです。これにより、不要なコンテナが溜まらずディスクスペースを節約できます。

また、後片付けの手間が省ける点も嬉しいです。

デバッグ

コンテナ内のログを見るだけ

docker compose logs -f my-app-container

-f(follow)オプションによって、コンテナのログをリアルタイムで確認するためのコマンドです。

コンテナ内に入り込んで操作もできる

docker attach my-app-container

binding.pryを使用してデバッグも可能です。

不要なデータの削除

ディスク使用量の確認

# rootディレクトリで実行
du -h | grep "G\t"
  • du: 「disk usage」の略
  • -h: 「human-readable」の略(人間に読みやすい形式で表示)
  • grep: 指定したパターンに一致したものを表示

ストレージ容量の確認

docker system df

未使用のオブジェクトの削除

docker system prune
docker container prune

使用していないDockerオブジェクト(コンテナ、イメージ、ボリューム、ネットワーク)を一括で削除するコマンドです。

イメージの削除

docker rmi <ImageID>

コンテナの削除

docker rm <ContainerID>

ダングリング(<none>)イメージの削除

docker rmi `docker images -f "dangling=true" -q`

以下のエラーが表示された際には、コンテナを削除して対応

Error response from daemon: conflict: unable to delete 043qa03bfa787 (must be forced) - image is being used by stopped container 
docker rm ContainerID

再度、以下を実行

docker rmi `docker images -f "dangling=true" -q`

おまけ

ローカル環境からDockerコンテナにファイルをコピーするプロセス

  1. ローカルでの開発: 開発者はローカル環境でコードや設定ファイルを作成します。
  2. Dockerイメージの作成: Dockerfileを使用して、これらのファイルを含むDockerイメージを作成します。
  3. コンテナの起動: 作成されたDockerイメージを使用してコンテナを起動します。起動時にEntrypoint.shが実行され、アプリケーションが開始されます。

https://docs.docker.com/reference/cli/docker/

https://docs.docker.jp/index.html

最後に

ここまで読んでいただきありがとうございました!
今回の記事が良かったと思ったらぜひ「いいね」を押していただけると嬉しいです 🎉

noteでも記事を執筆していますので、ぜひチェックしてみてください。
https://note.com/take_lifelog/n/n58df7ce7af6f

他にもこのようなことについて記載しているのでお読みいただければ幸いです。

https://zenn.dev/take_tech/articles/275e5f4242973d

https://zenn.dev/take_tech/articles/374817f256ec9d

最後までお読みいただき、誠にありがとうございました!

Discussion