简单的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????

解释

制作出来的 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就能满足我的所有需求了,还不浪费。
  • 听懂掌声

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/645528.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

RPA+AI 应用案例集合:自动推流直播

使用场景: 自动定时推流直播 使用技术: python playwright 每个解决一个小问题 During handling of the above exception, another exception occurred:Traceback (most recent call last): File "D:\pythonTryEverything\putdonwphone\not_watch_…

队列(C语言)

文章目录 [TOC](文章目录) 前言1.队列的概念及结构2.队列的实现3.相关操作的具体实现3.1.初始化队列(QueueInit)和销毁队列(QueueDestory)3.2.队尾入队(QueuePush)和队头出队(QueuePop)3.3.判空(QueueEmpty)、获得队尾元素(QueueBack)以及获得队头元素(QueueFront) 前言 前面我…

数据清洗操作及众所周知【数据分析】

各位大佬好 ,这里是阿川的博客 , 祝您变得更强 个人主页:在线OJ的阿川 大佬的支持和鼓励,将是我成长路上最大的动力 阿川水平有限,如有错误,欢迎大佬指正 前面的博客 数据分析—技术栈和开发环境搭建 …

如何从零开始搭建公司自动化测试框架?

搭建的自动化测试框架要包括API测试,UI测试,APP测试三类。以上三类其实可以简化为两类,那就是: 1)接口自动化测试框架搭建 2)UI自动化测试框架搭建。 没问题,安排,且是手把手教你…

国内服务器未备案使用域名443访问的方法

参考国内服务器未备案使用域名443访问的方法 | LogDicthttps://www.logdict.com/archives/guo-nei-fu-wu-qi-wu-fa-shi-yong-yu-ming-de-jie-jue-fang-fa

科林Linux6_网络

#include<sys/socket.h> #include<arpa/inet.h> //大小端转换 #include<netdb.h> //DNS一、Socket套接字 为了开发网络应用&#xff0c;系统提供一套API函数接口&#xff0c;用于网络应用开发&#xff0c;这些接口称为套接字函数 struct sockaddr_in…

【C++ —— 哈希】学习笔记 | 模拟实现封装unordered_map和unordered_set

文章目录 前言一、unordered系列关联式容器1.1 unordered_map1.2 unordered_set 二、底层结构2.1哈希概念&#xff08;哈希是一种算法思想&#xff09;2.2哈希冲突2.3 解决哈希冲突方法&#xff1a;1.直接定址法&#xff08;值和位置关系是唯一关系&#xff0c;每个人都有唯一位…

python画图:matpolt,设置图片尺寸,字体大小,副坐标轴,保存

