dockerfile实例

docker build steps

  1. 编辑dockerfile文件
  • 由于本次镜像的有些依赖自己也有依赖,为了保持镜像的精简性,这里采用分步制作,所谓分步,就是把依赖在第一个镜像内编译完成之后,复制给第二个镜像,这样第二个镜像内就不会有编译工具等不需要的东西了。
  • 编辑dockerfile

 

 # first step

 FROM python:2.7-alpine as builder  # 每个FROM就是制作一个指定的基础镜像

 

 # construct the virtualenv

 ADD requirements.txt requirements.txt  # 把项目需要的依赖映射到docker镜像中

 # RUN命令是运行指定命令,就是在镜像内的终端执行命令

 # sed:为直接修改文件,这里是修改了镜像内的源地址

 # && \ :是把多个命令放在一行执行

 # apk: 安装软件 ,由于有些依赖需要编译,这里还需要下载安装包X-dev(-dev是开发者在编辑项目时需要的东西,之后会自动安装他的依赖X)

 # 最后是为了安装虚拟环境和安装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:]))

 ```
  1. 执行build命令

docker build -t r.fastonetech.com:5000/fastone-cwl .

  • build过程中可能会出现错误,必要时根据错误log修改dockerfile
  • 这里报错就是少了libxml2 libxml2-dev两个包

dockerfile实例_第1张图片

  • 这里少了linux-headers

dockerfile实例_第2张图片

  • 这里少了libxslt-dev

dockerfile实例_第3张图片

dockerfile实例_第4张图片

  • 都添加完成就成功了....
  1. 运行image

docker run r.fastonetech.com:5000/fastone-cwl cwl-runner

  1. 上传镜像

docker push r.fastonetech.com:5000/fastone-cwl

你可能感兴趣的:(dockerfile实例)