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 を使ってみる #
ここでは,Dockerを用いて nginx(エンジンエックスと呼ぶ)という Web サーバ/リバースプロキシサーバを起動してみます. 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 を 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 機能拡張が警告を出してくれます.