以下是一个简单的 python 程序,用户输入一个最小值和最大值,输出二者之间的随机数:
from random import randint min_number = int(input(Please enter the min number: )) max_number = int(input(Please enter the max number: )) if (max_number < min_number): print(Invalid input – shutting down…) else: rnd_number = randint(min_number, max_number) print(rnd_number)本机上并未安装 python, 现在创建容器,并让这段代码在容器中运行。
1. 首先写一个 Dockerfile
# 从 hub.docker.com 上 pull 最新 python image FROM python # 容器内的工作目录 WORKDIR /app # copy 源代码到容器 COPY . /app CMD [“python”, “rng.py”]2. build image,使用命令
docker build .3. 创建并运行容器
对于这个程序,直接运行: docker run he_generated_id_of_the_image 会出错:
docker run the_generated_id_of_the_image // ERROR !而是要在命令中加 -it :
-it 是 -i 与 -t 的合并。-i: interactive 与容器交互-t: tty 分配一个伪 TTY, 即创建一个终端。 docker run -it the_generated_id_of_the_image用户可以在容器内输入数据,并获得输出:
PS D:python-app-starting-setup> docker run -it 7e318e98ef5c Please enter the min number: 12 Please enter the max number: 24 22 PS D:python-app-starting-setup>4. 重启容器
docker run 重新生成新的容器,默认模式为 attached 即附加模式,使用附加模式时,容器在前台运行,可以监听该容器的输出,同时终端被阻塞,无法响应用户的新的输入命令。
docker start 则重启运行现有的容器, 默认模式为 detached 即分离模式,容器在后台运行。
如果应用程序,依赖项,以及源代码等等都没有改变,也就是 image 没有变,那么没有必要创建全新的容器,而是直接用 docker start 重新启动现有的容器就可以。
使用docker ps -a 或者 docker container ls -a 列出全部正在运行以及已经停止的容器:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4082f25c47bb 7e318e98ef5c “python rng.py” 4 minutes ago Exited (0) 4 minutes ago jovial_pasteur ce7598ddbebb 7e318e98ef5c “python rng.py” About an hour ago Exited (1) About an hour ago nostalgic_cohen df76886dc1a4 7e318e98ef5c “python rng.py” About an hour ago Exited (0) About an hour ago clever_hertz 71b61835bfb3 python “python3” 2 hours ago Exited (0) 2 hours ago hardcore_payne 89211c5ce6cd 834a8f2178cf “docker-entrypoint.s…” 3 hours ago Exited (137) 2 hours ago goofy_sinoussi现在重启容器,重新执行 python 程序,使用命令:
docker start -a -i 4082f25c47bb-t 不需要,因为已经被 memorized,运行结果:
PS D:python-app-starting-setup> docker start -a -i 4082f25c47bb
Please enter the min number: 1
Please enter the max number: 100
44
PS D:udemyDocker-Maxpython-app-starting-setup>
暂无评论内容