Dockerとは?
ホストOS(使っているWindowsやMacなど)上に、気軽に仮想環境(別のマシンのようなもの)を構築できます。
DockerHubなどプラットフォームを経由し、仮想環境(イメージ)を誰かと共有・公開・利用することができます。
「ホストOS(使用しているPCなど)」の上に「Linux仮想環境」ができ、その上にコンテナ(実態)ができるイメージです。
- コンテナとは、別ユーザーのワークスペースができるようなイメージです。
- コンテナ内部のOSはLinuxが共通ですが、そこの諸々の設定(使用するコマンドやソースコードなど)はDockerfileというファイルで設定できます。
- ホストOSのボリューム(ソースコードや設定ファイル等のディレクトリやファイル)を指定して、コンテナ内部と紐付ける(マウント)ことができます。
- コンテナはポートを指定して外部と通信させることができます。
- コンテナ間で双方向に通信し連携できます。アプリ1つにつき1つデータベースが必要な場合、アプリ用コンテナとデータベース用コンテナを作成するなどの用途があります。
メリット
- OSレベルで仮想化されるため、ローカルとは別の環境ができあがる。
- 誰かの既存のイメージ(仮想環境の設計図)を引っ張ってきて、ローカルでコンテナ(仮想環境の実態)を複数起動することができる。
- 違う環境のアプリを複数起動・管理したり、チームで環境(OS・OSにインストールしているパッケージ・アプリのバージョンなど)を統一できる。
- ローカルで既存プロジェクトの開発環境を構築する際、すぐに構築できるようになる。
- Github ActionなどのCI/CD等で、コードのPush後に自動テスト・自動デプロイのサイクルができ、作業を自動化できる。
インストール方法
※▼からインストールできます(WSL環境前提)。まだWindowsにWSL環境がない方は、事前に【こちらを参考に準備してください。】
↑からインストールできます。
- インストールが完了したら、スタートメニューから 「Docker Desktop」 を起動します。
- アプリ上部の「⚙」歯車アイコンから、設定を開きます。
- 設定 > 全般 > 「wsl 2 ベースのエンジンを使用する」にチェックします。
- 設定 > Resources > WSL INTEGRATION より、「Enable integration with my default WSL distro」にチェックするか、「Ubuntu」等のDocker 統合を有効にするインストール済みの wsl 2 ディストリビューションを選択します。
- これでWSLにてDockerが有効になります。
- デスクトップアプリ「Docker Desktop」は、ウィンドウを閉じてもバックグラウンドで動作します。
- タスクバーの非表示領域のアイコンリストに、Dockerが表示されていれば動作しています。
- Dockerが動いていれば、WSLでdockerコマンドを使用できます。
- Dockerを使用するには、PC起動時にDocker Desktop起動が必要です。これも⚙設定から、ログイン時に起動するよう設定できます。
使い方
用語 | 説明 |
---|---|
Docker Engine | Dockerの核。イメージのコンテナ化やコンテナを動作させる役割を担う。 |
Docker Image | コンテナを作成するための土台。 コンテナはイメージを指定してそれをベースに動作する。 |
コンテナ | Docker Imageを元に生成された作業空間・アプリケーション。 イメージがあれば生成できる。 |
Dockerfile | Docker Imageをビルド(作る)するための手順書。 |
# Dockerバージョンを確認します。
$ docker --version
# サンプルのイメージを実行して、インストールが正しく機能することをテストします。
$ docker run hello-world
# 作成されたイメージのリストを確認します。
$ docker images
# 動作しているコンテナの確認
$ docker ps
# 停止中のコンテナも含め確認
$ docker ps -a
▲の例の $ docker run hello-world では、下記のような処理をしています。
- Docker Imageがローカルにあるか検索
- なければDocker Hubを検索(docker search)
- 見つかればそのイメージを取得(docker pull)
- コンテナを作成(docker create)
- コンテナを起動する(docker start)
※hello-worldコンテナは起動後、処理が終わると停止(docker stop)します。
補足
docker execでは、起動中コンテナの中にログインできます。
ホストOSではインストールしていないがコンテナには入れてあるコマンドなどは、コンテナ内部で使えます。
コンテナ内部からは、マウントしていないホストOSのディレクトリ等はアクセスできません。
docker composeを使うと、1回のコマンドで、コンテナを複数起動したり相互連携して1つのWebサービスを構築するなどができるようになります。
Docker Hubには、無料で使えるイメージがたくさん上がっているので、利用してみるといいでしょう。
自分独自のイメージをDockerfileでビルドして、公開することもできますし、Dockerfileを共有して誰かに全く同じ環境を構築してもらうことも実現できます。