簡體   English   中英

如何在同一圖像的並行容器中運行不同的python腳本

[英]How to run different python scripts in parallel containers from same image

我正在嘗試做一個非常簡單的事情(我認為),我想構建一個docker映像並在並行運行的容器中從同一映像啟動兩個不同的腳本。

像這樣簡單

容器1-> print(“ Hello”)

容器2->打印(“世界”)

我做了一些研究,但有些技術似乎有些過分設計,而有些則做了類似的事情

CMD ["python", "script.py"] && ["python", "script2.py"]

這不是我想要的。

我很想看到類似的東西

$ docker ps
CONTAINER ID        IMAGE            CREATED          STATUS               NAMES
a7e789711e62        67759a80360c   12 hours ago     Up 2 minutes         MyContainer1
87ae9c5c3f84        67759a80360c   12 hours ago     Up About a minute    MyContainer2

但是運行兩個不同的腳本。

對於這一切,我還是很陌生,因此,如果這是一個愚蠢的問題,我事先表示歉意,並感謝大家與我一起工作。

如果您設置使用相同的圖像,那么我建議您將ENTRYPOINT設置為python,然后使用docker run命令通過提供腳本作為CMD來啟動容器,如下所示:

Dockerfile:

FROM python

...

ENTRYPOINT ["python"]

然后像這樣使用docker run命令

docker run -d my_image script.py && docker run -d my_image script2.py

這將啟動兩個容器,每個容器運行單獨的腳本

但是-我希望保持圖像干凈,因為沒有任何其他腳本或程序包對於我的服務正常工作是不必要的,因此在這種情況下,我將簡單地創建兩個單獨的圖像,每個圖像或腳本都包含一個腳本,然后運行它們同樣。

例:

FROM python

COPY script.py script.py

ENTRYPOINT ["python"]

CMD ["script.py"]

第二張圖片:

FROM python

COPY script2.py script2.py

ENTRYPOINT ["python"]

CMD ["script2.py"]

然后只需將它們構建為單獨的圖像,並以與以前相同的方式運行

嘗試這些步驟,它應該可以工作。

  • 創建一個包含以下內容的Dockerfile
FROM python:3.7-alpine
COPY script1.py /script1.py
COPY script2.py /script2.py
CMD ["/bin/sh"]
  • script1.py
print("Hello")
  • script2.py
print("World")
  • 構建docker build -t myimage:v1 . image docker build -t myimage:v1 .
  • 運行容器
$ docker run -it --rm --entrypoint python myimage:v1 /script1.py
Hello
$
$ docker run -it --rm --entrypoint python myimage:v1 /script2.py
World
$

注意:這里我們使用相同的myimage:v1映像myimage:v1 ,只是在每個docker run命令中更改了入口點。

更多信息在這里

希望這可以幫助。

您可以使用Docker Compose輕松做到這一點。 這是一個簡單docker-compose.yml文件,僅用於說明這一點:

version: '3'

services:
  app1:
    image: alpine
    command: >
      /bin/sh -c 'while true; do echo "pre-processing"; sleep 1; done'

  app2:
    image: alpine
    command: >
      /bin/sh -c 'while true; do echo "post-processing"; sleep 1; done'

如您所見,兩個服務使用相同的映像(在此示例中為alpine ,但是它們運行的​​命令不同。 執行docker-compose up並查看輸出:

app1_1  | pre-processing
app2_1  | post-processing
app2_1  | post-processing
app2_1  | post-processing
app1_1  | pre-processing
app2_1  | post-processing
app1_1  | pre-processing
app2_1  | post-processing
...

在您的情況下,只需將映像更改為映像,例如myimage:v1 ,然后更改服務命令,以便第一個服務定義將具有command: python script1.py行,第二個服務定義將具有command: python script2.py

您在docker run命令(或Docker Compose command:字段)末尾添加的任何命令都將替換Dockerfile中的CMD。 我建議仍然放入一些有用的默認CMD,但是您始終可以

docker run --name hello myimage python script.py
docker run --name world myimage python script2.py

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM