Dockerfile文件命令解释

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/xyz_dream/article/details/86717241

几分钟就能掌握Dockerfile文件命令的含义:

1.ARG version=1.0 # 传递过来的变量参数  默认值是1.0  在使用docker build --build-arg version=1.0(默认参数)  使用 ${ARG变量名} 来当做变量:

例如 :
ARG version=1.12
FROM nginx:${version} # 如果ARG的version没有通过 docker build --build-arg key=val传过来的话使用默认值  1.12  ,如果传递则覆盖。


2.FROM ubuntu:16.04 # 基础镜像,你要在哪个镜像的基础上构建


3.LABLE com.java.version=1.7 \  # 自定义lable
        com.java.jdk=1.8
        maintainer="author author@xx.com" # MAINTAINER已经废弃  主要是写一些关于Dockerfile维护者的想你想


# shell形式   此形式默认真实执行的命令是:  /bin/sh -c "echo 'hello world' >> /root/data.txt"

4.RUN echo "hello world" >> /root/data.txt  # 提交一层镜像    apt-get update  删除rm -rf /var/lib/apt/lists/*  减小镜像大小


# exec 形式
5.RUN ["/bin/sh","-c","echo world"]   # 默认shell是  /bin/sh  -c 


6.CMD ["可执行文件","参数1","参数2"]  # 默认默认启动的命令。 可以有多个,但是最后一个会覆盖前面所有的CMD的。最后一个为准
    ["作为entrypoint的默认参数1","作为entrypoint的默认参数2"] # 有entrypoint的情况下
    命令 参数 ...# shell模式


7.EXPOSE 3306/tcp  80/tcp  23/udp  # 声明要暴露的端口信息

8.ENV key1=val1  key2=val2  key3=val3  # 环境变量


9.COPY  ./file/ /data/  # 拷贝文件到镜像中

# 入口执行命令   可以在docker run加入参数 --entrypoint = command  覆盖掉
# 如果是exec数组形式,若存在CMD命令且CMD命令也是exec模式 则CMD作为附加参数给entrypoint
10.ENTRYPOINT ["可执行文件","参数1","参数2"]

11.VOLUME ["/lib","/data"] #挂载数据到此目录

12.USER  dreammo:root  # 用户名:组名称

13.WORKDIR  /data  # 进入容器层所处的目录。  记住 每一个RUN命令都是在一个镜像层  使用cd /data 仅仅只是在本层镜像有效  下一层镜像无效

14.ONBUILD RUN XXX # 当别人使用此镜像作为基础镜像build的时候 触发此命令

15.SHELL  ["/bin/bash","-c"] # 设置默认docker使用的shell  默认是 /bin/sh -c

16.HEALTHCHECK  options  CMD # 健康检查

 有3个参数:
  --interval=30s # 每隔30s检查一次
  --timeout=5s # 超时
  --retries=5  #当遇到错误 重新尝试检查5次

 有3个状态:
  0   健康
  1   不健康
  2   保留原值

HEALTHCHECK --interval=30s --timeout=10s --retries=5 CMD  curl -I http://localhost \ | grep 200 && exit 0 || exit 1
| grep 200
  

附加docker network内容:


Docker网络的4种模式:

  1.host

    不会使用namespace隔离。  复用 宿主机的网卡信息,  在容器操作就相当于在操作宿主机的网络。  但是其他是隔离的。

  2.container

    新创建的容器复用原容器(container)的网络信息,而不是新创建自己的网络信息。  其他还是通过namespace隔离的。

  3.none 

    容器会创建自己的网卡 namespace隔离网络。但是 该网络不会有任何配置 例如 ip 网卡 路由等, 需要我们自己手动配置。

  4.bridge  # 桥接模式 (默认)

    容器被namespace分配网络信息。然后连接到一个虚拟网桥上。彼此连接到同一个网桥上的容器,可以相互通信。
 

展开阅读全文

Dockerfile 命令之 FROM 和 RUN

07-25

