DockerFile的编写和注意的一些知识点
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;"
最新文章
- 桌面秀:以ubuntu主为的开发桌面环境
- 0025 Java学习笔记-面向对象-final修饰符、不可变类
- 使用Nginx配置NodeJs程序(Windows平台)
- rqnoj28[stupid]愚蠢的宠物
- python:HTML + CSS 优先级 返回顶部
- (转)VS2008连接TFS 2010
- Spring学习(一)——Spring中的依赖注入简介【转】
- 多线程编程之Linux环境下的多线程(二)
- java实现Composite(组合)模式
- Linux安装oracle 10g常见问题之——OUI-25031
- Java NIO 缓冲技术详解
- iOS 取得CGimage字节数据的方法
- 免费邮件服务器:MailEnable
- 使用javac编译zookeeper项目
- oracle 物化视图 job
- html文档知识补充
- 逆向-攻防世界-logmein
- hdu 2005 java
- MongoDb 配置笔记
- XOR 加密
热门文章
- PAT 甲级 1015 Reversible Primes
- Graphic的一些基本概念
- Maven中如何将源码之外的文件打包及添加本地jar
- 【bzoj1999】[Noip2007]Core树网的核 树的直径+双指针法+单调队列
- C&;C++——段错误(Segmentation fault)
- jocky1.0.3 (原joc) java混淆器 去除jdk版本限制
- Ubuntu下安装LNMP之php7的安装并配置Nginx支持php及卸载php
- hadoop之HDFS与MapReduce
- 解决“并非来自 Chrome 网上应用店。”
- linux+GraphicsMagick 安装