TOP
前: -
次: docker-composeによるネットワーク作成
docker composeにはv1とv2があります。v1とv2では実行コマンドが異なり、v1はdocker-composeで、v2はdocker composeと、ハイフンを入れるかどうかの違いがあります。これらの動作に大きな違いはありませんが、互換性がないため、v2を入れた状態でdocker-composeを実行してもエラーとなります。本演習ではdocker-composeを使うようにしていますので、自身の環境に応じてdocker composeにて実行するようにしてください。
docker-composeはコンテナ起動の設定をファイルに定義し、定義した内容のコンテナを簡単に起動・削除できるツールです。開発中などで何度もコンテナを上げ直したい時に重宝します。docker runよりもdocker-composeでコンテナを起動することの方が多いかもしれません。
-
以下コマンドで
docker-compose.ymlファイルを作成してください。(composeファイルの内容については日本語マニュアルと見比べてみてください。)cat <<EOF > docker-compose.yml version: '3' services: web: image: nginx:1.19.2 ports: - 8080:80 logging: driver: "json-file" options: max-size: "10m" max-file: "2" environment: ENV: test EOF
-
上記
docker-compose.ymlを使用してコンテナをバックグランドで実行してください。(ヒント:composeで起動するのはdocker-compose upコマンドを使います。) -
コンテナが動いていることを確認してください。
-
ホストOSからlocalhost:8080に対してcurlを実行してください。
-
コンテナに
envの追加コマンドを発行し環境変数ENV=testが設定されていることを確認してください。docker-composeで起動したコンテナに対する追加コマンドは以下のようにdocker-compose execコマンドを使うと便利です。sudo docker-compose exec web env | grep ENV
-
以下コマンドでコンテナのログ設定を確認してください。
docker inspect {コンテナID} | grep -e Type -e max-file -e max-size -
docker-composeで起動したコンテナを削除してください。(ヒント:削除はdocker-compose downコマンドを使います。)
このようにdocker-composeを使うとdocker runで指定していた起動設定をいちいち指定しなくて済みます。また、composeで起動したコンテナは<プロジェクト名>_<サービス名>_<連番>という名前になります。プロジェクト名は-pオプションで指定できます。指定がない場合はカレントディレクトリ名がプロジェクト名になります。コンテナと一緒にネットワークも作られます。これにいてはdocker-composeによるネットワーク作成で触れます。
もう少しdocker-composeの練習します。
-
ホストOSに
~/compose-mountというテスト用のディレクトリを作成してください。 -
以下コマンドで
~/compose-mount配下にindex.htmlを作成してください。echo "compose de mount simasita" > ~/compose-mount/index.html -
さらに以下を満たすように
docker-compose.ymlを修正してください。- ホストOSの
~/compose-moutをコンテナの/usr/share/nginx/htmlにマウント(ヒント:volumeを使います。)
- ホストOSの
-
docker-composeでコンテナをバックグランドで起動してください。
-
ホストOSからlocalhost:8080に対してcurlを実行してください。
compose de mount simasitaと表示れるはずです。 -
docker-composeでコンテナを削除してください。
-
~/compose-mountを削除してください。 -
docker-compose.ymlを削除してください。
答え(一例です)
docker compose- プラクティスの指示コマンドを実行してください。
- 以下コマンドを実行する。
docker-compose up -d
- 以下コマンドを実行して確認してください。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6a6bcd7a538a nginx:1.19.2 "/docker-entrypoint.…" 6 minutes ago Up 6 minutes 0.0.0.0:8080->80/tcp, :::8080->80/tcp docker-practice-web-1
- 以下コマンドを実行する。
curl localhost:8080
- プラクティスの指示コマンドを実行して確認してください。
- プラクティスの指示コマンドを実行して確認してください。
- 以下コマンドを実行する。
docker-compose down
- 以下コマンドを実行する。
mkdir ~/compose-mount
- 以下コマンドを実行した後、プラクティスの指示コマンドを実行してください。
cd ~/compose-mount
- 以下のように
docker-compose.ymlを修正してください。
version: '3'
services:
web:
image: nginx:1.19.2
ports:
- 8080:80
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "2"
environment:
ENV: test
volumes: #追加
- ~/compose-mount:/usr/share/nginx/html #追加
- 2.と同じコマンドを実行する。
- 4.と同じコマンドを実行して確認してください。
- 7.と同じコマンドを実行する。
- 以下コマンドを実行する。
rm -rf ~/compose-mount
- 以下コマンドを実行する。
rm docker-compose.yml
TOP
前: -
次: docker-composeによるネットワーク作成