Dockerfile构建python镜像
閱讀本文約花費: 2 (分鐘)
最近有个python开发的数据清洗项目,想整合到现有公司Jenkins的自动发布流程,并且容器化。(目前主流开发语言是Java)于是参照现有java版本的Dockerfile,写了一个简单的python版本Dockerfile
java版本的Dockerfile:
# 1FROM xxx:stable7.6LABEL maintainer "xxx.com"USER rootRUN chown -R dev:dev /data USER dev# 2ARG source_path=base-user/base-user-provider/targetARG target_path=/data/base_user# 3RUN mkdir -p ${target_path}/{lib,logs,config,bin}RUN chown -R dev:dev ${target_path}# 4COPY base-user/base-user-provider/target/*.jar ${target_path}/lib/ #fix docker 18.05 bugRUN true COPY ./endpoint.sh ${target_path}/bin/#fix docker 18.05 bugRUN true STOPSIGNAL SIGTERM# 5WORKDIR ${target_path}/bin/# 6CMD 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版本的
# 1FROM python:3.6 WORKDIR /usr/src/app RUN mkdir -p /data/data-processor/logs COPY ./requirements.txt .COPY ./ /data/data-processor/# 2RUN 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”])