docker build steps
- 编辑dockerfile文件
- 由于本次镜像的有些依赖自己也有依赖,为了保持镜像的精简性,这里采用分步制作,所谓分步,就是把依赖在第一个镜像内编译完成之后,复制给第二个镜像,这样第二个镜像内就不会有编译工具等不需要的东西了。
# first step
FROM python:2.7-alpine as builder # 每个FROM就是制作一个指定的基础镜像
# construct the virtualenv
ADD requirements.txt requirements.txt # 把项目需要的依赖映射到docker镜像中
# RUN命令是运行指定命令,就是在镜像内的终端执行命令
# sed:为直接修改文件,这里是修改了镜像内的源地址
# && \ :是把多个命令放在一行执行
# apk: 安装软件 ,由于有些依赖需要编译,这里还需要下载安装包-dev(-dev是开发者在编辑项目时需要的东西,安装-dev结尾的软件之后会自动把它的依赖安装好)
# 最后是为了安装虚拟环境和安装requirements的包
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && \
apk --no-cache add alpine-sdk libxml2-dev linux-headers libxslt-dev && \
pip install virtualenv && \
virtualenv /.venv && \
/.venv/bin/pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
# second step
FROM python:2.7-alpine # 同样制作一个指定的基础镜像
COPY --from=builder /.venv /.venv # 把第一个镜像的虚拟环境copy过来
ADD ./src /fastone-cwl # 把项目映射到镜像内
# sed:为直接修改文件,这里是修改了镜像内的源地址
# find —— add :此步为检测复制来的虚拟环境中的路径,对比缺少哪些包,会自动安装对应的包
# 在第一步中额外安装的包需要在add后面添加,-dev结尾的就可以舍弃了
# ln -s: 软连接,把cwl-runner放在bin目录下,可直接执行
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && \
find /.venv/ -name *.so | \
xargs scanelf -n | \
awk 'NR>1 {print $2}' | \
tr ',' '\n' | \
sort | \
uniq | grep -v libpython | \
while read so; do echo so:$so; done | \
xargs apk --no-cache add nodejs && \
ln -s /fastone-cwl/cwl-runner /usr/bin
- 由于我们用的虚拟环境,所以写好文件之后需要切换环境,这里要改cwl-runner中python在shell的位置
#!/usr/bin/env python # 修改这个
import sys
sys.path.append('..')
from fastone_cwl.cwl_runner import main
sys.exit(main(sys.argv[1:]))
**************************************************************************
**************************************************************************
#!/.venv/bin/python
import sys
sys.path.append('..')
from fastone_cwl.cwl_runner import main
sys.exit(main(sys.argv[1:]))
- 执行build命令
docker build -t r.fastonetech.com:5000/fastone-cwl .
- build过程中可能会出现错误,必要时根据错误log修改dockerfile
- 这里报错就是少了libxml2 libxml2-dev两个包
- 运行image
docker run r.fastonetech.com:5000/fastone-cwl cwl-runner
- 上传镜像
docker push r.fastonetech.com:5000/fastone-cwl
网友评论