docker-pyを使用して、既存のコンテナーからdockerコンテナーを実行します

Alexis.Rolland

Flaskアプリケーションを実行するDockerコンテナがあります。Flaskがhttpリクエストを受信したら、新しいエフェメラルDockerコンテナの実行をトリガーしたいと思います。このコンテナは、実行する必要がある処理が完了するとシャットダウンします。

Docker-in-Dockerは避けるべきだと読んだので、この新しいコンテナーは、Flaskコンテナー内ではなく、ホスト上で兄弟コンテナーとして実行する必要があります

docker-pyでこれを行うための解決策は何でしょうか?

Alexis.Rolland

私自身の質問に答えます。これが機能する完全なセットアップです。1つのフォルダーに、次のファイルを作成します。

  • Requirements.txt
  • Dockerfile
  • docker-compose.yml
  • api.py

Requirements.txt

docker==3.5.0
flask==1.0.2

Dockerfile

FROM python:3.7-alpine3.7


# Project files
ARG PROJECT_DIR=/srv/api
RUN mkdir -p $PROJECT_DIR
WORKDIR $PROJECT_DIR
COPY requirements.txt ./

# Install Python dependencies
RUN pip install --upgrade pip
RUN pip install -r requirements.txt

docker-compose.yml

上記の前の回答で述べたように、docker.sockをボリュームにマウントしてください。

version: '3'
services:
  api:
    container_name: test
    restart: always
    image: test
    build:
      context: ./
    volumes:
      - ./:/srv/api/
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      FLASK_APP: api.py
    command: ["flask", "run", "--host=0.0.0.0"]
    ports:
      - 5000:5000

api.py

from flask import Flask
import docker
app = Flask(__name__)


@app.route("/")
def hello():
    client = docker.from_env()
    client.containers.run('alpine', 'echo hello world', detach=True, remove=True)
    return "Hello World!"

次に、ブラウザを開いてに移動します http://0.0.0.0:5000/

アルパインコンテナの実行をトリガーします。高山の画像をまだお持ちでない場合は、Dockerが画像を自動的にダウンロードするため、最初は少し時間がかかります。

引数をdetach=True使用すると、コンテナーを非同期で実行できるため、Flaskはプロセスの終了を待たずに応答を返します。

引数remove=Trueは、Dockerが実行が完了したらコンテナーを削除することを示します。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

別の実行中のコンテナーからDockerコンテナーを再起動します

分類Dev

Docker-実行中のコンテナーを作成します

分類Dev

Dockerコンテナでroot以外のユーザーを使用してsudoコマンドを実行します

分類Dev

Dockerコンテナでroot以外のユーザーを使用してsudoコマンドを実行します

分類Dev

dockerの実行-mysqlと独自のdockerコンテナーを使用して作成します

分類Dev

別のDockerコンテナ内でDockerコンテナを実行していますか?

分類Dev

コンテナー内のdockerソケットが、コンテナー内で実行されているdockerデーモンに属しているのか、コンテナーホストから注入されているのかを検出します。

分類Dev

Docker: ホスト上の特権コンテナー内から任意のコマンドを実行します

分類Dev

-itを指定して実行してもDockerコンテナーは終了します

分類Dev

Docker Composeはコンテナーを実行し続けます

分類Dev

DockerコンテナーからGPUを使用していますか?

分類Dev

コマンドライン引数を使用してdocker-pyを使用してPython3からDockerコンテナを実行する

分類Dev

すでに実行中のDockerコンテナからアーティファクトを保存します

分類Dev

docker-composeを使用して、別のdockerコンテナーからCassandraにアクセスします

分類Dev

コードの実行後にDockerコンテナを停止します

分類Dev

docker-pyを使用して実行中のdockerコンテナのリストを取得する

分類Dev

docker-pyを使用して実行中のdockerコンテナのリストを取得する

分類Dev

実行中のコンテナーからdocker-compose.ymlファイルの場所を取得しますか?

分類Dev

既存のDockerコンテナからポートバインディングを削除します

分類Dev

Sparkを実行している別のDockerコンテナーからDockerで実行されているHDFSに書き込みます

分類Dev

イメージ名docker-pyでdockerコンテナーを実行します

分類Dev

Mavenを使用してgitlabで(Docker)テストコンテナーを実行します

分類Dev

AnsibleからプリセットIPを使用してDockerコンテナを実行します

分類Dev

データコンテナを最初から実行するDocker

分類Dev

コンテナー名を使用してホストからDockerコンテナーにアクセスする

分類Dev

Dockerコンテナの別のポートでJenkinsを実行します

分類Dev

実行中の場合、Dockerコンテナーを停止して削除する

分類Dev

docker:別のコンテナーからコンテナーlogs / stdout / stderrを監視しますか?

分類Dev

Dockerコンテナでcomposerinstallを実行しています

Related 関連記事

  1. 1

    別の実行中のコンテナーからDockerコンテナーを再起動します

  2. 2

    Docker-実行中のコンテナーを作成します

  3. 3

    Dockerコンテナでroot以外のユーザーを使用してsudoコマンドを実行します

  4. 4

    Dockerコンテナでroot以外のユーザーを使用してsudoコマンドを実行します

  5. 5

    dockerの実行-mysqlと独自のdockerコンテナーを使用して作成します

  6. 6

    別のDockerコンテナ内でDockerコンテナを実行していますか?

  7. 7

    コンテナー内のdockerソケットが、コンテナー内で実行されているdockerデーモンに属しているのか、コンテナーホストから注入されているのかを検出します。

  8. 8

    Docker: ホスト上の特権コンテナー内から任意のコマンドを実行します

  9. 9

    -itを指定して実行してもDockerコンテナーは終了します

  10. 10

    Docker Composeはコンテナーを実行し続けます

  11. 11

    DockerコンテナーからGPUを使用していますか?

  12. 12

    コマンドライン引数を使用してdocker-pyを使用してPython3からDockerコンテナを実行する

  13. 13

    すでに実行中のDockerコンテナからアーティファクトを保存します

  14. 14

    docker-composeを使用して、別のdockerコンテナーからCassandraにアクセスします

  15. 15

    コードの実行後にDockerコンテナを停止します

  16. 16

    docker-pyを使用して実行中のdockerコンテナのリストを取得する

  17. 17

    docker-pyを使用して実行中のdockerコンテナのリストを取得する

  18. 18

    実行中のコンテナーからdocker-compose.ymlファイルの場所を取得しますか?

  19. 19

    既存のDockerコンテナからポートバインディングを削除します

  20. 20

    Sparkを実行している別のDockerコンテナーからDockerで実行されているHDFSに書き込みます

  21. 21

    イメージ名docker-pyでdockerコンテナーを実行します

  22. 22

    Mavenを使用してgitlabで(Docker)テストコンテナーを実行します

  23. 23

    AnsibleからプリセットIPを使用してDockerコンテナを実行します

  24. 24

    データコンテナを最初から実行するDocker

  25. 25

    コンテナー名を使用してホストからDockerコンテナーにアクセスする

  26. 26

    Dockerコンテナの別のポートでJenkinsを実行します

  27. 27

    実行中の場合、Dockerコンテナーを停止して削除する

  28. 28

    docker:別のコンテナーからコンテナーlogs / stdout / stderrを監視しますか?

  29. 29

    Dockerコンテナでcomposerinstallを実行しています

ホットタグ

アーカイブ