Closed9

docker-composeをチュートリアルで試す

suzuki-navisuzuki-navi

以下の記事に従ってみる。

https://docs.docker.com/compose/gettingstarted/

アプリケーション部分はPythonのFlaskで書かれDockerfileでコンテナ化し、データはRedisに保存する構成。Redisは公開されているDockerイメージを使う。

アプリとRedisの2つのコンテナをdocker-composeで起動する。

suzuki-navisuzuki-navi

とりあえずチュートリアルに従ってファイルを作成。

Dockerfile

FROM python:3.7-alpine

WORKDIR /code

ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0

RUN apk add --no-cache gcc musl-dev linux-headers

COPY requirements.txt requirements.txt

RUN pip install -r requirements.txt

EXPOSE 5000

COPY . .

CMD ["flask", "run"]

Pythonのバージョンが古そうだけどまあいいか。チュートリアルにあるコードをそのままコピペすることにする。

app.py

import time

import redis
from flask import Flask

app = Flask(__name__)
cache = redis.Redis(host='redis', port=6379)

def get_hit_count():
    retries = 5
    while True:
        try:
            return cache.incr('hits')
        except redis.exceptions.ConnectionError as exc:
            if retries == 0:
                raise exc
            retries -= 1
            time.sleep(0.5)

@app.route('/')
def hello():
    count = get_hit_count()
    return 'Hello World! I have been seen {} times.\n'.format(count)

docker-compose.yml

services:
  web:
    build: .
    ports:
      - "8000:5000"
  redis:
    image: "redis:alpine"

requirements.txt

flask
redis
suzuki-navisuzuki-navi

実行したらエラーになってしまう。

$ docker-compose up
ERROR: The Compose file './docker-compose.yml' is invalid because:
Unsupported config option for services: 'redis'
suzuki-navisuzuki-navi
$ docker-compose --version
docker-compose version 1.25.0, build unknown

バージョンが古い。。。

suzuki-navisuzuki-navi

docker-composedocker compose は違うらしい。

  • docker-compose
    • バージョン1
    • 古い
  • docker compose
    • バージョン2
    • 新しい

https://docs.docker.com/compose/migrate/

Unlike Compose V1, Compose V2 integrates into the Docker CLI platform and the recommended command-line syntax is docker compose.

suzuki-navisuzuki-navi

docker info コマンドでインストールされているDockerのプラグインを確認できる。

$ docker info
Client: Docker Engine - Community
 Version:    24.0.4
 Context:    default
 Debug Mode: false
 Plugins:
  buildx: Docker Buildx (Docker Inc.)
    Version:  v0.11.1
    Path:     /usr/libexec/docker/cli-plugins/docker-buildx
  compose: Docker Compose (Docker Inc.)
    Version:  v2.19.1
    Path:     /usr/libexec/docker/cli-plugins/docker-compose 

/usr/libexec/docker/cli-plugins/ にプラグインが入っているようだ。

$ ls -al /usr/libexec/docker/cli-plugins/
total 135140
drwxr-xr-x 2 root root       49 Jul 10 07:41 .
drwxr-xr-x 3 root root       44 Jul 10 07:41 ..
-rwxr-xr-x 1 root root 77854729 Jul  5 20:44 docker-buildx
-rwxr-xr-x 1 root root 60524982 Jul  5 20:44 docker-compose
suzuki-navisuzuki-navi

できた。

$ docker compose up

ブラウザで http://localhost:8000/ にアクセスすると、ブラウザに以下のように表示される。ブラウザリロードするたびに数字が増えていく。

Hello World! I have been seen 5 times.
suzuki-navisuzuki-navi

docker composeは単独のdockerに比べて

  • ローカルにあるDockerfileからのイメージ作成が自動
  • ポートやディレクトリのマウントをYAMLで書ける
  • 複数のコンテナを同時に立ち上げられる
    • 相互にホスト名で参照できる
このスクラップは2023/07/10にクローズされました