Closed9
docker-composeをチュートリアルで試す
以下の記事に従ってみる。
アプリケーション部分はPythonのFlaskで書かれDockerfileでコンテナ化し、データはRedisに保存する構成。Redisは公開されているDockerイメージを使う。
アプリとRedisの2つのコンテナをdocker-composeで起動する。
とりあえずチュートリアルに従ってファイルを作成。
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
実行したらエラーになってしまう。
$ docker-compose up
ERROR: The Compose file './docker-compose.yml' is invalid because:
Unsupported config option for services: 'redis'
$ docker-compose --version
docker-compose version 1.25.0, build unknown
バージョンが古い。。。
docker-compose
と docker compose
は違うらしい。
-
docker-compose
- バージョン1
- 古い
-
docker compose
- バージョン2
- 新しい
Unlike Compose V1, Compose V2 integrates into the Docker CLI platform and the recommended command-line syntax is docker compose.
以下のページに従って新しいdocker composeをインストールする。
docker-compose
ではなく docker compose
が使えるようになった。
$ docker compose version
Docker Compose version v2.19.1
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
できた。
$ docker compose up
ブラウザで http://localhost:8000/
にアクセスすると、ブラウザに以下のように表示される。ブラウザリロードするたびに数字が増えていく。
Hello World! I have been seen 5 times.
docker composeは単独のdockerに比べて
- ローカルにあるDockerfileからのイメージ作成が自動
- ポートやディレクトリのマウントをYAMLで書ける
- 複数のコンテナを同時に立ち上げられる
- 相互にホスト名で参照できる
このスクラップは2023/07/10にクローズされました