docker-基于docker打包发布一个python应用
1、熟悉一下命令
1.1 重新启动已存在的容器:
docker start 容器名
1.2 关闭一个正在运行的容器
docker stop 容器名
1.3 查看正在运行的容器
docker ps
1.4 创建镜像
docker build -t <镜像名称>:<标签> <Dockerfile路径>
参数说明
-t <镜像名称>:<标签>
:指定创建的镜像名称和标签(版本)。例如,demo:v1。如果不指定标签,默认会使用 latest。
<Dockerfile路径>
:指定 Dockerfile 所在的路径,一般是当前目录 .
1.4 基于镜像创建并启动新的容器实例,随机定义容器名称
docker run 镜像名
上面的命令来基于镜像创建并启动一个新容器时,如果没有手动指定容器名称,Docker 会自动为新容器分配一个随机的名称。这个名称通常由两个部分组成,例如 focused_tesla 或 angry_bardeen,它们是随机组合的两个词。
可以通过以下方式查看新创建的容器名称:
docker ps -a
这条命令会显示所有容器的列表(包括正在运行的和已停止的),其中会显示容器的名称。
1.5 基于镜像创建并启动新的容器实例,并自定义容器名称
如果你希望为新容器指定一个特定的名称,可以使用 --name 选项,例如:
docker run --name 容器名 镜像名
这样,创建的容器名称就会是 容器名
。
1.6 从主机往容器复制文件
docker cp <本地主机文件路径> <容器ID>:/path/to/destination
1.7 从容器复制文件到主机
docker cp <容器ID>:/path/to/file <本地主机目标路径>
1.8 打包镜像为tar包
docker save ID > [path].tar
[path]指定存放的路径(自己主机上)。打包完成可以在D盘下看到多了一个tar包,这就是装好环境的docker镜像。
2、使用Dockerfile在本地创建镜像
2.1 先得有一个python项目
(1)以爬虫项目为例,首先创建一个爬虫代码,代码文件名为demo.py
import requests
reponse = requests.get(url="www.baidu.com")
print(reponse.text)
(2)在上面的文件夹下,执行下面命令,
conda create -n pachong python=3.12
conda activate pachong
pip install requests
pip freeze > requirements.txt
在当前目录终端,使用pip freeze > requirements.txt
命令将项目依赖库进行导出。命令执行完成后会生成一个叫requirements.txt的文件,文件内的内容如下:
certifi==2024.8.30
charset-normalizer==3.4.0
idna==3.10
requests==2.32.3
setuptools==75.1.0
urllib3==2.2.3
wheel==0.44.0
(3)编写Dockerfile文件
FROM python:3.12
# 将当前目录.添加到code文件夹下
ADD . /code
# 设置工作目录
WORKDIR /code
# # 设置时区为东八区(中国标准时间)
# RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' > /etc/timezone
# 安装依赖
RUN pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
# 设置容器启动时运行的命令
CMD ["python", "app.py"]
(4)创建镜像
打开cmd终端,进入Python项目目录,运行
docker build -t demo:v1 .
构建镜像,成功界面如下
在构建镜像的过程中也会出现一些问题,比如:
这种原因是在拉取镜像的时候网站用站用不了,需要更换国内的镜像网站。参考:Docker 配置国内镜像源
给docker添加:
{
"registry-mirrors": [
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com",
"https://dockerhub.azk8s.cn",
"https://mirror.ccs.tencentyun.com",
"https://registry.cn-hangzhou.aliyuncs.com",
"https://docker.mirrors.ustc.edu.cn",
"https://docker.m.daocloud.io",
"https://noohub.ru",
"https://huecker.io",
"https://dockerhub.timeweb.cloud"
]
}
可以暂时解决该问题。
在docker中查看到创建的镜像,如下:
也可以用docker images
查看镜像有哪些
3、基于镜像创建并启动容器
现在有一个已经创建好的demo镜像,执行
docker run -d --name=container1 demo:v1
此时会基于镜像demo创建并启动新的容器实例,并自定义容器名称为container1,在写镜像的时候得写上镜像的版本,方可执行成功。(这里没加标签默认是latest,如果你之前创建镜像的时候使用了其他标签,需要加上 :[标签],要不然系统会找不到镜像。)
使用docker ps -a
查看刚才创建的容器
4、修改镜像中文件
4.1 发现镜像中文件有错
在Docker Desktop中点击容器名,执行了一下,在Logs中发现报错:
此时我们有了修改镜像中文件的需求,我们就来学一学怎么修改镜像中文件。
解决容器中文件有错误的思路:
(1)在主机上改好一个能正常运行的文件,复制到容器中,覆盖掉容器中的原文件
(2)
4.2 从主机复制文件到容器
命令:
docker cp D:\project_cv\5 app-docker\app.py a06b229d8fe82470e0d01299bfc51a56ad9bdfa3343daa98584a37e1d950b4de:/code/
出错,原因是文件路径中包含了空格,而 Docker 命令无法正确解析带空格的路径。需要对路径中的空格进行处理,可以用双引号或反斜杠(\)来处理路径中的空格。
因此使用双引号包裹文件路径
,即可成功
方法有很多(目的就是消除目录中有空格的问题):
1、用双引号包裹文件路径
2、用反斜杠转义空格
3、切换到目标目录再执行(即先到5 app-docker目录下)运行
docker cp app.py a06b229d8fe82470e0d01299bfc51a56ad9bdfa3343daa98584a37e1d950b4de:/code/
复制完文件,运行容器,执行结果如下:
5、镜像文件的打包和导入
5.1 使用镜像打包命令
docker save ID > [path].tar
[path]指定存放的路径(自己主机上)。打包完成可以在D盘下看到多了一个tar包,这就是你装好环境的docker镜像。
5.2 待写
把这个镜像的tar包发送给别人,其他人使用
docker load -i save_demo.tar
命令导入你的镜像,输出镜像的ID,此时还看不到容器。运行这个镜像,才进入对应的容器,然后就可以在相应目录下运行你的代码了。
docker run -it ID
参考:Docker 打包Python项目详细教程(Windows)
待写待写待写待写待写待写待写
待写待写待写待写待写待写待写
待写待写待写待写待写待写待写
待写待写待写待写待写待写待写
待写待写待写待写待写待写待写
待写待写待写待写待写待写待写
待写待写待写待写待写待写待写
待写待写待写待写待写待写待写
待写待写待写待写待写待写待写
待写待写待写待写待写待写待写
待写待写待写待写待写待写待写
待写待写待写待写待写待写待写
待写待写待写待写待写待写待写
待写待写待写待写待写待写待写
待写待写待写待写待写待写待写
待写待写待写待写待写待写待写
待写待写待写待写待写待写待写
待写待写待写待写待写待写待写
原文地址:https://blog.csdn.net/qq_45893319/article/details/143727464
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!