全栈工程师开发手册 (作者:栾鹏)
架构系列文章


通常,我们首先定义Dockerfile文件,然后通过docker build命令构建得到镜像文件。然后,才能够基于镜像文件通过docker run启动一个容器的实例。

那么在启动一个容器的时候,就可以改变镜像文件中的一些参数,而镜像文件中的这些参数往往是通过Dockerfile文件定义的。

但并非Dockerfile文件中的所有定义都可以在启动容器的时候被重新定义。docker run不能覆盖的Dockerfile文件指令如下:

  • FROM
  • MAINTAINER
  • RUN
  • ADD
  • COPY

1、 覆盖ENTRYPOINT指令
Dockerfile文件中的ENTRYPOINT指令,用以给出容器启动后默认入口。
ENTRYPOINT指令给出容器启动后的默认行为,一般难以在启动容器时覆盖,但是可以追加命令参数。示例如下:

  • docker run --entrypoint /bin/bash ...,给出容器入口的后续命令参数
  • docker run --entrypoint="/bin/bash ..." ...,给出容器的新Shell
  • docker run -it --entrypoint="" mysql bash,重置容器入口

2、覆盖CMD指令

Dockerfile文件中的CMD指令,给出容器启动后默认执行的指令。

可以在启动容器的时候,为docker run设置新的命令选项,从而覆盖掉Dockerfile文件中的CMD指令(不会再咨询Dockerfile文件中的CMD指令)。示例如下:

  • docker run ... <New_Command>,可以给出其他命令以覆盖Dockerfile文件中的默认指令

如果Dockerfile文件中还声明了ENTRYPOINT指令,则上述指令都将作为参数追加到ENTRYPOINT指令。

3、 覆盖EXPOSE指令
,用以向容器所在主机保留端口。

显然这是运行时容器的一个特性,所以docker run可以方便地覆盖该指令。示例如下:

  • docker run --expose="port_number:port_number"
  • docker run -p port_number:port_number/tcp,打开指定范围的端口
  • docker run --link="another_container_id",链接到其他容器
  • docker run -P,打开所有端口

4、覆盖ENV指令
ENV,用以设置容器中的环境变量。

启动容器时,自动为容器设置如下环境变量:

  • HOME,基于USER设置用户主目录
  • HOSTNAME,默认容器的主机名
  • PATH,默认:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
  • TERM,默认xterm,如果容器被分配了伪TTY

docker run可以方便地覆盖该指令。示例如下:

  • docker run -e "key=value" ...,设置新的环境变量key
  • docker run -h ...,覆盖HOSTNAME
  • docker run ubuntu /bin/bash -c export
declare -x HOME="/"
declare -x HOSTNAME="85bc26a0e200"
declare -x OLDPWD
declare -x PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
declare -x PWD="/"
declare -x SHLVL="1"
declare -x deep="purple"

通过脚本,设置或覆盖环境变量

5、 覆盖VOLUME指令

VOLUME,用以为容器设置的data volumes。

  • docker run -v ...
  • docker run -volumes-from ...

6、覆盖USER指令
容器内部的默认用户是root(uid=0)。
Dockerfile文件中可以通过USER指定其他用户为容器的默认用户。

  • docker run -u="" ...
  • docker run --user="" ...

docker run支持-u如下形式:

  • user
  • user:group
  • uid
  • uid:gid
  • user:gid
  • uid:group

7、 覆盖WORKDIR指令

WORKDIR,用以为后续指令设置工作目录。

如果设置的路径不存在,则创建该路径,即时在后续指令中根本未使用。

在一个,可以存在多个WORKDIR。对于相对路径,后续指令继承前续指令。

在WORKDIR中,可以引用前续已经定义的环境变量。

  • docker run -w="" ...
  • docker run --workdir="" ...

参考链接:

https://docs.docker.com/engine/reference/run/

https://docs.docker.com/engine/reference/builder/

