小白新手python项目使用docker
1 下载和安装
下载安装docker
docker官方网站
windows版本
2 文件夹准备
准备需要上传到Linux系统,用于生成Docker镜像的文件夹
比如要上传的是文件夹curve,要包括
- jx_curve项目文件 , 包含:
- 项目内容 :包含工程的代码 (需要找到项目启动的主程序,本文为 main.py,的位置)
- requirements :运行工程所需要的环境列表
- Dockerfile
目录结构如下
curve/
├── jx_curve/ # 目录
│ ├── package/ # 子目录
│ └── requirements.txt
├── Dockerfile
└── other_file.txt # 其他文件

生成 requirements:
项目文件夹jx_curve,就是整个项目
然后进入工程同级根目录jx_curve,执行
pip freeze > requirements.txt
然后项目文件的根目录就会得到一个 requirements文件

编写dockerfile

#基于的基础镜像
FROM python:3.7
# 设置code文件夹是工作目录
WORKDIR /code
# 先复制 requirements.txt 并安装依赖(优化 Docker 缓存)
COPY ./jx_curve/requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# 复制整个 jx_curve 目录(包括 package/) copy后目录结构见下 (把jx_curve文件下的所有东西copy到 当前工作目录下)
COPY ./jx_curve/ .
# 暴露端口
EXPOSE 8000
# 设置容器启动时运行的命令
# 直接运行 main.py(推荐)
CMD ["python", "./package/main.py"]
#等同于 CMD ["python", "/code/package/main.py"]
目录和点的区别
其中很多人喜欢 执行 ADD . .
code文件夹是工作目录时,执行 COPY ./jx_curve/ . 后,镜像的 /code 目录结构:
/code/
├── package/ # jx_curve/package/ 的内容直接放在 /code/ 下
│ ├── __init__.py
│ └── main.py
└── requirements.txt # jx_curve/requirements.txt 直接放在 /code/ 下
code文件夹是工作目录时,执行 ADD . . 后的镜像目录结构(假设 WORKDIR 是 /code)
/code/ # 镜像的工作目录
├── jx_curve/ # 原样复制
│ ├── package/
│ └── requirements.txt
├── Dockerfile # 也被复制进去了(通常不需要)
└── other_file.txt # 其他文件也会被复制
注意copy和add的区别
假设当前目录结构:
.
├── app.tar.gz
├── data.json
└── src/
├── main.py
└── utils.py
使用 COPY . /code 的结果:
/code/
├── app.tar.gz # 保持为压缩包文件
├── data.json
└── src/
├── main.py
└── utils.py
使用 ADD . /code 的结果:
/code/
├── app/ # 自动解压的app.tar.gz内容
├── data.json
└── src/
├── main.py
└── utils.py(E:\markDown\photo\image-20250415162106792.png)
3、文件夹 压缩成zip,上传到linux
可以使用finalshell进行上传
压缩:
将 curve文件夹,压缩成zip包,上传到Linux虚拟机系统中的某个路径下面
解压:
执行命令:unzip curve.zip
进入curve文件夹
创建镜像:
执行命令:docker build -t ef_nfcs_img .
ef_nfcs_img 为创建的镜像名称,. 表示当前目录(curve)
查看镜像是否创建成功:
执行命令:docker images
如果可以看到ef_nfcs_img的镜像,就已经存在了
4:运行镜像,生成并启动容器
执行命令:docker run -it -p 9060:9060 --name ef_nfcs ef_nfcs_img
-it:表示交互式终端的容器,非启动后立刻结束的容器
-p 9060:9060:表示将docker的9060端口,映射到Linux虚拟机的9060端口
(也就是说,访问Linux虚拟机的9060端口,就是在访问docker容器的9060端口)
–name ef_nfcs:给容器取个名字,嫌麻烦可以省去
ef_nfcs_img:容器是用哪个镜像启动的(一个容器,必须依赖一个镜像启动)
现在访问系统,只要将IP替换成虚拟机的IP:


861

被折叠的 条评论
为什么被折叠?



