Docker の使い方(その1:概要)

この記事は最終更新日から 2年以上 が経過しています。

最近では、アプリケーションの実行環境の構築に Docker を使うことも珍しくなくなりました。 Docker は便利ではあるのかもしれませんが、難しく感じて敬遠されている人もいるのではないでしょうか。 その感覚はおそらく間違っていません。 実際、知れば知るほど奥が深い技術だと感じてしまいます。 もはや沼というか深淵を覗いている気分です。

Docker とは?

container_ship_and_docker.png

コンテナ船というのをご存知ですか? コンテナという大きな箱を大量に積んで輸送する船のことです。 海外から物資を輸出入する際に使用されていたりします。 数百、数千、数万とある大量の物資を1つ1つ数えて管理するのではなく、コンテナという大きな箱の単位でまとめて管理することで、物資の管理が容易になるのです。 コンテナは輸送の途中で開けられませんし、大きくて重くて目立ちますから、誰かが輸送中の物資をこっそり盗んで数が合わなくなるなんてことも発生しないんだそうです。 コンテナが正しく輸送できていれば、その中身もまた正しく輸送できているということですね。

Docker のアイコンを見てください。何かに似ているとは思いませんか? そうです。コンテナ船です。 Docker は仮想化技術を用いて、アプリケーションの実行環境を1つのコンテナのように管理してくれます。 これはつまり、アプリケーションの実行環境を手軽にまるごと入れ替えたりすることができるということです。 便利だとは思いませんか?

コンテナとは?

Docker におけるコンテナとは、アプリケーションの実行環境のことです。 もっと詳しく言えば、ホストマシン上の他の全てのプロセスから分離された(つまり、サンドボックス化された)プロセスのことです。 1つ1つのコンテナ(プロセス)は分離されているため、他に影響を与えません。 分離されているからこそ、入れ替えたりすることができるのですね。 コンテナは、コンテナイメージから作成されます。

コンテナイメージとは?

コンテナイメージは、アプリケーションの実行環境のスナップショットのようなものです。 アプリケーションの実行に必要な全てのもの(全ての依存関係、構成、スクリプト、バイナリなど)が含まれています。

実は、Docker のコンテナはコンテナだけで動作しているわけではなく、コンテナイメージと組み合わさって動作しています。 ファイルシステムなどもコンテナ側にあるのではなく、コンテナイメージ側にあったりします。 これはどういうことかというと、コンテナイメージこそが本体であり、コンテナはコンテナイメージに対する差分でしかないということです。 コンテナを作成する際に、コンテナイメージをまるごとコピーしていたのではストレージの容量を大量に使用してしまいますから、 そうならないようにコンテナは差分だけを管理しているというような形になっています。

このような形になっているおかげで、コンテナを作成したり削除したりするのがとても気軽にできるようになっています。 なんたって差分しかないのですから。 コンテナが簡単に作成できるということは、それはすなわち同じアプリケーションの実行環境が簡単に作成できるということです。

そして、コンテナイメージもまた差分を積み重ねた階層構造(レイヤー構造)で作られています。 そのため、Docker はファイルシステムに、ユニオン・ファイル・システム(UnionFS)という特殊なレイヤー構造をしたファイルシステムを使用しています。 コンテナイメージを Docker Hub(後述)などからダウンロードしたりする際も、この差分(レイヤー)単位でダウンロードされたりします。 少し難しい話ですが、Docker のドキュメントにはこういった話も出てくるので、このことを覚えておくとすんなり理解できると思います。

layer.png

Docker Desktop のインストール

難しい話ばかりしていてもあれなので、早速ですがインストールしてみましょう。 百聞は一見に如かずです。

Docker Desktop のインストーラーをダウンロード

Docker を動かすには、Docker Desktop が必要です。 公式サイトから Docker Desktop のインストーラーをダウンロードしてインストールします。

download.png

基本的にインストーラーの指示に従っていけば問題ないと思います。 途中で設定画面が表示されますが、基本的にデフォルトで問題ありません。 Docker Desktop のバックエンドには、WSL2 と Hyper-V を使用したものがあるのですが、 WSL2 の方がパフォーマンス的に優れています。

installer_config.png

Windows 起動時に自動で Docker Desktop が起動しないようにする

デフォルトでは、Windows が起動すると自動で Docker Desktop も起動する設定になっています。 とはいえ、それだと困る人もいるのではないでしょうか。

