はじめに
Dockerについて学ぶ機会があったので、学んだ内容を自分なりに言語化してみました。Dockerを始めて使う方やDockerの簡単な概要を知りたい方は、参考になるかもしれません。
Dockerとは
コンテナ型仮想環境を作成・実行・管理するためのプラットフォーム。
コンテナ型仮想環境はアプリケーションとその実行環境を1つにまとめあげて動作させる技術のこと。簡単に言い換えると、コンテナはアプリケーションに必要な物をまとめた箱のこと。自身のPC上で独立した環境(コンテナ)を作成することができる。
アプリケーションの開発環境を複数人で共通化できるため、「AさんのPCでは動くけど、BさんのPCでは動かない。」といった問題を避けることができる。
仮想とは
実際の物理的な環境(実際のコンピュータ)を模倣して作成された環境のことを指す。Dockerにおける「仮想」は、物理的な制約から独立した環境を提供し、アプリケーションの実行と管理を可能にする。この仮想環境を利用して、アプリケーションの開発を行う。
従来の仮想化とDockerの違い
- 従来の仮想化:1つの物理サーバー(実際のコンピュータ)上に複数の仮想マシンを作成する。仮想マシンは、コンピュータ内で別のコンピュータのように機能するソフトウェア。それぞれの仮想マシンには、異なるOS(オペレーティングシステム:コンピュータが基本的な機能を実行するためのソフトウェア)がインストールされる。これにより、1つの物理サーバー上で異なる環境の仮想マシンを同時に実行できる。
- Docker:1つの物理サーバー上に複数の軽量で独立したコンテナを作成する。コンテナは、特定のアプリケーションと、そのアプリケーションが適切に動作するために必要なプログラムやライブラリ(コードの集まり)だけを含む環境。コンテナはホストOS(物理サーバー上で直接実行されるOS)のカーネル(OSの中心部分で、ハードウェアとソフトウェア間の通信を管理する部分)を共有し、より効率的に動作する。
引用:https://lab.sonicmoov.com/development/server/docker-tutorial/
Dockerは従来の仮想マシンよりも速く、軽量である。これにより、コンピュータのリソースを節約しながら、アプリケーションをすばやく立ち上げて実行できる。
Docker関連の用語
- ビルド:
Dockerfile
(設計図)に基づいて、イメージを作成する行為。 - イメージ:コンテナを作るための設計図のようなもの。この設計図には、コンテナをどのように構築するかの指示が書かれている。
Dockerfile
をビルドすると、イメージが作成される。 - コンテナ:特定のアプリケーションと、そのアプリケーションが適切に動作するために必要なプログラムやライブラリ(コードの集まり)だけを含む環境。イメージをもとにコンテナが作成される。
引用:https://www.kagoya.jp/howto/cloud/container/docker/
docker composeの役割
特定のアプリケーションを実行するためのコンテナをまとめて管理する。複数のコンテナが協力して一つの大きな作業を行うように設定されている。
ファイルの役割
-
docker-compose.yml
:イメージをビルドするための情報や、コンテナ起動するための情報など、アプリケーション全体の構成を定義。(上記の画像でいうと、build
とrun
のステップを管理する。) -
Dockerfile
:イメージの作成方法を定義。
コマンド一覧
-
docker compose build
:Dockerfile
をもとに、イメージをビルドする。 -
docker compose run
:イメージをもとに、コンテナを起動する。 -
docker compose up
:Dockerfile
をもとにイメージをビルドし、そのイメージをもとにコンテナを起動する。build
とrun
を同時に行うコマンド。-d
オプションを追加すると、コンテナがバックグラウンドで起動する。 -
docker compose ps
:現在のプロジェクトで稼働中のコンテナの一覧を表示する。-a
オプションを追加すると、起動に失敗したコンテナも含めて表示する。 -
docker compose exec
:実行中のコンテナに対してコマンドを実行する。-
docker compose exec [サービス名] bash
:該当サービスのコンテナでbashシェルを開始する。
※bashシェルとは、「Bourne-Again Shell」の略で、Unix系のOSで使われるコマンドラインインターフェースの一種。ユーザーがテキストベースのコマンドを入力すると、Bashシェルはそれを解釈し、適切なシステム処理を行ったり、応答を返したりする役割を担う。このシェルは、システムとの直接的な対話やスクリプト実行のためのツール。
参考:https://tech-blog.rakus.co.jp/entry/20210525/shellscript -
exit
:該当サービスのコンテナのbashシェルを終了する。
-
-
docker compose stop
:コンテナを停止する。コンテナは停止されるが削除されないため、再開が可能。
さいごに
Dockerについてざっくり解説してみましたが、いかがでしたでしょうか?正直私もまだまだ理解できていないことがたくさんあります。もし誤った内容を記載している場合は、申し訳ありません。その際は、ご指摘いただけると大変嬉しいです。最後まで読んでくださり、ありがとうございました!