zoukankan      html  css  js  c++  java
  • docker~Dockerfile优化程序的部署

    回到目录

    一些理论

    我们都知道docker这个容器工具可以帮助我们快速进行环境的部署,这对于运营人员来说,无疑是个福音,而这个工作大叔认为不应该是运营人员干的,而是由开发人员来做,因为只有你知道你干的是什么,你干了它,就应该要部署它,或者把部署的过程写成一个脚本,让运营人员去执行,就可以了,这也许就是docker产生的原因吧!

    Dockerfile是为快速构建docker image而设计的,当你使用docker build 命令的时候,docker 会读取当前目录下的命名为Dockerfile(首字母大写)的纯文本文件并执行里面的指令构建出一个docker image。

    Dockerfile的组合可以用一张图来表示

    Dockerfile的一些命令

    Dockerfile是将一组脚本组合在一个文件中,然后它让批量执行,而脚本中最重要的就是FROM,它告诉docker要启动哪个镜像,然后后观的动作都是针对这个image来执行——我们要想执行一个Dockerfile文件,可以使用下面的代码:

    $ docker build -f /path/to/a/Dockerfile .

    下面是从eshoponcontainer中截取的一个Dockerfile文件的内容,我们可以学习一下

    FROM microsoft/aspnetcore:1.1.2
    ARG source
    WORKDIR /app
    EXPOSE 80
    COPY ${source:-obj/Docker/publish} .
    ENTRYPOINT ["dotnet", "Basket.API.dll"]

    从上面代码中,我们看到Dockerfile有几个命令,下面具体说明一下

    FROM
    基于哪个镜像
    RUN
    安装软件用
    MAINTAINER
    镜像创建者
    CMD
    Container启动时执行的命令,但是一个Dockerfile中只能有一条CMD命令,多条则只执行最后一条CMD.
    CMD主要用于container时启动指定的服务,当Docker run command的命令匹配到CMD command时,会替换CMD执行的命令。
    ENTRYPOINT
    container启动时执行的命令,但是一个Dockerfile中只能有一条ENTRYPOINT命令,如果多条,则只执行最后一条
    ENTRYPOINT没有CMD的可替换特性
    USER
    使用哪个用户跑container
    EXPOSE
    container内部服务开启的端口。主机上要用还得在启动container时,做host-container的端口映射:
    ADD
    将文件<src>拷贝到container的文件系统对应的路径<dest>
    所有拷贝到container中的文件和文件夹权限为0755,uid和gid为0
    如果文件是可识别的压缩格式,则docker会帮忙解压缩

    如果要ADD本地文件,则本地文件必须在 docker build <PATH>,指定的<PATH>目录下

    如果要ADD远程文件,则远程文件必须在 docker build <PATH>,指定的<PATH>目录下。
     注意:使用docker build - < somefile方式进行build,是不能直接将本地文件ADD到container中。只能ADD    url file.
    ADD只有在build镜像的时候运行一次,后面运行container的时候不会再重新加载了。
    VOLUME
    可以将本地文件夹或者其他container的文件夹挂载到container中。

    WORKDIR
    切换目录用,可以多次切换(相当于cd命令),对RUN,CMD,ENTRYPOINT生效
    ONBUILD
    ONBUILD 指定的命令在构建镜像时并不执行,而是在它的子镜像中执行

    好了,今天就说这么多,总之我们要知道,Dockerfile主要用来快速生成image和快速部署应用环境的!

    回到目录

  • 相关阅读:
    线程简介
    JDBC连接数据库遇到的“驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。
    项目开发中需要考虑的问题2
    JPA使用中遇到Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: XXX is not mapped
    ORA-01747: user.table.column, table.column 或列说明无效
    IDEA使用一套代码启动多个应用
    tomcat8.5部署管理控制台
    ubuntu16虚拟机迁移/移动/复制后无法上网
    centos7没有IP地址
    repmgr自动故障转移的参数配置
  • 原文地址:https://www.cnblogs.com/lori/p/7056638.html
Copyright © 2011-2022 走看看