[英]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.