dockerfile设置动态参数
一般的dockerfile样例
FROM python:3.6 # 第一行必须指定基于的基础镜像
# 维护者信息
MAINTAINER docker_user docker_user@email.com
# 更改工作目录
WORKDIR /app
ADD . /app
# 镜像的操作指令
RUN pip install -i https://mirrors.aliyun.com/pypi/simple/ -r requirements.txt
# 容器启动时执行命令
CMD ["python","start.py"] #start.py是启动文件,文件中输入为/app/input,输出为/app/result
设置动态参数的dockerfile
FROM python:3.6
WORKDIR /app
ADD . /app
#RUN pip install -i https://mirrors.aliyun.com/pypi/simple/ -r requirements1.txt
#RUN pip install mkl-service
#RUN pip install tensorboard
EXPOSE 80
ENV input1="" #添加输入参数
ENV result="" #添加输出参数
ENTRYPOINT ["sh","-c","python start.py --input=$input1 --result=$result1"]
#ENTRYPOINT ["python","start.py"]
EXPOSE
格式为 EXPOSE […] 。
例如:
EXPOSE 2280 8443
告诉Docker服务端容器暴露的端口号,供互联系统使用。在启动容器时需要通过-P,Docker主机会自动分配一个端口转发到指定的端口;使用-p,则可以具体指定哪个本地端口映射过来。
ENV
格式为 ENV 。指定一个环境变量,会被后续RUN指令使用,并在容器运行时保持。
ENTRYPOINT
有两种格式:
ENTRYPOINT[“executable”,“paraml”,“param2”]
ENTRYPOINT command paraml param2(shell中执行)。
配置容器启动后执行的命令,并且不可被 docker run提供的参数覆盖。
每个Dockerfile中只能有一个ENTRYPOINT,当指定多个ENTRYPOINT时,只有最后一个生效。
CMD
支持三种格式:
CMD[“executable”,“param1”,“param2”]使用exec执行,推荐方式。
CMD command paraml param2在/bin/sh中执行,提供给需要交互的应用。
CMD[“param1”,“param2”]提供给ENTRYPOINT的默认参数。
指定启动容器时执行的命令,每个Dockerfile只能有一条CMD命令。如果指定了多条命令,只有最后一条会被执行。
如果用户启动容器时候指定了运行的命令,则会覆盖掉CMD指定的命令。
进行测试
文件目录:/kyh/tarbao下存在data,dockerfile,start.py
数据文件目录:/kyh/tarbao/data/input/aaaa aaaa文件的内容 lalallala
创建镜像
docker build -t kyh_1 .
启动docker
以下为执行 docker run 时,其它常见的参数:
-i:交互式执行容器。容器控制台只支持后台运行容器,本参数不支持。
-t:分配虚拟终端,本参数不支持。
-e:容器运行的环境变量。
docker run -it -v /kyh/tarbao/data/input:/app/input -v /kyh/tarbao/data/result:/app/result -e input1="aaaa" -e result='result' kyh_1