在 docker 中部署 python 工程
安装 docker已经按照:docker 命令 教程,安装完成 docker,并创建了包含完整 requirement 的镜像:py_container_1工程上传首先将本地(线上)工程目录 zip 压缩,并上传到 linux 实体机,后解压缩,进入到工程目录:cd /home/q/www/python_project_1Dockerfile 文件创建在同级目录下创建 Dockerfile 文件(
安装 docker
已经按照:docker 命令 教程,安装完成 docker,并创建了包含完整 requirement 的镜像:py_container_1
工程上传
首先将本地(线上)工程目录 zip 压缩,并上传到 linux 实体机,后解压缩,进入到工程目录:cd /home/q/www/python_project_1
Dockerfile 文件创建
在同级目录下创建 Dockerfile 文件(无扩展名): Dockerfile 的指令详解参考:http://www.ityouknow.com/docker/2018/03/15/docker-dockerfile-command-introduction.html
# 基于镜像基础
FROM py_container_1:3.6
# 设置代码文件夹工作目录
WORKDIR /home/q/www/python_project_1
# 复制当前代码文件(. 是指当前文件夹下的所有文件包括目录等)到容器指定目录中
ADD . /home/q/www/python_project_1
# Run servers.py when the container launches,这里的 servers.py 是工程的启动代码
CMD ["python", "servers.py"]
- 其中 FROM 是指从哪个镜像创建(这里用的是已经安装好 requirement 的镜像,因此
不需要增加 RUN pip install -r requirements.txt
的指令了) - WORKDIR 用于在容器内设置一个工作目录:设置后,Dockerfile 中其后的命令 RUN、CMD、ENTRYPOINT、ADD、COPY 等命令都会在该目录下执行。
COPY <源路径>... <目标路径>
,COPY 指令将从构建上下文目录中 <源路径> 的文件/目录复制到新的一层的镜像内的<目标路径>位置,例子:COPY package.json /usr/src/app/
ADD <源路径>... <目标路径>
:COPY 和 ADD 的用法一样,ADD 基础上增加了一些功能。比如 <源路径> 可以是一个 URL- CMD 与 RUN 指令的区别:RUN 在构建的时候执行,并生成一个新的镜像,CMD 在容器运行的时候执行,在构建时不进行任何操作:
CMD ["executable","param1","param2"]
创建工程的镜像
然后执行:sudo docker build -t python_project_1 .
(python_project_1 为创建的镜像名称,后面有个 . 表示当前目录)
创建工程的容器
然后执行:sudo docker run -it -p 1234:9002 --name project_test python_project_1
,运行镜像,生成并启动一个叫 project_test 的容器,启动时的日志,和发布线上时的日志是一样的
调用
POST 请求时,使用的是 Linux 机器的 ip 或名字(也就是截图里的 2345 ),然后 +加上 Linux 的实际端口号(不是容器的端口号)
更多推荐
所有评论(0)