↓ メインコンテンツへスキップ
  1. 補講/
  2. 補講02講 Webアプリケーション(Docker)/

Docker

Docker とは
#

Docker とはコンテナ仮想化を提供するソフトウェア(ツール)です。 コンテナ仮想化とは、OS レベルでの仮想化技術で、アプリケーションを実行するための環境を仮想化します。 VirtualBox をはじめとする仮想マシンソフトウェアとは異なり、Docker はホスト OS のカーネルを共有するため、仮想マシンよりも軽量で高速に動作します。

Docker の類似ソフトウェアに、finch、 podman などがありますが、 Docker が最も普及しているようです。

Docker のインストール
#

Docker Desktopのインストールページ の指示に従い、Docker Desktop をダウンロードしてインストールします。

Docker Desktop をインストールすると、Docker Engine と Docker CLI がインストールされます。 また、Docker Desktop の初回起動時に 利用規約に同意する必要がありますので、内容を確認した上で Agree ボタンをクリックしてください。 Docker Desktop を起動すると、メニューバーの右上に Docker Desktop のアイコンが表示されます。 このアイコンが表示されているときに Docker を利用できます。

📥 Docker Desktopのダウンロード

Docker を使ってみる
#

ここでは、Dockerを用いて nginx(エンジンエックスと呼ぶ)という Web サーバ/リバースプロキシサーバを起動してみます。 nginx は Docker Hub にてコンテナイメージが配布されています。

🔗 nginx (Docker Hub)

docker run -d --rm -v $PWD/html:/usr/share/nginx/html:ro -p 8080:80 nginx 

各オプションの意味は次の通りです。

  • -d バックグラウンドで動作させる。
  • --rm コンテナの実行終了後(不要になれば)、イメージを削除する。
  • -v $PWD/html:/usr/share/nginx/html:ro ホストの $PWD/html ディレクトリをコンテナの /usr/share/nginx/html ディレクトリに読み取り専用でマウントする。
    • 最後の :ro を削除すると、書き込みもできるようになる。
  • -p 8080:80 コンテナのポート80をホストのポート8080にマッピングする。
  • nginx 起動するコンテナイメージ。

他に、以下のようなオプションを必要に応じて設定してください。

  • コンテナOSのターミナルと現在のターミナルとを接続する -it オプション
  • ホストOSのボリューム(ディレクトリ)をホストOSのディレクトリとマウントする -v オプション。-v $HOST_PWD:/$CONTAINER_DIR のように指定します。

以下の hello.zip をダウンロードし、現在のディレクトリに展開してください。 html が現在のディレクトリにある状態で、上記の dockerのコマンドを実行すると、 http://localhost:8080/ にアクセスすると、html ディレクトリの中身が表示されます。

📥 hello.zip

この hello.zip を html に展開し、以下のようなディレクトリ構成になっていれば、 http://localhost:8080/hello にアクセスすると、index.html が表示されます。

html
└── hello
    └── index.html

Docker compose
#

Docker compose とは複数のコンテナを操作するためのユーリティティツールです。 compose.yml というYAML形式のファイルでコンテナの設定を記述し、docker compose コマンドでコンテナを操作します。

compose.ymlというファイルがあれば、docker compose up で複数のコンテナを起動し、動かせるようになります。 また、docker compose stop で動かしているコンテナ群を停止し、 docker compose down でコンテナを削除します。 Docker がインストールされている環境であれば、どのような環境でも同じように動作させられますので、 ソフトウェアを提供する側としては、環境依存性を気にせずに配布することができます。

Docker compose の利用例は次の単元である Flask(Python の Web フレームワーク)を利用する際に示します。

古い書き方では書かないようにしよう。

Webで検索すると、docker-compose という名前が見つかることがあります。 これは古い Docker compose の利用方法ですので、注意してください。 また、compose.yml というファイル名も、昔は docker-compose.yml という名前であった点に注意してください。 compose.yml の書き方も変わってきていますので、Dockerfileやcompose.ymlを書く場合には、Visual Studio Code の Docker 機能拡張をインストールしましょう。 古い書き方をした場合は、Docker 機能拡張が警告を出してくれます。

🔗 Docker 機能拡張