<p>n Docker 是 PaaS 供应商 DotCloud 开源的一个基于 LXC 的高级容器引擎,基于 Go 语言开发并遵从Apache 2.0  协议,通过内核虚拟化技术(namespaces及cgroups等,这里的内核技术指的是Linux内核)来提供容器的资源隔离与安全保证等。由于docker通过操作系统层的虚拟化实现隔离,所以在运行时,不需要额外的虚拟化管理程序(VMM(Virtual Machine Monitor),以及Hyperisor)支持,它属于内核级虚拟化,可以实现更高的性能,同时对资源的额需求更低。它和KVM 虚拟化的区别在于:docker是通过隔离来进行创建容器,而KVM虚拟化通过模拟方式创建虚拟机。n</p>n<p>n  n</p>n<p>n 本课程学习需具有一定的 Linux 基础知识,属于基础类型课程,为后面的 Devops 学习打下根基,主要讲解了以下几个方面:n</p>n<p>n  n</p>n<p>n 1.<span style="font-size:9px;">     </span>容器架构以及术语的介绍n</p>n<p>n 2.<span style="font-size:9px;">     </span>镜像知识的讲解与运用n</p>n<p>n 3.<span style="font-size:9px;">     </span>容器常见操作以及资源限制n</p>n<p>n 4.<span style="font-size:9px;">     </span>Docker 公共仓库和私有仓库创建以及使用n</p>n<p>n 5.<span style="font-size:9px;">     </span>Docker 数据卷和网络的知识介绍n</p>n<p>n <br /></p>n<p>n 课程使用的软件版本:n</p>n<p>n <img src="https://img-bss.csdn.net/201907250618331643.png" alt="" /></p>n<p>n <br /></p>n<p>n 课件插图:n</p>n<p>n <img src="https://img-bss.csdn.net/201907250619009469.png" alt="" /></p>n<p>n <img src="https://img-bss.csdn.net/201907250619175916.png" alt="" /></p>n<p>n <br /></p>

Dockerfile 命令之 CMD 和 ENTRYPOINT

07-25

<p>n Docker 是 PaaS 供应商 DotCloud 开源的一个基于 LXC 的高级容器引擎,基于 Go 语言开发并遵从Apache 2.0  协议,通过内核虚拟化技术(namespaces及cgroups等,这里的内核技术指的是Linux内核)来提供容器的资源隔离与安全保证等。由于docker通过操作系统层的虚拟化实现隔离,所以在运行时,不需要额外的虚拟化管理程序(VMM(Virtual Machine Monitor),以及Hyperisor)支持,它属于内核级虚拟化,可以实现更高的性能,同时对资源的额需求更低。它和KVM 虚拟化的区别在于:docker是通过隔离来进行创建容器,而KVM虚拟化通过模拟方式创建虚拟机。n</p>n<p>n  n</p>n<p>n 本课程学习需具有一定的 Linux 基础知识,属于基础类型课程,为后面的 Devops 学习打下根基,主要讲解了以下几个方面:n</p>n<p>n  n</p>n<p>n 1.<span style="font-size:9px;">     </span>容器架构以及术语的介绍n</p>n<p>n 2.<span style="font-size:9px;">     </span>镜像知识的讲解与运用n</p>n<p>n 3.<span style="font-size:9px;">     </span>容器常见操作以及资源限制n</p>n<p>n 4.<span style="font-size:9px;">     </span>Docker 公共仓库和私有仓库创建以及使用n</p>n<p>n 5.<span style="font-size:9px;">     </span>Docker 数据卷和网络的知识介绍n</p>n<p>n <br /></p>n<p>n 课程使用的软件版本:n</p>n<p>n <img src="https://img-bss.csdn.net/201907250618331643.png" alt="" /></p>n<p>n <br /></p>n<p>n 课件插图:n</p>n<p>n <img src="https://img-bss.csdn.net/201907250619009469.png" alt="" /></p>n<p>n <img src="https://img-bss.csdn.net/201907250619175916.png" alt="" /></p>n<p>n <br /></p>

Dockerfile 命令之 EXPOSE 和 USER

07-25

