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

Docker

Docker コンテナ Docker Compose
目次

Docker とは
#

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

Docker の類似ソフトウェアに,finchpodman などがありますが, 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.ziphtml に展開し,以下のようなディレクトリ構成になっていれば, 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 の書き方も変わってきていますので,Dockerfilecompose.ymlを書く場合には,Visual Studio Code の Docker 機能拡張をインストールしましょう. 古い書き方をした場合は,Docker 機能拡張が警告を出してくれます.

🔗 Docker 機能拡張