简单的python程序,把它做成docker镜像

1,python程序准备

在linux主机的/tmp/pythontest路径下创建一个test.py程序文件,
程序内容很简单
就是一句打印

print('hello world, docker')

在这里插入图片描述

2,再准备一个Dockerfile文件

这个Dockerfile也是放在主机linux中的/tmp/pythontest路径下,文件名就叫做dockerfile,
Dockerfile文件内容具体长这样

FROM python:3.8
WORKDIR /app
COPY test.py /app/
CMD ["python", "test.py"]

在这里插入图片描述

  • 解释:
    FROM python:3.8:指定使用 Python 3.8 作为基础镜像。
    WORKDIR /app:设置容器工作目录为 /app,且这个路径是容器内部的,不是外部主机linux上的。
    COPY test.py /app/:将你的 Python 程序文件(在当前目录下)复制到容器的 /app 目录中。
    CMD ["python", "test.py"]:指定容器启动时执行的命令,即运行 Python 程序。
    在同一个目录下,将上述 Python 程序保存为 your_program.py。

注意:
Dockerfile文件没有后缀,名字要含有“dockerfile”字样,你取名为别的会报错
命令约定全部使用大写,如RUN,ADD,FROM
第一条命令必需是FROM,作用是指定在哪个基础镜像上创建镜像

3,制作镜像

还是在这个/tmp/pythontest路径中执行这条命令,因为无论你选择将 Dockerfile 放在哪里,确保在构建 Docker 镜像时,从包含 Dockerfile 文件的目录进行操作

docker build -t testimage .

/tmp/pythontest该目录中构建一个名叫testimage 的Docker 镜像。

  • 还有一点需要注意的是,这条命令后面一定要加一个空格和一个点,不然会报错。这个点就是指当前Dockerfile 文件所在目录,或者你也可以指定Dockerfile 的绝对路径

在这里插入图片描述
这是正在制作镜像的过程中,时间还挺久的,想不到就这么一句python程序也要制作这么久。。。。

4 查看制作好的镜像

docker images

发现本地镜像库里面已经有了一个testimage的镜像了。
在这里插入图片描述

  • 有一个疑问我没搞明白,为什么就这么一句python语句,制作出来的镜像这么大???996M,真离谱啊,是不是它直接把pyhon3.8这个镜像下载下来,然后再加上一句我的那句test.py????

4.1 解释

制作出来的 Docker 镜像大小不仅仅取决于 Python 程序的大小,还可能受到以下因素的影响:

  • 基础镜像:你使用的基础镜像可能本身就比较大。
  • 依赖库:即使你的 Python 程序只有一句,但是可能依赖了一些较大的库。
  • 缓存:构建过程中可能会产生一些缓存文件。
  • 中间文件:构建过程中可能会创建一些中间文件。

为了减小 Docker 镜像的大小,你可以尝试以下方法:

  • 选择较小的基础镜像。
  • 清理不必要的依赖库。
  • 定期清理构建缓存。
  • 优化 Dockerfile,删除不必要的步骤。

5,运行这个镜像,

那就要启动一个容器出来,在这个容器中来运行这个testimage镜像

docker run -it --name test_container testimage

-it:表示以交互模式运行容器。
--name test_container:为容器指定一个名称,就叫test_container
testimage:是你制作的镜像的名称。
在这里插入图片描述
执行完后,就立马输出了python程序的结果了。
因为我这个程序特别简单,执行完一次就结束了,所以执行docker ps 命令(显示在运行中的容器),发现是没有test_container的。
在这里插入图片描述
所以执行docker ps -a 命令(显示本机器中所有的容器),发现是test_container的。
在这里插入图片描述

6 ,思考

我想,如果我这python程序写成一个for无限循环,那这个容器就会一直运行了把。
或者这个python程序写成一个真实的APP服务程序,那也一样的,那这个容器就会一直运行了把。

  • 然后另外就是,这里可以想到,假如我用java写了一个交友APP的服务程序,如果在传统条件下,我会把它放在一台物理机中去运行,且这台物理机的相关环境也要设置成符合这个交友APP能够正常运行的环境,然后让用户去访问这台机器。
  • 如果这时候我还想做一个在线看视频app的服务程序,也放在这台物理机中的话,就会出现问题的,因为交友APP和刷视频app运行环境肯定不会100%一模一样,那就无法兼顾这两个APP了。
  • 那我又要去买第二台物理机,用来运行这个刷视频APP。
  • 但是,这样就很亏了呀,一台物理机就运行一个服务程序,太浪费了。
  • 以前的做法是,尽量删减物理机的硬件成本,比如CPU换一般的,硬盘就挂个10块以下,不要太多不然很浪费,内核也就搞个够用就行。
  • 你要是能批量买很多服务器,那服务器厂家是愿意为你自定义配置的,但是如果你就买那么几台子,服务器厂家才懒得鸟你呢。
  • 人家生产服务器都是按照统一规格批量生产的,你爱买不买,你物理机使用率底下关我服务器生产厂家鸟事??
  • 所以这时候docker就出来了。
  • 在这篇文章中,我对这个print(’hello world, docker‘) 简单的python程序,利用python:3.8这个基础镜像,构建了一个专门来运行print(’hello world, docker‘) 的镜像和容器。
  • 换句话说,我还想为我用java写的交友程序,利用java相关的一些基础镜像,构建一个专门来运行java写的交友程序的镜像和容器。
  • 以此类推,这样我就只需要一台物理机就够啦。
  • 一台物理机上面运行多个docker就能满足我的所有需求了,还不浪费。
  • 听懂掌声
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值