<p>n Docker 是 PaaS 供应商 DotCloud 开源的一个基于 LXC 的高级容器引擎,基于 Go 语言开发并遵从Apache 2.0  协议,通过内核虚拟化技术(namespaces及cgroups等,这里的内核技术指的是Linux内核)来提供容器的资源隔离与安全保证等。由于docker通过操作系统层的虚拟化实现隔离,所以在运行时,不需要额外的虚拟化管理程序(VMM(Virtual Machine Monitor),以及Hyperisor)支持,它属于内核级虚拟化,可以实现更高的性能,同时对资源的额需求更低。它和KVM 虚拟化的区别在于:docker是通过隔离来进行创建容器,而KVM虚拟化通过模拟方式创建虚拟机。n</p>n<p>n  n</p>n<p>n 本课程学习需具有一定的 Linux 基础知识,属于基础类型课程,为后面的 Devops 学习打下根基,主要讲解了以下几个方面:n</p>n<p>n  n</p>n<p>n 1.<span style="font-size:9px;">     </span>容器架构以及术语的介绍n</p>n<p>n 2.<span style="font-size:9px;">     </span>镜像知识的讲解与运用n</p>n<p>n 3.<span style="font-size:9px;">     </span>容器常见操作以及资源限制n</p>n<p>n 4.<span style="font-size:9px;">     </span>Docker 公共仓库和私有仓库创建以及使用n</p>n<p>n 5.<span style="font-size:9px;">     </span>Docker 数据卷和网络的知识介绍n</p>n<p>n <br /></p>n<p>n 课程使用的软件版本:n</p>n<p>n <img src="https://img-bss.csdn.net/201907250618331643.png" alt="" /></p>n<p>n <br /></p>n<p>n 课件插图:n</p>n<p>n <img src="https://img-bss.csdn.net/201907250619009469.png" alt="" /></p>n<p>n <img src="https://img-bss.csdn.net/201907250619175916.png" alt="" /></p>n<p>n <br /></p>

Dockerfile 命令之 ENV 和 ARG

07-25

<p>n Docker 是 PaaS 供应商 DotCloud 开源的一个基于 LXC 的高级容器引擎,基于 Go 语言开发并遵从Apache 2.0  协议,通过内核虚拟化技术(namespaces及cgroups等,这里的内核技术指的是Linux内核)来提供容器的资源隔离与安全保证等。由于docker通过操作系统层的虚拟化实现隔离,所以在运行时,不需要额外的虚拟化管理程序(VMM(Virtual Machine Monitor),以及Hyperisor)支持,它属于内核级虚拟化,可以实现更高的性能,同时对资源的额需求更低。它和KVM 虚拟化的区别在于:docker是通过隔离来进行创建容器,而KVM虚拟化通过模拟方式创建虚拟机。n</p>n<p>n  n</p>n<p>n 本课程学习需具有一定的 Linux 基础知识,属于基础类型课程,为后面的 Devops 学习打下根基,主要讲解了以下几个方面:n</p>n<p>n  n</p>n<p>n 1.<span style="font-size:9px;">     </span>容器架构以及术语的介绍n</p>n<p>n 2.<span style="font-size:9px;">     </span>镜像知识的讲解与运用n</p>n<p>n 3.<span style="font-size:9px;">     </span>容器常见操作以及资源限制n</p>n<p>n 4.<span style="font-size:9px;">     </span>Docker 公共仓库和私有仓库创建以及使用n</p>n<p>n 5.<span style="font-size:9px;">     </span>Docker 数据卷和网络的知识介绍n</p>n<p>n <br /></p>n<p>n 课程使用的软件版本:n</p>n<p>n <img src="https://img-bss.csdn.net/201907250618331643.png" alt="" /></p>n<p>n <br /></p>n<p>n 课件插图:n</p>n<p>n <img src="https://img-bss.csdn.net/201907250619009469.png" alt="" /></p>n<p>n <img src="https://img-bss.csdn.net/201907250619175916.png" alt="" /></p>n<p>n <br /></p>

Dockerfile 命令之 WORKDIR 和 VOLUME

07-25

