• Docker(五):Dockerfile基础指令


    在这里插入图片描述

    构建三部曲

    1. 编写 Dockerfile
    2. 使用 docker build 命令从 Dockerfile 构建图像
    3. docker run 镜像

    指令

    FROM LABEL RUN EXPOSE WORKDIR ENV
    USER VOLUME ADD COPY CMD ENTRYPOINT

    FROM

    基础镜像,基于的镜像

    # FROM 镜像:TAG
    
    FROM centos:centos7
    
    • 1
    • 2
    • 3

    LABEL - (MAINTAINER 维护者 已弃用)

    标签

    # LABEL = = = ...
    
    LABEL "com.example.vendor"="ACME Incorporated"
    LABEL com.example.label-with-value="foo"
    LABEL version="1.0"
    LABEL description="This text illustrates \
    that label-values can span multiple lines."
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    RUN

    容器构建的时候执行的命令(分 shellexec 形式)

    RUN 指令在 docker build 时运行

    # RUN 命令
    
    # shell形式
    RUN /bin/bash -c 'source $HOME/.bashrc; \
    echo $HOME'
    
    # exec形式
    RUN ["/bin/bash", "-c", "echo hello"]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    EXPOSE

    当前容器对外暴露的端口

    # EXPOSE  [/...]
    
    EXPOSE 80/tcp
    EXPOSE 80/udp
    
    • 1
    • 2
    • 3
    • 4

    WORKDIR

    指定创建容器后,终端默认登录进来的工作目录,相当于落脚点

    # WORKDIR 路径
    
    WORKDIR /path/to/workdir
    
    • 1
    • 2
    • 3

    ENV

    定义环境变量

    # ENV = ...
    
    ENV FOO=/bar
    WORKDIR ${FOO}   # WORKDIR /bar
    
    • 1
    • 2
    • 3
    • 4

    USER

    指定该镜像以什么样的用户去执行,如果都不指定,默认为root

    # USER [:]
    # USER [:]
    
    FROM microsoft/windowsservercore
    RUN net user /add patrick
    USER patrick
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    VOLUME

    容器卷,相当于 -v

    # VOLUME ["/data"]
    
    VOLUME /var/lib/mysql
    
    • 1
    • 2
    • 3

    ADD

    将宿主机目录下的文件拷贝进镜像且会自动处理URL解压tar压缩包,相当于COPY+解压

    # ADD [--chown=:] ... 
    # ADD [--chown=:] ["",... ""]
    
    ADD hom* /mydir/
    ADD hom?.txt /mydir/
    ADD --chown=55:mygroup files* /somedir/
    ADD --chown=bin files* /somedir/
    ADD --chown=1 files* /somedir/
    ADD --chown=10:11 files* /somedir/
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    COPY

    类似ADD,拷贝文件和目录到镜像中

    # COPY [--chown=:] ... 
    # COPY [--chown=:] ["",... ""]
    
    COPY hom* /mydir/
    COPY hom?.txt /mydir/
    COPY --chown=55:mygroup files* /somedir/
    COPY --chown=bin files* /somedir/
    COPY --chown=1 files* /somedir/
    COPY --chown=10:11 files* /somedir/
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    CMD - (分 shellexec 形式)

    指定容器运行后执行的命令

    只能有一条CMD指令Dockerfile。如果列出多个,CMD 则只有最后一个CMD才会生效,其他不会生效

    CMD 指令在 docker run 时运行

    $ docker run -it image /bin/bash

    相当于在dockerfile的最后一行追加了一行CMD指令(CMD ["/bin/bash", "run"]),那么原有的指令便不会执行

    如:CMD ["catalina.sh", "run"] CMD ["/bin/bash","run"]

    # CMD ["executable","param1","param2"]
    # CMD ["param1","param2"]
    # CMD command param1 param2
    
    FROM ubuntu
    CMD echo "This is a test." | wc -
    
    FROM ubuntu
    CMD ["/usr/bin/wc","--help"]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    ENTRYPOINT - (分 shellexec 形式)

    用来指定一个容器启动时要运行的命令

    # ENTRYPOINT ["executable", "param1", "param2"]
    # ENTRYPOINT command param1 param2
    
    FROM ubuntu
    ENTRYPOINT ["top", "-b"]
    CMD ["-c"]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 例如:(nginx:test)
      FROM nginx
      ENTRYPOINT ["nginx", "-c"] # 定参
      CMD ["/etc/nginx/nginx.conf"] # 变参
      
      • 1
      • 2
      • 3
    docker命令衍生出的实际命令
    docker run nginx:testnginx -c /etc/nginx/nginx.conf
    docker run nginx:test -c /etc/nginx/new.confnginx -c /etc/nginx/new.conf
  • 相关阅读:
    量化投资学习——商品期货研究(一)
    最长递增子序列及最优解、动物总重量问题
    CFCA证书 申请 流程(一)
    【Rust日报】2022-06-27 Rust 中使用 wasm 来执行 OPA 策略
    Java常用类的使用
    foo 是什么意思
    spring boot零配置
    使用 Hugging Face 微调 Gemma 模型
    [Vue3 博物馆管理系统] 使用Vue3、Element-plus tabs组件构建选项卡功能
    数据结构|基础知识定义
  • 原文地址:https://blog.csdn.net/weixin_43526371/article/details/126332507