Skip to content

Latest commit

 

History

History
154 lines (120 loc) · 6.3 KB

File metadata and controls

154 lines (120 loc) · 6.3 KB

TOP
前: -
次: docker-composeによるネットワーク作成


docker-composeコマンドの注意

docker composeにはv1とv2があります。v1とv2では実行コマンドが異なり、v1はdocker-composeで、v2はdocker composeと、ハイフンを入れるかどうかの違いがあります。これらの動作に大きな違いはありませんが、互換性がないため、v2を入れた状態でdocker-composeを実行してもエラーとなります。本演習ではdocker-composeを使うようにしていますので、自身の環境に応じてdocker composeにて実行するようにしてください。

docker-composeによるコンテナ起動

docker-composeはコンテナ起動の設定をファイルに定義し、定義した内容のコンテナを簡単に起動・削除できるツールです。開発中などで何度もコンテナを上げ直したい時に重宝します。docker runよりもdocker-composeでコンテナを起動することの方が多いかもしれません。

  1. 以下コマンドで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
  2. 上記docker-compose.ymlを使用してコンテナをバックグランドで実行してください。(ヒント:composeで起動するのはdocker-compose upコマンドを使います。)

  3. コンテナが動いていることを確認してください。

  4. ホストOSからlocalhost:8080に対してcurlを実行してください。

  5. コンテナにenvの追加コマンドを発行し環境変数ENV=testが設定されていることを確認してください。docker-composeで起動したコンテナに対する追加コマンドは以下のようにdocker-compose execコマンドを使うと便利です。

    sudo docker-compose exec web env | grep ENV
  6. 以下コマンドでコンテナのログ設定を確認してください。

    docker inspect {コンテナID} | grep -e Type -e max-file -e max-size
  7. docker-composeで起動したコンテナを削除してください。(ヒント:削除はdocker-compose downコマンドを使います。)

このようにdocker-composeを使うとdocker runで指定していた起動設定をいちいち指定しなくて済みます。また、composeで起動したコンテナは<プロジェクト名>_<サービス名>_<連番>という名前になります。プロジェクト名は-pオプションで指定できます。指定がない場合はカレントディレクトリ名がプロジェクト名になります。コンテナと一緒にネットワークも作られます。これにいてはdocker-composeによるネットワーク作成で触れます。

もう少しdocker-composeの練習します。

  1. ホストOSに~/compose-mountというテスト用のディレクトリを作成してください。

  2. 以下コマンドで~/compose-mount配下にindex.htmlを作成してください。

    echo "compose de mount simasita" > ~/compose-mount/index.html
    
  3. さらに以下を満たすようにdocker-compose.ymlを修正してください。

    • ホストOSの~/compose-moutをコンテナの/usr/share/nginx/htmlにマウント(ヒント:volumeを使います。)
  4. docker-composeでコンテナをバックグランドで起動してください。

  5. ホストOSからlocalhost:8080に対してcurlを実行してください。compose de mount simasitaと表示れるはずです。

  6. docker-composeでコンテナを削除してください。

  7. ~/compose-mountを削除してください。

  8. docker-compose.ymlを削除してください。

答え(一例です) docker compose
  1. プラクティスの指示コマンドを実行してください。
  2. 以下コマンドを実行する。
docker-compose up -d
  1. 以下コマンドを実行して確認してください。
$ 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
  1. 以下コマンドを実行する。
curl localhost:8080
  1. プラクティスの指示コマンドを実行して確認してください。
  2. プラクティスの指示コマンドを実行して確認してください。
  3. 以下コマンドを実行する。
docker-compose down
  1. 以下コマンドを実行する。
mkdir ~/compose-mount
  1. 以下コマンドを実行した後、プラクティスの指示コマンドを実行してください。
cd ~/compose-mount
  1. 以下のように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 #追加
  1. 2.と同じコマンドを実行する。
  2. 4.と同じコマンドを実行して確認してください。
  3. 7.と同じコマンドを実行する。
  4. 以下コマンドを実行する。
rm -rf ~/compose-mount
  1. 以下コマンドを実行する。
rm docker-compose.yml

TOP
前: -
次: docker-composeによるネットワーク作成