CMD,RUN,ENTRYPOINT之类的差别。

VOLUMN和-V之间的差别。

EXPOSE和-P的对应等。

今天上午写了一个脚本,可以传参数进IMAGE,让启动的CONTAINER具有不同的行为。

另外是一些常用的方便命令:

删除所有正在运行的容器(先停止,再删除)。

docker stop $(docker ps -q) && docker rm $(docker ps -a -q)

启动镜像(包括端口映射,目录挂载-如果windows,那不是挂windows目录,是虚拟机目录,命令容器,传递参数)

docker run -p : -v /applog:/var/log/nginx --name testprism333 prism3  -e PRD

=============================

如果在Dockerfile中同时写了entrypoint和cmd,docker在build过程中会将cmd中指定的内容作为entrypoint的参数。

那么如果,我们希望每个容器都固定的执行一个config脚本,然后再运行特定的程序时,利用entrypoint和cmd可以如何做到呢?从上述分析可以很自然的想到,将entrypoint解析CMD参数,并以命令执行。

CMD命令的参数格式,一般写成 字符串数组的方式,如上面的例子。如:

CMD  ["echo","hello world"]

虽然也可写成CMD echo hello word 方式,但这样docker会在指定的命令前加  /bin/sh -c 执行,有时有可能会出问题。 所以推荐采用数据结构的方式来存放命令。

dockerfile 中的 ENTRYPOINT 和 CMD

看似一样,都是实现 container 启动命令,但是需要注意:

1、都有两种方式,数组方式,以及 shell 方式

1
2
["sh", "-c", "echo hello"]
sh -c 'echo hello'

2、ENTRYPOINT 除了指定 container 入口之外,更重要的作用是: 通过它可以让一个 container 像一个 executable 一样。比如

1
ENTRYPOINT ["/bin/sh"]

之后 build 出来的镜像就像一个 sh 程序文件一样,运行该 image,就像运行 sh 程序。

3、如果 ENTRYPOINT 指定了,并且采用了数组方式,即 ["exectable", "para1", "para2"] ,那么 CMD 指定的内容会被视为 ENTRYPOINT 数组中最后的一个参数

4、如果 ENTRYPOINT 使用 shell 方式,那么它会覆盖所有的 CMD 以及 docker run 后面指定的 command

5、docker run 后面指定的 command 会取代 CMD 的内容

=============================

From nginx

MAINTAINER Prism DevOps@pxx.com.cn

WORKDIR /usr/local/nginx/html

ENV NGINX_ROOT_DIR /usr/local/nginx/html

VOLUME ["/applog", "/data"]

RUN mkdir -p /var/devops/

COPY bootstart.sh /var/devops/bootstart.sh

ENTRYPOINT ["/bin/bash", "/var/devops/bootstart.sh"]

CMD ["-h"]
#!/bin/bash

# description: dockerfile function depend on CMD and ENTRYPOINT arg
# author: chngjun855
# version alpha
# --

# get args
while getopts "e:i:g:h" arg
do
  case $arg in
    e)
      env=$OPTARG
      ;;
    i)
      ipaddr=$OPTARG
      ;;
    g)
      group=$OPTARG
      ;;
    h)
      echo "/bin/bash bootstart.sh -e [ENV] -i [ipaddress] -g [group]"
      ;;
    ?)
      echo "unknow argument, -e -i -g"
      exit
  esac
done

echo "env is $env"
echo "ipaddr is $ipaddr"
echo "group is $group"

# different function depend on different env arg
case $env in
  FAT)
    echo "FAT html page" > /usr/share/nginx/html/test.html
    ;;
  UAT)
    echo "UAT html page" > /usr/share/nginx/html/test.html
    ;;
  PRD)
    echo "PRD html page" > /usr/share/nginx/html/test.html
    ;;
esac

nginx -g "daemon off;"

