Docker-4 DockerFile

Docker-4 DockerFile

1. DockerFile是什么

  1. 用来构建Docker镜像的构建文件,是由一些列的命令和参数构成的脚本

  2. 构建步骤:

    • 创建DockerFile文件
    • docker build
    • docker run
  3. 规范:

    • 每条保留字指令都必须为大写字母,且后面要跟随至少一个参数
    • 指令按照从上到下,顺序执行
    • #表示注释
    • 每条指令都会创建一个新的镜像层,并对镜像进行提交

2. DockerFile 保留字指令

  1. From 基础镜像,当前镜像是基于哪个镜像的

  2. MAINTAINER 镜像维护者姓名和邮箱

  3. RUN 容器构建时需要运行的命令

  4. EXPOSE 当前容器对外暴露的端口

  5. WORKDIR 指定创建容器后,终端默认登录进来的目录

  6. ENV 在构建镜像过程中设置环境变量

  7. ADD 将宿主机目录下的文件拷贝进镜像,且ADD命令会自动处理URL和解压缩tar包

  8. COPY 拷贝文件和目录到镜像中。

    COPY src dest
    COPY ["src", "dest"]
    
  9. VOLUME 容器数据卷,用于持久化和共享数据

  10. CMD 指定容器启动时要运行的命令。Dockerfile可以有多个CMD指令,但只有最后一个会生效。CMD会被docker run之后的参数替换

  11. ENTRYPOINT 指定容器启动时要运行的命令。

  12. ONBUILD 构建一个被继承的Dockerfile时运行命令。父镜像在被子镜像集成后,父镜像的onbuild被触发。

3. 案例:自定义centos

  1. 编写
cd mydocker/
vim Dockerfile01

# 编写DockerFile
FROM centos
MAINTAINER aaa<aaa@123.com>
# 定义环境变量
ENV MYPATH /usr/local
# 登录后的路径设置为 /usr/local
WORKDIR $MYPATH
# 安装vim
RUN yum -y install vim
# 安装net-tools(ifconfig命令)
RUN yum -y install net-tools
EXPOSE 80
CMD echo $MYPATH
CMD echo "success--->ok"
CMD /bin/bash
  1. 构建

    # 最后的.代表当前目录
    docker build -f /mydocker/Dockerfile01 -t mycentos:1.0 .
    
    # 构建完成后查看镜像
    docker images
    

在这里插入图片描述

  1. 运行

    docker run -it mycentos:1.0
    

在这里插入图片描述

运行后,进入的路径是/usr/local

  1. 列出镜像的历史

    docker history 镜像ID
    

4. 案例:CMD和ENTRYPOINT

  1. 编写

    cd mydocker/
    vim Dockerfile02
    
    FROM centos
    RUN yum install -y curl
    CMD [ "curl", "-s", "http://ip.cn"]
    
  2. 构建

    docker build -f /mydocker/Dockerfile02 -t myip .
    docker images
    
  3. 运行

    docker run -it myip
    

    此时能查到IP信息。

    但若想要看请求头信息,使用docker run -it myip -i,则会有如下报错,原因是加上-i以后,相当于在Dockerfile最后加上了CMD -i,导致CMD [ “curl”, “-s”, “http://ip.cn”]被替换。
    在这里插入图片描述

    此时将CMD命令改为ENTRYPOINT,再执行docker run -it myip -i就不会报错。

    cd mydocker/
    vim Dockerfile02
    
    FROM centos
    RUN yum install -y curl
    ENTRYPOINT [ "curl", "-s", "http://ip.cn"]
    

5. 案例:ONBUILD

  1. 编写父Dockerfile

    cd mydocker/
    vim Dockerfile03
    
    FROM centos
    RUN yum install -y curl
    ENTRYPOINT [ "curl", "-s", "http://ip.cn"]
    ONBUILD RUN echo "father image onbuild..."
    
  2. 构建父镜像

    docker build -f /mydocker/Dockerfile03 -t myip_father .
    
  3. 编写子Dockerfile

    cd mydocker/
    vim Dockerfile04
    
    FROM myip_father
    RUN yum install -y curl
    ENTRYPOINT [ "curl", "-s", "http://ip.cn"]
    
  4. 构建子镜像

    docker build -f /mydocker/Dockerfile04 -t myip_son .
    

    此时,会打印出“father image onbuild…”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值