自学内容网 自学内容网

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)!