• 【Docker自定制镜像之Dockerfile】


    镜像的定制,就是定制每一层所添加的配置、文件,如果可以把每一层修改、安装、构建、操作的命令都写入到一个脚本中,用脚本来构建、定制镜像,这个脚本就是Dockerfile

    Dockerfile是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容就是没每一层应当如何构建的.

    Dockerfile ---------⬇️


    FROM
    指定基于哪个镜像文件来构建新的镜像,尽量使用官方的bash image
    示例:
    FROM 镜像名/镜像ID[:tag]


    LABEL
    容器元消息,帮助信息,Metadata,类似于代码注释
    示例:
    LABEL version="1.0" 版本标示
    LABEL maintainer="name @163.com" 声明制作人


    RUN
    创建镜像时执行的命令


    WORKDIR
    切换工作目录


    COPY
    把本机的文件添加到容器中
    示例:
    COPY flask_web.py /app/ 把本机的flask_web.py文件复制到容器中的/app目录下,会自动创建/app目录


    ADD
    除了COPY的功能外还有解压功能,应优先使用COPY命令


    ENV
    设置环境变量,尽可能的使用ENV来设置环境变量,以增加可维护性
    示例:
    ENV MYSQL_VERSION 5.6 设置一个MySQL常量
    RUN yum install -y mysql-server="${MYSQL_VERSION}" 调用MySQL常量


    CMD
    设置容器启动后默认执行的命令和参数
    ⚠️如果定义多个CMD,则只有最后一个会执行
    ⚠️如果 docker run 时指定了其它命令(例如:/bin/bash、python flask_web.py),则CMD命令会被忽略



    EXPOSE
    网络设置
    示例:
    EXPOST 8080 暴露容器的8080端口


    VOLUME
    存储设置


    ENTRYPOINT
    设置容器启动时运行的命令
    让容器以应用程序或服务的形式运行,不会被忽略,一定会执行

    关于Shell格式和Exec格式


    对于相对的命令,Shell格式与Exec格式的对比如下.


    Shell格式

    RUN yum -y install vim
    CMD echo "Hello Docker"
    ENTRYPOINT echo "Hello Docker"
    

    Exec格式

    RUN ["apt-get", "install", "-y", "vim"]
    CMD ["/bin/echo", "Hello Docker"]
    ENTRYPOINT["/bin/echo","Hello Docker"]
    

    需要注意的是:
    通过Shell格式运行的命令可以读取设置的变量,而Exec格式则不可以读取,Exec格式仅仅是执行一个命令.

    下面将使用Dockerfile来制作一个Flask Web服务


    首先,准备一个用于调用Flask web服务的脚本:

    """flask_web.py文件代码如下"""
    from flask import Flask
    app=Flask(__name__)
    @app.route('/')
    def run():
        return 'is ok'
    if __name__ == '__main__':
        app.run(host='0.0.0.0', port=8080)  # 我们这里使用的是8080端口
    

    然后,开始写Dockerfile:

    # 指定基于哪个基础镜像来构建
    FROM python:2.7
    
    # 制作人
    LABEL maintainer='zyk 137326237@qq.com'
    
    # 安装flask第三方库
    RUN easy_install flask
    
    # 将本机的flask_web.py文件复制到容器的/app目录下,会自动生成/app目录
    COPY flask_web.py /app/
    
    # 进入/app目录
    WORKDIR /app
    
    # 暴露容器的8080端口
    EXPOSE 8080
    
    # 设置容器启动后默认执行的命令和参数,以Exec格式执行,注意:要用双引号
    CMD ["python", "flask_web.py"]
    

    最后,制作镜像:

    # ⚠️ Dockerfile与flask_web.py文件在同级目录
    [root@fedora docker]# ls
    Dockerfile  flask_web.py
    
    # 开始制作镜像
    [root@fedora docker]# docker build -t zyk/flask .
    

    制作完成后,查看镜像并启动:

    # 查一下镜像ID
    [root@fedora docker]# docker images
    REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE
    zyk/flask                   latest              c4e156f3222a        50 seconds ago      911 MB
    
    # 启动镜像
    [root@fedora docker]# docker run -d -p 9000:8080 c4e156f3222a
    

    好了,打开浏览器访问测试:
    在这里插入图片描述

  • 相关阅读:
    vue下使用echarts折线图及其横坐标拖拽功能
    vue下登录页背景图上下空白处自适应等高
    前端面试总结下~
    在C#中使用科大讯飞Web API进行语音合成
    C# Socket 发送&接收&返回
    AutoMapper在C#中的有趣应用
    RabbitMQ 在 C# 中简单应用
    .Net Core 读取配置文件
    C# / .Net Core 访问MongoDb库
    C#发送GET与POST请求
  • 原文地址:https://www.cnblogs.com/zyk01/p/10176551.html
Copyright © 2020-2023  润新知