<p>n Docker 是 PaaS 供应商 DotCloud 开源的一个基于 LXC 的高级容器引擎,基于 Go 语言开发并遵从Apache 2.0  协议,通过内核虚拟化技术(namespaces及cgroups等,这里的内核技术指的是Linux内核)来提供容器的资源隔离与安全保证等。由于docker通过操作系统层的虚拟化实现隔离,所以在运行时,不需要额外的虚拟化管理程序(VMM(Virtual Machine Monitor),以及Hyperisor)支持,它属于内核级虚拟化,可以实现更高的性能,同时对资源的额需求更低。它和KVM 虚拟化的区别在于:docker是通过隔离来进行创建容器,而KVM虚拟化通过模拟方式创建虚拟机。n</p>n<p>n  n</p>n<p>n 本课程学习需具有一定的 Linux 基础知识,属于基础类型课程,为后面的 Devops 学习打下根基,主要讲解了以下几个方面:n</p>n<p>n  n</p>n<p>n 1.<span style="font-size:9px;">     </span>容器架构以及术语的介绍n</p>n<p>n 2.<span style="font-size:9px;">     </span>镜像知识的讲解与运用n</p>n<p>n 3.<span style="font-size:9px;">     </span>容器常见操作以及资源限制n</p>n<p>n 4.<span style="font-size:9px;">     </span>Docker 公共仓库和私有仓库创建以及使用n</p>n<p>n 5.<span style="font-size:9px;">     </span>Docker 数据卷和网络的知识介绍n</p>n<p>n <br /></p>n<p>n 课程使用的软件版本:n</p>n<p>n <img src="https://img-bss.csdn.net/201907250618331643.png" alt="" /></p>n<p>n <br /></p>n<p>n 课件插图:n</p>n<p>n <img src="https://img-bss.csdn.net/201907250619009469.png" alt="" /></p>n<p>n <img src="https://img-bss.csdn.net/201907250619175916.png" alt="" /></p>n<p>n <br /></p>

Dockerfile 命令之 HEALTHVHECK和 ONBUILD

07-25

<p>n Docker 是 PaaS 供应商 DotCloud 开源的一个基于 LXC 的高级容器引擎,基于 Go 语言开发并遵从Apache 2.0  协议,通过内核虚拟化技术(namespaces及cgroups等,这里的内核技术指的是Linux内核)来提供容器的资源隔离与安全保证等。由于docker通过操作系统层的虚拟化实现隔离,所以在运行时,不需要额外的虚拟化管理程序(VMM(Virtual Machine Monitor),以及Hyperisor)支持,它属于内核级虚拟化,可以实现更高的性能,同时对资源的额需求更低。它和KVM 虚拟化的区别在于:docker是通过隔离来进行创建容器,而KVM虚拟化通过模拟方式创建虚拟机。n</p>n<p>n  n</p>n<p>n 本课程学习需具有一定的 Linux 基础知识,属于基础类型课程,为后面的 Devops 学习打下根基,主要讲解了以下几个方面:n</p>n<p>n  n</p>n<p>n 1.<span style="font-size:9px;">     </span>容器架构以及术语的介绍n</p>n<p>n 2.<span style="font-size:9px;">     </span>镜像知识的讲解与运用n</p>n<p>n 3.<span style="font-size:9px;">     </span>容器常见操作以及资源限制n</p>n<p>n 4.<span style="font-size:9px;">     </span>Docker 公共仓库和私有仓库创建以及使用n</p>n<p>n 5.<span style="font-size:9px;">     </span>Docker 数据卷和网络的知识介绍n</p>n<p>n <br /></p>n<p>n 课程使用的软件版本:n</p>n<p>n <img src="https://img-bss.csdn.net/201907250618331643.png" alt="" /></p>n<p>n <br /></p>n<p>n 课件插图:n</p>n<p>n <img src="https://img-bss.csdn.net/201907250619009469.png" alt="" /></p>n<p>n <img src="https://img-bss.csdn.net/201907250619175916.png" alt="" /></p>n<p>n <br /></p>

Dockerfile 命令之 COPY 和 ADD

07-25

