美文网首页
dockerfile实例

dockerfile实例

作者: Elvis_zhou | 来源:发表于2019-01-24 15:44 被阅读0次

    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: 安装软件 ,由于有些依赖需要编译,这里还需要下载安装包-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:]))
    
    1. 执行build命令
    
         docker build -t r.fastonetech.com:5000/fastone-cwl .
    
    • build过程中可能会出现错误,必要时根据错误log修改dockerfile
    • 这里报错就是少了libxml2 libxml2-dev两个包
    • 这里少了linux-headers
    • 这里少了libxslt-dev
    • 都添加完成就成功了....
    1. 运行image
       docker run r.fastonetech.com:5000/fastone-cwl cwl-runner
    
    1. 上传镜像
    
       docker push r.fastonetech.com:5000/fastone-cwl
    

    相关文章

      网友评论

          本文标题:dockerfile实例

          本文链接:https://www.haomeiwen.com/subject/vkkhjqtx.html