設定を変更するには、ヘッダーの右上の歯車ボタンをクリックして Settings 画面を開き、 「General」の「Start Docker Desktop when you log in」のチェックを外して、「Apply & Restart」ボタンをクリックします。

start_when_you_log_in.png

Docker Hub とは?

docker_and_docker_hub.png

Docker Hub はコンテナイメージの置き場(レジストリ)です。 Docker がコンテナ船だとすれば、Docker Hub はさしずめコンテナヤードといった感じでしょうか。

Docker Hub には大量のコンテナイメージがアップロードされています。 Docker でコンテナを作成する際は、Docker Hub にアップロードされているコンテナイメージがダウンロードされて使用されます。

docker_hub.png

Docker ID

Docker Hub のアカウント(Docker ID)は必須ではありませんが、 Docker Hub にコンテナイメージをアップロードしたい場合は Docker ID が必要になります。 必要であれば「Sign up」より作成してください。 Docker Hub にコンテナイメージをアップロードしない場合は不要です。

Docker IDでログインする

Docker Hub にコンテナイメージをアップロードしたい場合は、Docker ID でのログインが必要になります。 Docker Hub にコンテナイメージをアップロードしない場合は不要ですので、このセクションは読み飛ばしても問題ありません。

Docker ID でログインするには、Docker Desktop から行う方法と、コマンドで行う方法の2種類があります。

Docker Desktop でログインする

Docker Desktop でログインするには、ヘッダーの右上の「Sign in」をクリックします。

sign_in.png

コマンドでログインする

コマンドでログインするには、docker login コマンドを使用します。 このコマンドを実行すると、認証情報を聞かれるので入力します。

ログインしないと docker image push のような Docker ID が必要なコマンドが使用できませんが、 それ以外の認証が不要なコマンドはログインしなくても問題なく使用できます。

Docker ID(ユーザー名)を先に指定するには、-u オプションを使用します。

書式
docker login
例:Docker ID(ユーザー名)「test-user」を先に指定
docker login -u test-user

コマンドでログアウトする

コマンドでログアウトするには、docker logout コマンドを使用します。

書式
docker logout

参考サイト

関連記事

前回、「Docker の使い方(その1:概要)」の続きです。今回はコンテナについてです。コンテナの一覧を表示するコンテナの一覧を表示するには、Docker Desktop から行う方法と、コマンドで行う方法の2種類があります。Docker Desktop でコンテナの一覧を表示するDocker Desktop でコンテ ...
前回、「Docker の使い方(その2:コンテナ)」の続きです。今回はコンテナイメージについてです。コンテナイメージの一覧コンテナイメージの一覧を表示するには、Docker Desktop から行う方法と、コマンドで行う方法の2種類があります。Docker Desktop でコンテナイメージの一覧を表示するDocker ...
前回、「Docker の使い方(その3:コンテナイメージ)」の続きです。今回はボリュームについてです。ボリュームコンテナは作り直すと中身が初期状態に戻ってしまいます。ですが、コンテナの中のアプリケーションが作成したファイルなど、残しておいてほしいファイルもあると思います。例えばデータベースに保存されているデータなどです ...
前回、「Docker の使い方(その4:ボリューム)」の続きです。今回はネットワークについてです。複数のコンテナを連携させるこれまでは1つのコンテナについて説明してきましたが、複数のコンテナを連携させたい場合はどうすればよいでしょうか。例えば、Webサーバーコンテナと、DBサーバーコンテナを通信させたいような場合です。 ...
前回、「Docker の使い方(その5:ネットワーク)」の続きです。今回は Docker Compose についてです。Docker Compose とは?ここまで Docker の基本的な操作について説明してきました。コンテナを使ってアプリケーションを起動するためには、コンテナイメージからコンテナを起動し、そのコンテ ...

記事検索

最新記事

人気記事

RSSフィード

フィードバック

要望などあれば、お気軽にどーぞ。 不具合やバグを発見した場合も、連絡をいただけると助かります。

匿名でフィードバックする
匿名でフィードバックする

要望などあれば、お気軽にどーぞ。 不具合やバグを発見した場合も、連絡をいただけると助かります。

なお、このフォームから入力された内容について、管理者から返信はできませんので注意してください。 もし、管理者からの返信が必要であれば、X(旧 Twitter) もしくは、お問い合わせより、お願いします。

  • フィードバックの送信が完了しました。