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.htmlDocker 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 機能拡張が警告を出してくれます。
