docker打包python程序

docker安装文档:

https://docs.docker.com/docker-for-mac/#check-versions
http://www.runoob.com/docker/macos-docker-install.html

docker打包步骤(pipenv shell虚拟环境下python项目打包):

项目最终结构:
docker_test
├── Dockerfile
├── myapps
│ └── hello_world.py
└── requirements.txt
1 directory, 3 files
假设文件夹 myapps, 主入口文件 myapps/hello_world.py
(1)导出程序依赖包(生成 requirements.txt)
进入到hello_world.py目录,执行:

pipenv lock --requirements > requirements.txt

将生成的requirements.txt移动到Dockerfile同目录
(2)编写Dockfile
在docker_test目录下创建Dockfile文件,内容格式如下:

# 将官方 Python 运行时用作父镜像
FROM python:3.7
# 将工作目录设置为 /myapps
WORKDIR ./myapps
# 将当前目录内容复制到位于 /myapps 中的容器中
ADD . .
# 安装 requirements.txt 中指定的任何所需软件包
RUN pip install -r requirements.txt
# 定义环境变量
#ENV NAME World
# 在容器启动时运行 app.py
CMD ["python3", "./myapps/hello_world.py"]
#CMD ["python3","./myapps/hello_world.py","worker","-l","info"]     ##faust程序worker启动命令

(3)制作镜像
格式:

docker build -t imagename Dockerfilepath 
# imagename:镜像名称,自定义
# Dockerfilepath:Dockerfile 所在文件夹名称,当前名录为 “.” 
如:
docker build -t hello_world .

(4)运行镜像
格式:

docker run -it --name c_name imagename
-it:可交互
c_name:container名称,自定义
如:
docker run -it --name hello5 hello_world
docker run -p  192.168.31.35::9092 -it --name hello7 hello_world    #映射到宿主机192.168.31.35的9092端口,即使用宿主机的kafka

3、docker常用命令

docker container ls -a #查看container信息
docker exec -it containerID bash      #进入container
docker run -p 4000:80 imageName  #将机器的 4000 端口映射到容器的 80 端口
docker run -d -p 4000:80  imageName       # 内容相同,但在分离模式下
docker ps                                 # 查看所有正在运行的容器的列表
docker stop containerID                     # 平稳地停止指定的容器
docker ps -a           # 查看所有容器的列表,甚至包含未运行的容器
docker kill containerID                   # 强制关闭指定的容器
docker rm containerID              # 从此机器中删除指定的容器
docker rm $(docker ps -a -q)           # 从此机器中删除所有容器
docker images -a                               # 显示此机器上的所有镜像
docker rmi imagename            # 从此机器中删除指定的镜像
docker rmi $(docker images -q)             # 从此机器中删除所有镜像
docker login             # 使用您的 Docker 凭证登录此 CLI 会话
docker tag  username/repository:tag  # 标记  以上传到镜像库
docker push username/repository:tag            # 将已标记的镜像上传到镜像库
docker run username/repository:tag                   # 运行镜像库中的镜像

参考文档:
https://docs.docker-cn.com #docker中文文档

你可能感兴趣的:(docker,kafka,python)