文章重心: 写论文的时候,图片的大小,字体的大小,副坐标轴,这些都是很重要的因素,保存一下之前用过的画图代码单图多图(两个子图)堆叠柱状图两个Y轴的图问题: python保存的时候,我选择的是svg,但是这样图片会比较大,查重什么的需要把图片都删了(一般有文件大小限制…

网页出现为了更好的体验,请将手机竖过来

前言 网站:https://act.xinyue.qq.com/commercial/act/af93dc75d9fc541d4833f05e98a9f54b6pre/index.html 发现必须要手机端才可以,否则显示"为了更好的体验,请将手机竖过来"的提示信息 很好奇怎么做的,UA?发现更改UA后依旧显示,后面看代码就知道了 可以看到是通过…

单片机原理及技术(二)—— AT89S51单片机(一)(C51编程)

目录 一、AT89S51单片机的片内硬件结构 二、AT89S51的引脚功能 2.1 电源及时钟引脚 2.2 控制引脚 2.3 并行 I/O口引脚 三、AT89S51的CPU 3.1 运算器 3.1.1 算术逻辑单元&#xff08;ALU&#xff09; 3.1.2 累加器A 3.1.3 程序状态字寄存器&#xff08;PSW&#xff09…

【狂神说Java】Redis笔记以及拓展

一、Redis 入门 Redis为什么单线程还这么快&#xff1f; 误区1&#xff1a;高性能的服务器一定是多线程的&#xff1f; 误区2&#xff1a;多线程&#xff08;CPU上下文会切换&#xff01;&#xff09;一定比单线程效率高&#xff01; 核心&#xff1a;Redis是将所有的数据放在内…

数据结构 —— 栈 与 队列

1.栈 1.1栈的结构和概念 栈&#xff08;Stack&#xff09;是一种特殊的线性数据结构&#xff0c;它遵循后进先出&#xff08;LIFO&#xff0c;Last In First Out&#xff09;的原则。栈只允许在一端插入和删除数据&#xff0c;这一端被称为栈顶&#xff08;top&#xff09;&a…

第一节:Redis的数据类型和基本操作

最近整理了关于Redis的一些文档&#xff0c;分享给大家&#xff0c;后续会持续更新...... Redis的数据类型 字符串String String&#xff1a;字符串&#xff0c;可以存储String、Integer、Float型的数据&#xff0c;甚至是二进制数据&#xff0c;一个字符串最大容量是512M 列表…

Linux指令初识

ls:显示当前目录底下的指定文件或目录 ls -l更详细的信息 ls -a显示当前目录下的所有文件 命令中的选项可以一次传递多个 ,例如&#xff1a;ls -al 命令和选项有必须一个或多个空格 以.开头的文件&#xff0c;为隐藏文件ls -a可以看到,ls -l看不见 支持命令拼在一起&#…

【vue2配置】Vue Router

Vue Router官网 1、npm install vue-router4 2、创建模块&#xff0c;在src目录小创/views/map/MapIndex.vue模块和创router/index.js文件 3、在router/index.js配置路由 import Vue from "vue"; import Router from "vue-router"; // 引入模块 const Ma…

C++学习/复习5--构造函数与初始化/static成员/友元/内部类/匿名对象/编译器的拷贝构造优化

一、本章概要 二、再谈构造函数 1.构造体赋初值与初始化 2.初始化列表与初始化 2.1定义 2.2注意事项与举例 3.explicit关键字与构造函数 3.1隐式类型转换 也叫做自动类型转换 这种转换通常是从存储范围小的类型到存储范围大的类型&#xff0c;或者是从低精度的数值类型到高…

【编译原理--- 汇编、编译、解释系统】

汇编、编译、解释系统 1.编译方式和解释方式 程序种类是否生成目标程序是否参与程序的运行过程程序执行速度可移植性编译程序生成不参与快差解释程序不生成参与慢好 编译方式过程&#xff1a;词法分析、语法分析、语义分析、&#xff08;中间代码生成、代码优化、&#xff0…

【动手学强化学习】第 6 章 Dyna-Q 算法知识点总结

【动手学强化学习】第 6 章 Dyna-Q 算法知识点总结 本章知识点基于模型的强化学习与无模型的强化学习方法简介无模型的强化学习方法基于模型的强化学习方法 强化学习算法的评价指标Dyna-Q算法Dyna-Q 算法的具体流程Dyna-Q 代码实践 本章知识点 基于模型的强化学习与无模型的强…

opencv进阶 ——(四)图像处理之去高光

去高光步骤&#xff1a; 1、转换成灰度图 2、二值化图像&#xff0c;得到高光区域 3、进行膨胀操作&#xff0c;放大高光区域&#xff0c;以此得到高光蒙版 4、通过illuminationChange函数对高光区域消除高光

VMware安装Ubuntu系统(超详细)

一.Ubuntu官网下载镜像 Ubuntu官网&#xff1a;Enterprise Open Source and Linux | Ubuntu 二.安装Ubuntu系统 选择文件->创建虚拟机新建虚拟机&#xff08;ControlN&#xff09;&#xff0c;这里直接选择典型即可 选择稍后安装系统 选择linux Ubuntu 64位 填写虚拟机名称…