DockerFile的编写和注意的一些知识点的更多相关文章

  1. Docker的基本使用及DockerFile的编写

    前言: 最近在准备面试,在复习到Docker相关内容时,想写一些东西分享给大家然后加深一下自己的印象,有了这篇随笔. Docker的简介: docker从文件系统.网络互连到进程隔离等等,极大的简化了 ...

  2. Docker 与 K8S学习笔记(四)—— Dockerfile的编写

    在上一篇中我们简单介绍了Docker镜像的获取与使用,其中在镜像制作中提到在实际使用中一定要用Dockerfile方式去创建镜像而不要用docker commit方式,那么我们该如何编写Dockerf ...

  3. 简明教程 | Docker篇 · 其二:Dockerfile的编写

    Dockerfile是什么 一个包含用于组合 image 的命令的文本文件,docker 通过 dockerfile 和构建环境的上下文来构建 image . 编写Dockerfile FROM 首先 ...

  4. docker18.09.5 Dockerfile文件编写

    Dockerfile命令详解(超全版本)  https://www.cnblogs.com/dazhoushuoceshi/p/7066041.html 案例1 dockerfile文件内容: FRO ...

  5. Dockerfile的编写(主观汇聚篇)

    目录 一.什么是dockerfile 二.Dockerfile的基本结构 Dockerfile文件说明 三.总结 一.什么是dockerfile dockerfile是使用者用来自定义构建一个dock ...

  6. dockerfile的编写参数

    注意细节 “#”号开头是注释 ,指令不区分大小写,顺序执行 FROM 指定基础镜像:注意必须是文件里第一个非注释行 ENV name 值 设置变量,注意没有=号 变量引用 ${name:-chenxi ...

  7. Docker | dockerfile 文件编写

    dockerfile 的作用 dockerfile 作用就是制作镜像,保持开发,测试,生产环境的一致性. 直接将容器制作为镜像 制作新的镜像 # 把容器按照自己的需求个性完之后,就可以创建自己的镜像的 ...

  8. docker 应用-2(Dockerfile 编写以及镜像保存提交)

    我们可以从docker hub上pull别人的镜像,也可以将容器进行修改,然后commit镜像,并把镜像push到docker hub上被被人使用.但是,直接pull或者push镜像的方式太过笨重,尤 ...

  9. (转)编写 DockerFile

    这几天在研究怎样制作docker image. 其中使用dockerfile是一种可记录制作image的过程的并且是容易重复使用的一种方式.在园子里看到了一篇好文,于是分享到这里~~ 原文链接: ht ...

随机推荐

  1. 个人作业4——alpha阶段个人总结(201521123103 吴雅娟)

    一.个人总结 在alpha 结束之后, 每位同学写一篇个人博客, 总结自己的alpha 过程: 请用自我评价表:http://www.cnblogs.com/xinz/p/3852177.html 有 ...

  2. mysqli DB封装

    <?php class DB { //私有的属性 private static $dbcon = false; private $host; private $port; private $us ...

  3. 使用 Redis的SETNX命令实现分布式锁

    使用Redis的 SETNX 命令可以实现分布式锁,下文介绍其实现方法. SETNX命令简介 命令格式 SETNX key value 将 key 的值设为 value,当且仅当 key 不存在. 若 ...

  4. java 利用反射完成自定义注解

    元注解: 元注解的作用就是负责注解其他注解.Java5.0定义了4个标准的meta-annotation类型,它们被用来提供对其它 annotation类型作说明.Java5.0定义的元注解: 1.@ ...

  5. Elasticsearch1.x 和Elasticsearch2.x 拼音分词插件lc-pinyin安装教程

    Elasticsearch1.x 基于lc-pinyin和ik分词实现 中文.拼音.同义词搜索 https://blog.csdn.net/chennanymy/article/category/60 ...

  6. 【bzoj2768/bzoj1934】[JLOI2010]冠军调查/[Shoi2007]Vote 善意的投票 最小割

    bzoj2768 题目描述 一年一度的欧洲足球冠军联赛已经进入了淘汰赛阶段.随着卫冕冠军巴萨罗那的淘汰,英超劲旅切尔西成为了头号热门.新浪体育最近在吉林教育学院进行了一次大规模的调查,调查的内容就是关 ...

  7. 安徽师大附中%你赛day4T2 演讲解题报告

    演讲 题目背景: 众所周知,\(\mathrm{Zdrcl}\)是一名天天\(\mathrm{AK}\)的高水平选手. 作为一民长者,为了向大家讲述自己\(\mathrm{AK}\)的经验,他决定在一 ...

  8. BZOJ2631 tree(伍一鸣) LCT 秘制标记

    这个题一看就是裸地LCT嘛,但是我wa了好几遍,这秘制标记...... 注意事项:I.*对+有贡献 II.先下传*再下传+(因为我们已经维护了+,不能再让*对+产生贡献)III.维护+用到size # ...

  9. JavaScript渐变效果的实现

    鼠标移上去透明度渐渐增加,鼠标移出,透明度渐渐减小. 关键代码: view source   print? 1 var speed = 0; 2 if(target>obj.alpha){ 3 ...

  10. dbcp基本配置和重连配置

    转载自:http://agapple.iteye.com/blog/772507 最近在看一些dbcp的相关内容,顺便做一下记录,免得自己给忘记了. 1. 引入dbcp (选择1.4) Java代码  ...