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