Docker 打包Python项目详细教程(Windows)

一、Docker的安装

参考教程

Windows安装使用Docker,方便你的开发和部署(DockerDesktop篇)_windows安装docker-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/qq_60750453/article/details/128636298

可以使用以下命令,验证docker是否安装成功

1. 输入docker version,出现客户端和服务器的信息

2. 输入docker run hello-world,并在Docker Desktop验证hello-world镜像是否拉取成功

二、创建镜像(使用Dockerfile本地创建镜像)

(1)本地创建一个Python项目(新建虚拟环境,避免等会要打包的库太多了),编写一个简单的爬虫代码demo.py(网址url随意切换),目录结构如下

(2)在当前目录终端,使用pip freeze > requirements.txt命令将项目依赖库进行导出。命令执行完成后会生成一个叫requirements.txt的文件

(3)编写Dockerfile(无类型文件),可以直接点击vscode新建文件按钮(不要加任何文件类型)

 

(4)打开cmd终端,进入Python项目目录,运行docker build -t demo:v1 .  命令构建镜像,这里注意后面有一个 . (如果出现报错,记得检查网络环境,另一种可能是Dockerfile文件受损,可以重新生成再试试)。在Docker Desktop中可以查看到我们创建的镜像。

docker build -t Name:TagName .(如果不加标签,默认标签为latest)

  1. -t参数指定构建成后,镜像的仓库、标签等,

  2. Name 给镜像取的名字

  3. TagName 给镜像取的标签

  4. 最后的 . 表示 Dockerfile 文件在当前目录下

三、创建并启动容器(在容器中运行镜像)

(1)创建容器并运行镜像有很多不同的方式,命令具体用法如下:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

OPTIONS说明(常用):有些是一个减号,有些是两个减号

--name=“容器新名字” 为容器指定一个名称;
-d: 后台运行容器并返回容器ID,也即启动守护式容器(后台运行);

-i:以交互模式运行容器,通常与 -t 同时使用;
-t:为容器重新分配一个伪输入终端,通常与 -i 同时使用;也即启动交互式容器(前台有伪终端,等待交互);

(2)我们现在有一个已经创建好的demo镜像,我们执行docker run -d --name=container1 demo命令,容器会在后台运行并返回容器ID。注意这里没加标签默认是latest,如果你之前创建镜像的时候使用了其他标签,需要加上 :[标签],要不然系统会找不到镜像。

(3)如果你想以交互的模式启动一个容器,可以执行docker run -it --name=container2 demo /bin/bash命令,我们希望有个交互式 Shell(类似于Linux),因此用的是 /bin/bash命令。我们成功进入到在Dockerfile中指定的工作目录的终端,输入exit可以退出直接退出容器终端。

(4)输入docker ps -a命令可以查看我们刚创建的两个容器,也可以在Docker Desktop中查看到我们创建的容器

四、修改镜像文件内容(在Docker Desktop上操作)

(1)下面是我们刚刚创建的容器,点击右边的执行按钮,我们就会在容器中运行镜像,点击他的名字,可以进入到具体页面

(2)在容器的文件系统中,我们可以在code文件夹下找到我们的demo.py代码

(3)右键点击编辑按钮 ,可以修改我们的demo.py文件

(4)修改后,CTRL+S保存

(5)点击运行容器按钮,执行demo.py文件,成功输出新的内容,修改成功

五、从容器内拷贝文件到主机上

(1)docker cp 容器ID:容器内路径 目的主机路径,注意容器内的路径要加上指定的工作路径(Dockerfile文件中指定的),这里1.txt文件在code文件夹下。

六、镜像文件的打包和导入

(1)使用镜像打包命令:docker save ID >  [path].tar 。[path]指定存放的路径(自己主机上)。打包完成可以在D盘下看到多了一个tar包,这就是你装好环境的docker镜像。

(2)把这个镜像的tar包发送给别人,其他人使用docker load -i save_demo.tar命令导入你的镜像,输出镜像的ID,此时还看不到容器。运行这个镜像,才进入对应的容器,然后就可以在相应目录下运行你的代码了。

 

  • 21
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Docker 是 PaaS 提供商 dotCloud 开源的一个基于 LXC 的高级容器引擎,源代码托管在 Github 上, 基于go语言并遵从Apache2.0协议开源。 Docker自2013年以来非常火热,无论是从 github 上的代码活跃度,还是Redhat在RHEL6.5中集Docker的支持, 就连 Google 的 Compute Engine 也支持 docker 在其之上运行。 一款开源软件能否在商业上功,很大程度上依赖三件事 - 功的 user case(用例), 活跃的社区和一个好故事。 dotCloud 自家的 PaaS 产品建立在docker之上,长期维护且有大量的用户,社区也十分活跃,接下来我们看看docker的故事。 环境管理复杂 - 从各种OS到各种中间件到各种app, 一款产品能够功作为开发者需要关心的东西太多,且难于管理,这个问题几乎在所有现代IT相关行业都需要面对。 云计算时代的到来 - AWS的功, 引导开发者将应用转移到 cloud 上, 解决了硬件管理的问题,然而中间件相关的问题依然存在 (所以openstack HEAT和 AWS cloudformation 都着力解决这个问题)。开发者思路变化提供了可能性。 虚拟化手段的变化 - cloud 时代采用标配硬件来降低本,采用虚拟化手段来满足用户按需使用的需求以及保证可用性和隔离性。然而无论是KVM还是Xen在 docker 看来,都在浪费资源,因为用户需要的是高效运行环境而非OS, GuestOS既浪费资源又难于管理, 更加轻量级的LXC更加灵活和快速 LXC的移动性 - LXC在 linux 2.6 的 kernel 里就已经存在了,但是其设计之初并非为云计算考虑的,缺少标准化的描述手段和容器的可迁移性,决定其构建出的环境难于迁移和标准化管理(相对于KVM之类image和snapshot的概念)。docker 就在这个问题上做出实质性的革新。这是docker最独特的地方。 VM技术和容器技术对比 VM技术和容器技术对比 面对上述几个问题,docker设想是交付运行环境如同海运,OS如同一个货轮,每一个在OS基础上的软件都如同一个集装箱,用户可以通过标准化手段自由组装运行环境,同时集装箱的内容可以由用户自定义,也可以由专业人员制造。这样,交付一个软件,就是一系列标准化组件的集合的交付,如同乐高积木,用户只需要选择合适的积木组合,并且在最顶端署上自己的名字(最后个标准化组件是用户的app)。这也就是基于docker的PaaS产品的原型。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值