美文网首页
一个Dome看DockerFile指令

一个Dome看DockerFile指令

作者: 是立品啊 | 来源:发表于2020-09-25 10:57 被阅读0次

demo简介

  • 项目目录

    .
    ├── Dockerfile
    ├── fun.py
    ├── requirements.txt
    
    
  • fun.py

    from cowpy import cow
    print(cow.milk_random_cow("Hello ,World"))
    
  • requirements.txt

    cowpy==1.1.0
    
  • Dockerfile

    FROM python:alpine
    LABEL maintainer="jack@163.com"
    LABEL description="this is simple example"
    WORKDIR /app
    COPY requirements.txt ./
    RUN pip install -i https://pypi.douban.com/simple --no-cache-dir -r requirements.txt
    COPY . .
    CMD ["python","fun.py"]
    

构建命令

docker build -t jack/fun:v1 . && docker run --rm -it jack/fun:v1 /bin/sh
  • Dockefile目录执行
  • 最后的 . 代表当前目前

Dockerfile详解

FROM python:alpine
  • FROM指定base镜像

  • 往往在一个dockerfile中只有一个FROM指定(多阶段构建除外)

  • 格式:镜像名:版本

LABEL maintainer="jack@163.com"
LABEL description="this is simple example"
  • LABEL指定docker镜像中的元数据信息

  • maintainer镜像维护者,description描述信息

WORKDIR /app
  • WOCKDIR相当于cd命令,切换到容器中的某一目录

  • 如果指定目录不存在,那么会自动化创建,以上命令是容器内新建一个app目录,并切入

  • 如果两个WORKDIR, 先WORKDIR /appWORKDIR one/相当于进入了 /app/one/目录,会在上一个WORKDIR进入的基础上进入下一级目录

COPY requirements.txt ./
  • COPY相当于cp复制命令,作用是复制宿主机的目录或者文件到容器指定目录中
  • 第一个参数:宿主机的目录或者文件(相对路径或者绝对路径)
  • 第二个参数:容器中的目录或者文件(相对路径或者绝对路径)
    • ./ 代表上一步切入的/app目录
    • 如果写成./dir则会把requirements.txt复制过来并更名dir文件
    • 如果写成./dir/ 才是复制到 app/dir/
ADD one.zip ./
ADD http://img.baidu.com/asslirengk.png ./
  • ADD作用和COPY类似
  • 如果第一个参数是本地的压缩文件,则复制到容器后会自动解压
  • 如果第一个参数是远程的路径,会自动下载,将下载后的文件复粘贴到容器中
RUN pip install -i https://pypi.douban.com/simple --no-cache-dir -r requirements.txt
  • RUN 在容器中执行linux命令
  • --no-cache-dir 不缓存
  • 多个RUN 命令,可以用&&链接,可避免创建多层
ENV username=jack password=123456
  • 在容器内创建全局环境变量
  • 创建容器后可进入容器输入env验证
VOLUME /app
  • VOLUME指定运行容器时,需要映射出去的目录
  • 如果Dockerfile没有用VOLUME指定则docker run时候就不能用-v把目录映射出去,VOLUME相当于在Dockerfile中提前声明可以映射的目录
EXPOSE 8080
  • EXPOSE 相当于指定容器运行时,需要映射出去的端口号(容器中)
  • 如果Dockerfile没有用EXPOSE指定则docker run时候就不能用-p把目录映射出去,EXPOSE相当于在Dockerfile中提前声明可以映射的端口
USER root
  • 设置运行其他命令的用户
CMD ["python","fun.py"]
  • CMD在容器运行时,会自动执行指令

  • 可以输入shell类型的命令,如: CMD python fun.py

  • 可以输入exec类型的命令 ["指定","参数1","参数2"],推荐使用

  • 如果有多个CMD命令,那么只会运行最后一个

  • 如果在运行容器的时候 docker run 有指定命令的话,那么dockerfile中的CMD指令会被忽略

ENTRYPOINT ["cat","/etc/passwd"]
  • ENTRYPOINTCMD类似
  • 如果在运行容器的时候 docker run 有指定命令的话,那么dockerfile中的ENTRYPOINT指令不会被忽略,外面的指定会作为参数传递给ENTRYPOINT
ENTRYPOINT ["ping"]
CMD ["192.168.1.99"]
  • ENTRYPOINTCMD配合使用,CMD会作为ENTRYPOINT的默认参数
  • 运行docker run ..... /bash/sh 192.168.1.92就是传递参数覆盖CMD

RUNCMDENTRYPOINT的联系与区别

  • 都是运行命令
  • RUN 是构建镜像结构的命令,比如安装依赖
  • CMDENTRYPOINT的更多的是执行容器内部内容的命令

相关文章

网友评论

      本文标题:一个Dome看DockerFile指令

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