概要とセットアップ
Docker Desktop 利用契約の更新
大規模エンタープライズ (従業員 250名以上、または年間収益 1 千万 US ドル以上) 向けの商用利用に対しては、有償サブスクリプションが必要です。 この有償サブスクリプションには、2022 年 1 月 31 日までの猶予期間が設けられています。 詳しくは こちら を参照してください。
ようこそ! Docker の使い方を学ぼうとしているみなさん。 すばらしいことです。
このページでは順を追って手順を進めていくことで Docker を学んでいきます。 本チュートリアルで学ぶのは以下の内容です。
- イメージをビルドしてコンテナーとして実行します。
- Docker Hub を使ってイメージを共有します。
- 複数コンテナーによりデータベースを利用する Docker アプリケーションをデプロイします。
- Docker Compose を使ってアプリケーションを実行します。
さらにイメージビルドに関するベストプラクティスも学びます。 またセキュリティぜい弱性を確認するためにイメージをスキャンする手順も学びます。
好みのプログラミング言語を使ってアプリケーションをコンテナー化する方法をお探しであれば、各種言語別ガイド を参照してください。
DockerCon 2020 のビデオウォークスルーもお勧めします。
Docker のダウンロードとインストール
本チュートリアルでは、手元のマシンに Docker 最新版がインストールされているものとします。 もし DOcker をインストールしていない場合は、以下に示す適切なオペレーティングシステムを選んで Docker をダウンロードしてください。
Intel チップの Mac Apple チップの Mac Windows Linux
Docker Desktop のインストール手順については Docker Desktop の Mac へのインストール か Docker Desktop の Windows へのインストール を参照してください。
チュートリアルスタート
このチュートリアルをはじめるためのコマンドをすでに実行済みであれば、おめでとうございます。 もしまだの方はコマンドプロンプトや Bash 画面を開いて、以下のコマンドを実行してください。
$ docker run -d -p 80:80 docker/getting-started
ここではフラグをいくつか利用しています。 その説明をみてください。
-d
: コンテナーをデタッチ(detached)モード、つまりバックグラウンドで実行します。-p 80:80
: ホストの 80 ポートをコンテナーの 80 ポートにマッピングします。docker/getting-started
: 利用するイメージ名です。
ヒント
1 文字からなるフラグはつなぎ合わせることで、コマンド記述を短くすることができます。 たとえば上のコマンドは以下のようにすることもできます。
$ docker run -dp 80:80 docker/getting-started
Docker ダッシュボード
この先に進む前に Docker ダッシュボードについて説明しておきたいと思います。 これはマシン上に動作するコンテナーを簡単に参照できるものであり、Mac と Windows において利用できます。 これを使えばコンテナーログに簡単にアクセスしたり、コンテナー内のシェルを実行したりすることが可能です。 さらにコンテナーのライフサイクル(停止や削除など)を簡単に管理することができます。
ダッシュボードにアクセスするには Docker Desktop マニュアル の手順に従ってください。
ダッシュボードを今開いている場合は、チュートリアルコンテナーが動作中であるのが見てとれるはずです。
コンテナー名(以下ではjolly_bouman
)はランダムに生成されます。
したがって手元のコンテナー名は、きっと別の名前になっているはずです。
コンテナーとは何ですか
上でコンテナーというものを実行したわけですが、コンテナーとは何でしょう。 簡単に言うと、コンテナーとはマシン上の単なる 1 つのプロセスであって、ホスト上の他のプロセスとは分離された、サンドボックス化したプロセスです。 この分離状態は カーネルの名前空間と cgroups によって実現されています。 それは Linux において長らく実現されてきている機能です。 Docker はそういった機能を活用し利用しやすくして動作しています。 コンテナーについてまとめると、以下となります。
- イメージが実行されたインスタンスのことです。 DockerAPI や CLI を使って、コンテナーの生成、起動、停止、移動、削除を行うことができます。
- ローカルマシン、仮想マシン、デプロイしたクラウドの各環境上において実行することができます。
- 移植性が高いものです(どのような OS 上でも実行できます)。
- 複数のコンテナーは互いに独立していて、独自のソフトウェア、実行ファイル、設定により動作します。
一からコンテナーを生成する
コンテナーがどのようにして一から作り出されているのかを知りたい方は、Aqua Security 社の Liz Rice 氏が、Go 言語をつかって一からコンテナーを作りだすという、すばらしい話を聞かせてくれています。 彼女が作り出しているコンテナーはとても単純なものなので、ネットワークやファイルシステムイメージを利用するような話にまでは及んでいません。 しかし何がどのようにして動作しているのかを、実に深く切り込んだ すばらしい 話が聞けます。
コンテナーイメージとは何ですか
コンテナーを実行すると、コンテナーは分離されたファイルシステムを利用します。 このカスタムファイルシステムは コンテナーイメージ によって提供されます。 イメージにはコンテナーのファイルシステムが含まれるため、アプリケーションの実行に必要となるものをすべて含んでいなければなりません。 それは依存パッケージであり設定であり、スクリプトやバイナリです。 イメージにはそれ以外のコンテナー設定として、環境変数、デフォルト実行のコマンド、メタデータなども含みます。
イメージについては後に詳細に見ていくことにします。 そこでレイヤー構成やベストプラクティスなどのトピックをカバーします。
情報
chroot
コマンドについてよくわかっている方は、コンテナーがchroot
の拡張版として動作するものであると考えてください。 ファイルシステムは単純にイメージから利用されます。 しかしコンテナーでは chroot を利用するだけでは実現できない、追加の分離処理を行います。
CLI リファレンス
本節で利用した CLI コマンドについては、以下に示すドキュメントを参照してください。
get started, setup, orientation, quickstart, intro, concepts, containers, docker desktop