使用docker run的选项以覆盖Dockerfile中的设置详解相关推荐

  1. gta5怎么设置画质最好_《GTA5》画面选项设置详解 怎么设置画面

    第1页:画质设置详解(1) 展开 今天小编给大家带来的是一位玩家分享的<GTA5>全画面选项设置详解,不知道怎么设置画面的玩家,快跟小编一起来看看吧!非常非常详细哦. n卡:gt720左右 ...

  2. Marco's Java【Docker入门(四) 之 Dockerfile容器数据卷详解】

    前言 咱们上节已经接触过Dockerfile并使用Dockerfile创建容器数据卷,但是Dockerfile的作用远远不止如此! 因此本节会更深入的了解Dockerfile以及它的诸多使用方式, & ...

  3. Docker学习总结(58)——Dockerfile中,ADD和COPY的区别?

    Dockerfile中的COPY指令和ADD指令都可以将主机上的资源复制或加入到容器镜像中,都是在构建镜像的过程中完成的.COPY指令和ADD指令的唯一区别在于是否支持从远程URL获取资源.COPY指 ...

  4. Docker中的网络详解

    本节主要是介绍Docker默认的网络行为,包含创建的默认网络类型以及如何创建用户自定义网络,也会介绍如何在单一主机或者跨主机集群上创建网络的资源需求. 1.默认网络 当你安装了docker,她自动创建 ...

  5. Docker中的资源分配详解

    文章目录 Cgroup概念 利用stress工具测试CPU和内存 CPU 周期限制 CPU Core 控制 CPU 配额控制参数的混合使用 内存限额 Block IO 的限制 bps 和 iops 的 ...

  6. Docker容器中Data volumes详解

    Data volumes可以视为容器中的一种特殊的文件路径,用以保存与容器实例生命周期无关的共享数据. 1. Data volumes的特性 在容器创建的时候初始化 作为文件系统的一部分,但是不受Un ...

  7. Dockerfile 之 ARG指令详解及示例

    参考教程:https://docs.docker.com/engine/reference/builder/ 环境 virtual box 6.1 centos 7.8 docker 19.03 AR ...

  8. docker修改镜像的存储位置_云原生存储详解:容器存储与 K8s 存储卷(内含赠书福利)...

    作者 | 阚俊宝  阿里巴巴技术专家 参与文末留言互动,即有机会获得赠书福利! 导读:云原生存储详解系列文章将从云原生存储服务的概念.特点.需求.原理.使用及案例等方面,和大家一起探讨云原生存储技术新 ...

  9. Run time setting设置详解

    Pacing转载自belie 1>     Run time setting设置中的Browser:'Simulate a new user on each iteration'选项 例如:录制 ...

最新文章

  1. 教你怎么用WIN7系统自带工具调整硬盘分区
  2. html选择按键点击后锁死输入框_button按钮防重复提交(点击提交之后提交按钮变灰,操作执行完之后恢复)...
  3. iOS经典面试题之使用runtime associate方法关联的对象释放及dealloc底层原理
  4. 关于mtk Android打开串口权限问题
  5. android的progressDialog 的使用。android数据异步加载 对话框提示
  6. 腾讯视频上如何上传视频
  7. 数据结构与算法之-----二叉树(一)
  8. Win10出现跟这台计算机连接的一个usb设备运行不正常怎么办
  9. thikPHP框架部署
  10. 生活的解释 —— 生物篇
  11. Java JDK中的跳表实现
  12. 鸿蒙和想象部落哪个好些,还是想说说鸿蒙
  13. 读react.js小书 02
  14. win10安装python详细过程
  15. bzoj2946 [Poi2000]公共串(后缀数组 || 后缀自动机)
  16. 此证书已在此前安装为一个证书权威机构
  17. 七月集训day18树
  18. 这几个算法可视化网站,太牛了!
  19. 幸运抽奖java_java实现幸运抽奖系统
  20. 写给《中国品牌日》:梦想不远 未来可期 为每一个农业品牌人鼓掌

热门文章

  1. 几行代码就搞定一个文字识别功能,同时还能转换成语音,畅快!
  2. 苹果ppt_“苹果美感中国学不来?”阿里、腾讯的设计师让你感受中国智造
  3. 计算机网络实验5以太网链路帧实验,计算机网络实验-使用Wireshark分析以太网帧与ARP协议.docx...
  4. java 日志时间格式_java.util.logging.Logger 使用中关于时间格式的问题
  5. vue+three.js开发
  6. XBMC源代码简析 5:视频播放器(dvdplayer)-解复用器(以ffmpeg为例)
  7. bootsect.exe linux,bootsect.exe
  8. android 编译宏,android 添加全局变量宏开关的三种方式
  9. java word转html 报错org/apache/poi/xwpf/usermodel/IRunBody
  10. 如何用css显示一个图片中多个小图标