0%

Python项目Docker打包

一、创建docker目录

在目录下面新建三个文件:

  • Dockerfile
  • 项目文件
  • 项目依赖: requirements.txt

Dockerfile文件内容格式如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 基于镜像基础
#FROM python:3.6
FROM python:3.6-slim-stretch #有更小的体积

# 维护者信息
MAINTAINER name name@163.com

# 复制当前代码文件到容器中 /app
ADD . /app

# 设置app文件夹是工作目录 /app
WORKDIR /app
#解决Dockers中打印日志不及时的问题
ENV PYTHONUNBUFFERED=0

# 安装所需的包,默认为使用python官方镜像源,安装 比较慢
#RUN pip install -r requirements.txt
#可以修改为清华源
RUN pip install -r requirements.txt - i https://pypi.tuna.tsinghua.edu.cn/simple

# Run test.py when the container launches
CMD ["python", "/app/test/test.py"]

自动生成requirements.txt

进入需要生成文件的目录,执行pip freeze > requirements.txt,此方法会包含环境所有的依赖包。

Python Docker镜像

Docker python基础镜像

1
FROM python:3.6

Alpine Linux ,最初是为小型设备设计的操作系统,因此往往有小包装。

1
FROM python:3.6-alpine

Debian Stretch
,安装了许多常见软件包。镜像本身很大,但理论上这些软件包是通过其他Docker镜像将使用的公共镜像层安装的,因此整体磁盘使用率会很低。

1
FROM python:3.6-stretch

Debian Stretch slim
版。这缺少了通用软件包的层,因此镜像本身要小得多,但如果你使用Stretch以外的许多其他Docker镜像,整体磁盘使用量会更高一些。

1
FROM python:3.6-slim-stretch

查看Python镜像大小,其中alpine 是最小的。

1
2
3
4
5
$ docker images | grep python
python 3.6-alpine bb1ccaa5880c 4 days ago 86.7MB
python 3.6-stretch 32260605cf7a 7 days ago 929MB
python 3.6-slim-stretch e0d20fa24f01 7 days ago 143MB
python 3.6 ad01f54ca3a9 2 months ago 923MB

对于想要小镜像的人来说,一个常见的建议是使用Alpine Linux,但使用它会产生一些问题。首先,Alpine的库比我上面提到的其他Linux发行版少得多,因此你可能会缺少库。
Alpine和其他Linux发行版之间也存在重大差异:Alpine使用不同的C库,而不是更常见的glibc。 理论上,musl和glibc 大多是兼容的,但这些差异可能会导致奇怪的问题。
大多数这些问题已经得到解决,但可能发现更多问题。为了减少镜像体积,而导致可能发生的不确定性问题,这是不值得的。因此,这里建议不要使用Alpine。