Docker学习笔记--------2.Dockerfile的指令

本文详细介绍了Dockerfile中的核心指令,包括FROM、MAINTAINER、RUN(shell和exec模式)、EXPOSE、CMD与ENTRYPOINT、ADD和COPY、VOLUME、WORKDIR、ENV以及ONBUILD。还提及了通过docker-compose.yml设置环境变量的区别,如它是在docker run时添加的,并可使用environment或.env文件进行配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.Dockerfile的指令

1.FROM

格式1: 
  FROM <image> # 
格式2:
  FROM <image>:<tag>
注意:
  1.必须是已存在的镜像
  2.必须是第一个非注释的指令

2.MAINTAINER

1.指定镜像的作者信息,包含镜像的所有者和联系信息
2.如:
  MAINTAINER ywk "yangwenkai94@163.com"

3.RUN

3.1 方式一:RUN (shell模式)

3.3 方式二:RUN [] (exec模式)

4.EXPOSE

此处暴露的端口,docker并不会自动配置,还是需要run的时候手动指定

5.CMD和ENTRYPOINT

CMD指令
  1.CMD 是在容器运行时运行的,如果run是指定了容器执行后的指令,则cmd的指令不会执行
      CMD ["executable","param1","parma2"] # exec模式
      CMD  command parma1 param2   # shell模式
      CMD ["parma1","parma2"] # 作为ENTRYPOINT指令的默认参数
      
  2.如
    ---1. vi Dockerfile
        # first dockerfile content
        FROM ubuntu:16.04
        MAINTAINER ywk "yangwenkai94@163.com"
        RUN apt-get update && apt-get install nginx
        EXPOSE 80
        CMD ["/user/sbin/nginx","-g","daemon off"]
    ---2. docker build -t="ywk/test"
    ---3.docker run -p 80 --name cmd_test -d ywk/test
    ---4.docker top ywk/test # 查看docker容器运行了哪些服务

ENTRYPOINT指令
    ENTRYPOINT ["executable","param1","parma2"] # exec模式
    ENTRYPOINT  command parma1 param2   # shell模式
    即使docker run 指定了命令,如
      docker run -p 80 --name cmd_test -d ywk/test /bin/bash
      /bin/bash也不会执行

6.ADD和COPY

ADD <src> <dest>
ADD ['<src>"...."<dest>"](适用于文件路径中有空格的情况)

COPY <src> <dest>
COPY ['<src>"...."<dest>"](适用于文件路径中有空格的情况)

注意1:都是将文件复制到docker构建的镜像中
注意2:src:必须是构建镜像的相对地址
      dest:镜像中的绝对地址
注意3:
  ADD:包含类似tar的解压功能
  如果是单纯的复制文件,Docker推荐使用COPY

如:
    # first dockerfile content
    FROM ubuntu:16.04
    MAINTAINER ywk "yangwenkai94@163.com"
    RUN apt-get update && apt-get install -y nginx
    COPY index.html /usr/share/nginx/html/
    EXPOSE 80
    CMD ["/user/sbin/nginx","-g","daemon off"]
    --------------------------------------------------------
    docker build......
    -------------------------------------------------------
    docker run -d -p 80 --name copy_test ywk/test3
    --------------------------------------------------------
    访问nginx
    cul http://127.0.0.1:49168
    结果:nginx的页面被替换

7.VOLUME

用来基于镜像文件的卷,实现数据持久化

点击这里查看使用方法:Docker的数据卷容器

8.WORKDIR ENV 和USER

WORKDIR /path/to/workdir # 容器内部的工作目录
ENV <key><value> # 设置环境变量
ENV <key>=<value>
USER daemon # 指定镜像以 何用户的身份 来运行
    如 USER nginx
    如果不指定用户,则以root用户的方式运行

9.ONBUILD

ONBUILD [INSTRUCTION]
镜像触发器
当  这个镜像(有ONBUILD指令)  被其他镜像作为基础镜像时执行
会在构建过程中插入指令

如:
    # first dockerfile content
    FROM ubuntu:16.04
    MAINTAINER ywk "yangwenkai94@163.com"
    RUN apt-get update && apt-get install -y nginx
    ONBUILD COPY index.html /usr/share/nginx/html/ # 修改了这里
    EXPOSE 80
    CMD ["/user/sbin/nginx","-g","daemon off"]
    --------------------------------------------------------
    docker build......
    -------------------------------------------------------
    docker run -d -p 80 --name copy_test ywk/test4
    --------------------------------------------------------
    访问nginx
    cul http://127.0.0.1:49168
    结果:nginx的页面没有被替换
    -----------------------------------------------------------
    构建第二个镜像,构建后页面会被替换
     FROM  
     xxx ywk/test4
     xxx
     xxx

10. ENV:在使用Dockerfile的过程中创建环境变量

ENV <key><value>

ENV CONFIG /usr/local/config
编写Dockerfile的时候使用,推荐使用这种方式

使用docker-compose.yml也可以设置环境变量

  • 区别1:docker-compose.yml是在docker run的时候添加的环境变量
  • 区别2:docker-compose.yml使用environment或者使用.env文件,如下:
environment:
      PROJECT_HOST: '${HOST_IP}:8001'
      MYSQL_DATABASE: '${MYSQL_DATABASE}'
      MYSQL_PASSWORD: '${MYSQL_ROOT_PASSWORD}'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值