<p>n Docker 是 PaaS 供应商 DotCloud 开源的一个基于 LXC 的高级容器引擎,基于 Go 语言开发并遵从Apache 2.0  协议,通过内核虚拟化技术(namespaces及cgroups等,这里的内核技术指的是Linux内核)来提供容器的资源隔离与安全保证等。由于docker通过操作系统层的虚拟化实现隔离,所以在运行时,不需要额外的虚拟化管理程序(VMM(Virtual Machine Monitor),以及Hyperisor)支持,它属于内核级虚拟化,可以实现更高的性能,同时对资源的额需求更低。它和KVM 虚拟化的区别在于:docker是通过隔离来进行创建容器,而KVM虚拟化通过模拟方式创建虚拟机。n</p>n<p>n  n</p>n<p>n 本课程学习需具有一定的 Linux 基础知识,属于基础类型课程,为后面的 Devops 学习打下根基,主要讲解了以下几个方面:n</p>n<p>n  n</p>n<p>n 1.<span style="font-size:9px;">     </span>容器架构以及术语的介绍n</p>n<p>n 2.<span style="font-size:9px;">     </span>镜像知识的讲解与运用n</p>n<p>n 3.<span style="font-size:9px;">     </span>容器常见操作以及资源限制n</p>n<p>n 4.<span style="font-size:9px;">     </span>Docker 公共仓库和私有仓库创建以及使用n</p>n<p>n 5.<span style="font-size:9px;">     </span>Docker 数据卷和网络的知识介绍n</p>n<p>n <br /></p>n<p>n 课程使用的软件版本:n</p>n<p>n <img src="https://img-bss.csdn.net/201907250618331643.png" alt="" /></p>n<p>n <br /></p>n<p>n 课件插图:n</p>n<p>n <img src="https://img-bss.csdn.net/201907250619009469.png" alt="" /></p>n<p>n <img src="https://img-bss.csdn.net/201907250619175916.png" alt="" /></p>n<p>n <br /></p>

Dockerfile执行yum命令不通过

04-05

Step 5/48 : RUN yum install -y gcc gcc-c++rn ---> Running in f810ab90a354rnLoaded plugins: fastestmirrorrnrnrn One of the configured repositories failed (Unknown),rn and yum doesn't have enough cached data to continue. At this point the onlyrn safe thing yum can do is fail. There are a few ways to work "fix" this:rnrn 1. Contact the upstream for the repository and get them to fix the problem.rnrn 2. Reconfigure the baseurl/etc. for the repository, to point to a workingrn upstream. This is most often useful if you are using a newerrn distribution release than is supported by the repository (and thern packages for the previous distribution release still work).rnrn 3. Run the command with the repository temporarily disabledrn yum --disablerepo= ...rnrn 4. Disable the repository permanently, so yum won't use it by default. Yumrn will then just ignore the repository until you permanently enable itrn again or use --enablerepo for temporary usage:rnrn yum-config-manager --disable rn orrn subscription-manager repos --disable=rnrn 5. Configure the failing repository to be skipped, if it is unavailable.rn Note that yum will try to contact the repo. when it runs most commands,rn so will have to try and fail each time (and thus. yum will be be muchrn slower). If it is a very temporary problem though, this is often a nicern compromise:rnrn yum-config-manager --save --setopt=.skip_if_unavailable=truernrnCannot find a valid baseurl for repo: base/7/x86_64rnCould not retrieve mirrorlist http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os&infra=stock error wasrn14: curl#6 - "Could not resolve host: mirrorlist.centos.org; Unknown error"rnThe command '/bin/sh -c yum install -y gcc gcc-c++' returned a non-zero code: 1rnrnrn我的Docker是非联网状态的,所以不能从网络的wget下载包,在Docker里想把/dev/cdrom的目录挂载到/mnt/cdrom上,这样就能在Docker里使用本地的yum源了,但在Docker里执行mount命令失败。rnrn现请问怎么能在Dockerfile里使用本地的yum源来执行yum命令?rnrnrn如果非得要用网络的yum源,请问怎么检查Docker容器是否能联网? 论坛

没有更多推荐了,返回首页