Docker 打包Python项目详细教程(Windows)
清风挽醉 2024-07-26 13:07:02 阅读 78
一、Docker的安装
参考教程
Windows安装使用Docker,方便你的开发和部署(DockerDesktop篇)_windows安装docker-CSDN博客
https://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)
-t参数指定构建成后,镜像的仓库、标签等,
Name 给镜像取的名字
TagName 给镜像取的标签
最后的 . 表示 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,此时还看不到容器。运行这个镜像,才进入对应的容器,然后就可以在相应目录下运行你的代码了。
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。