Dockerfile构建python镜像

Dockerfile构建python镜像

Scroll Down

最近有个python开发的数据清洗项目,想整合到现有公司Jenkins的自动发布流程,并且容器化。(目前主流开发语言是Java)于是参照现有java版本的Dockerfile,写了一个简单的python版本Dockerfile

java版本的Dockerfile:

# 1
FROM xxx:stable7.6
LABEL maintainer "xxx.com"
USER root
RUN chown -R dev:dev /data

USER dev

# 2
ARG source_path=base-user/base-user-provider/target
ARG target_path=/data/base_user

# 3
RUN mkdir -p ${target_path}/{lib,logs,config,bin}
RUN chown -R dev:dev ${target_path}

# 4
COPY base-user/base-user-provider/target/*.jar ${target_path}/lib/


#fix docker 18.05 bug
RUN true

COPY ./endpoint.sh ${target_path}/bin/
#fix docker 18.05 bug
RUN true

STOPSIGNAL SIGTERM
# 5
WORKDIR ${target_path}/bin/
# 6
CMD bash -C endpoint.sh ${ACTIVE_ENVIRONMENT=TEST} ${Node=1}

简单讲解一下
1️⃣ 基础镜像使用了xxx:stable7.6
2️⃣ 定义了参数source_path、target_path
3️⃣ 执行创建目录命令并将文件拥有者修改为dev
4️⃣ 将target目录下的所有jar 拷贝进 镜像的$/lib 目录下
5️⃣ 制定工作目录(相当于cd)
6️⃣ 执行endpoint.sh脚本
endpoint.sh脚本其实核心就是java -jar *.jar,因为接入了apollo配置中心,所以多环境配置的判断都放在了脚本里面处理。

😅😅😅

参照了上面的仿写了一个python版本的

# 1
FROM python:3.6

WORKDIR /usr/src/app

RUN mkdir -p /data/data-processor/logs

COPY ./requirements.txt .
COPY ./ /data/data-processor/
# 2
RUN pip install --no-cache-dir -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/

WORKDIR /data/data-processor/

CMD bash -C endpoint.sh ${ACTIVE_ENVIRONMENT=TEST} ${Node=1}

基本逻辑跟JAVA版本的一致,区别是
1️⃣ 基础镜像使用了python3.6
2️⃣ 需要先安装 requirements.txt 中的依赖库
3️⃣ python app.py 的命令封装在了endpoint.sh脚本,所以最后也是以脚本的方式执行(相当于命令CMD ["python", "app.py"]