Dockerfile常用命令的使用简介

之前的文章中,我们已经说了RUN、FROM、MAINTAINER、EXPOSE等一些DockerFile的相关命令,今天我们来看DockerFile的其他命令介绍。

01 CMD

CMD命令用于指定一个容器启动的时候需要运行的命令。它和RUN指令有点类似,但是不同之处在于:

RUN指令是镜像被构建的时候,需要执行的命令;

CMD指令是指定容器被启动的时候,要运行的指令。举例:

docker run -it  container_name  /bin/ls

这个命令是我们启动一个容器,并且运行/bin/ls

它相当于我们手工进入docker中执行ls命令。在DockerFile中可以使用下面的命令进行代替:

CMD [ "/bin/ls" ]

需要注意的是,在DockerFile中只能指定一条CMD命令,即使我们指定了多条,也只有最后一条能被最终执行。

如果我们在DockerFile中使用了CMD指令,则docker run命令之后会直接运行CMD指令,例如:

docker run -it container_name

会在启动这个容器之后,直接运行/bin/ls命令。

02 ENTRYPOINT

这个命令和上面的CMD命令很像,不同之处在于,docker run命令后面指定的任何参数都会被当做参数再次传递给ENTRYPOINT指令中的命令。

03 WORKDIR

WORKDIR指令用来在从镜像创建一个新容器时,在容器内部设置一个工作目录。ENTRYPOINT或者CMD命令会在这个目录下执行。

这条命令往往在DockerFile的最前面出现,为后续一系列的命令设置工作目录。在指定完成某些命令之后,也可以通过这个命令来切换当前的目录。所以,通常情况下,这个WORKDIR命令最常见的使用方法应该是下面这样:

WORKDIR  /data1/xxxxx

RUN xxxxx

RUN xxxxxx

WORKDIR /data2/xxxxx

RUN xxxxx

RUN xxxxx

它是不断切换目录的一个工具。

如果我们在DockerFile中写明了目录,但是在docker run的时候不想使用这个目录应该怎么办?

答案是使用docker run -w /var/dir1

使用-w参数之后,会使用/var/dir1来覆盖我们DockerFile中的路径。

04 ENV

ENV指令用来在生成DockerFile的过程中指定环境变量。例如:

ENV  PYRHON_HOME  /usr/bin/python

它可以跟上面的WORKDIR搭配起来,例如:

ENV  PYRHON_HOME  /usr/bin/python

WORKDIR   $PYTHON_HOME

还可以在使用ENV命令生成的容器中,使用env命令,来查看当前容器的环境变量,便可以看到我们设置好的PYRHON_HOME的值。

除了这种方法之外,我们可以使用docker -e的命令来传递环境变量,但是这种方法传递的环境变量,只在运行的时候有效。

05 USER

USER指令用来指定镜像会以什么样的用户来执行。例如:

USER mysql

当然,还可以使用

USER user

USER user:group

USER uid

USER uid:gid

有两点需要注意:

1、可以使用docker run中的-u指令去覆盖DockerFile中的USER选项;

2、如果不指定USER选项,则默认是root用户

06 VOLUME

VOLUME指令用来向基于镜像创建的容器添加卷。一个卷可以存在于一个或者多个容器内的特定目录。这个目录可以提供共享数据或者对数据进行持久化的功能,例如:

1、卷可以在容器间共享和重用

2、一个容器不必和其他容器共享卷

3、对卷的修改是立即生效的

4、卷会一直存在,直到没有任何容器需要他

这个功能可以让我们将部分代码或者数据添加到镜像中,而不是提交到镜像中。这样会大大缩减镜像的大小。它允许我们在多个容器间共享这些内容,所以VOLUME常常用来测试容器正确性。

VOLUME [ "/volume" ]

这条命令将会为使用此镜像创建的容器创建一个名字为/volume的挂载点。

也可以使用数组的方式创建多个挂载点:

VOLUME [ "/data1","/data2" ]

07 ADD

ADD命令用来将构建环境下的文件和目录复制到镜像中。ADD命令使用的过程中需要文件的源位置和目标位置,如下:

ADD aaa.txt  /data1/aaa.txt

这条命令,会将镜像构建目录下的aaa.txt文件复制到镜像中的/data1/aaa.txt 目录下。源文件除了可以是构建环境上下文中的一个文件,也可以是一个URL。

在ADD文件的过程中,如果目的地址是以/结尾,那么DockerFile会认为源位置是一个目录,反之则认为源文件是一个文件。

还有一点需要注意:当源文件是一个本地归档文件的时候,例如tar.gz,则docker 会将其解压到目标文件下。

08 COPY

COPY命令非常类似于ADD,和ADD的不同在于COPY不支持URL方法,也不会主动去解压文件,COPY指令的目的位置必须是容器内部的一个绝对路径。

需要注意:

1、任何由该命令创建的文件或者目录的UID和GID都会被设置成0

2、如果目的位置不存在,Docker将会自动创建所有需要的目录结构。就像mkdir -p那样。

今天的内容就到这里吧,可能看着比较干,后续我会补充案例,来对这些命令进行说明。

以上就是Dockerfile常用命令的使用简介的详细内容,更多关于Dockerfile命令的使用的资料请关注我们其它相关文章!

(0)

相关推荐

  • Docker中镜像构建文件Dockerfile与相关命令的详细介绍

    前言 使用docker build命令或使用Docker Hub的自动构建功能构建Docker镜像时,都需要一个Dockerfile文件.Dockerfile文件是一个由一系列构建指令组成的文本文件,docker build命令会根据这些构建指令完成Docker镜像的构建.本文将会介绍Dockerfile文件,及其中使用的构建指令. 1. Dockerfile文件使用 docker build命令会根据Dockerfile文件及上下文构建新Docker镜像.构建上下文是指Dockerfile所在

  • 详解Dockerfile 中的 COPY 与 ADD 命令

    Dockerfile 中提供了两个非常相似的命令 COPY 和 ADD,本文尝试解释这两个命令的基本功能,以及其异同点,然后总结其各自适合的应用场景. Build 上下文的概念 在使用 docker build 命令通过 Dockerfile 创建镜像时,会产生一个 build 上下文(context).所谓的 build 上下文就是 docker build 命令的 PATH 或 URL 指定的路径中的文件的集合.在镜像 build 过程中可以引用上下文中的任何文件,比如我们要介绍的 COPY

  • Dockerfile中常用命令汇总

    语法组成: 1 注释信息 2 指令---参数 [通常要大写|实质上不区分大小写] 3 顺序执行 4 第一个非注释行必须是from [基于那个基础镜像制作]   5 需要一个专用目录[自己创建] 6 首字目必须大写---Dockerfile 7 制作镜像依赖到文件或者包组时,必须提前准备至专用目录下 .dockerignore file --每一行中定义一个忽略文件     --创建在工作目录中     例如:pam.d/su* ..................................

  • Docker 基础之Dockerfile命令详解

    Dockerfile 是一个文本格式的配置文件,用户可以使用 Dockerfile 快速创建自定义的镜像.我们会先介绍 Dockerfile 的基本结构及其支持的众多指令,并具体讲解通过执行指令来编写定制镜像的 Dockerfile. 基本结构 Dockerfile 由一行行命令语句组成,并且支持已 # 开头的注释行.一般而言,Dockerfile 的内容分为四个部分:基础镜像信息.维护者信息.镜像操作指令和容器启动时执行指令.例如: # This dockerfile uses the Ubu

  • Dockerfile中CMD和ENTRYPOINT命令详解

    前言 CMD 和 ENTRYPOINT 指令都是用来指定容器启动时运行的命令. 单从功能上来看,这两个命令几乎是重复的.单独使用其中的一个就可以实现绝大多数的用例.但是既然 doker 同时提供了它们,为了在使用中不至于混淆,本文试图把它们的用法理清楚.下面话不多说了,来一起看看详细的介绍吧. exec 模式和 shell 模式 CMD 和 ENTRYPOINT 指令都支持 exec 模式和 shell 模式的写法,所以要理解 CMD 和 ENTRYPOINT 指令的用法,就得先区分 exec

  • Dockerfile常用命令的使用简介

    之前的文章中,我们已经说了RUN.FROM.MAINTAINER.EXPOSE等一些DockerFile的相关命令,今天我们来看DockerFile的其他命令介绍. 01 CMD CMD命令用于指定一个容器启动的时候需要运行的命令.它和RUN指令有点类似,但是不同之处在于: RUN指令是镜像被构建的时候,需要执行的命令: CMD指令是指定容器被启动的时候,要运行的指令.举例: docker run -it container_name /bin/ls 这个命令是我们启动一个容器,并且运行/bin

  • Go语言基础入门应用简介及常用命令

    目录 Go语言简介 Go语言的主要特点[重点] Go语言应用 Go语言中常用命令 Go语言中可见性规则[重点] Go语言简介 Go 是一门开源.支持并发.垃圾回收的编译型系统编程语言从 2007 年末由 Robert Griesemer,Rob Pike,Ken Thompson 主持开发,后来还加入了 lan Lance Taylor,Russ Cox 等人并最终在 2009年11月 开源,在 2012 年早些时候发布了 Go 1 稳定版本. Go语言的主要特点[重点] 没有继承多态的面向对象

  • Linux简介及最常用命令(简单易学,但能解决95%以上的问题)

    Linux是目前应用最广泛的服务器操作系统,基于Unix,开源免费,由于系统的稳定性和安全性,市场占有率很高,几乎成为程序代码运行的最佳系统环境.linux不仅可以长时间的运行我们编写的程序代码,还可以安装在各种计算机硬件设备中,如手机.路由器等,Android程序最底层就是运行在linux系统上的. 一.linux的目录结构 bin  (binaries)存放二进制可执行文件 sbin  (super user binaries)存放二进制可执行文件,只有root才能访问 etc (etcet

  • hbase shell基础和常用命令详解

    HBase是Google Bigtable的开源实现,它利用Hadoop HDFS作为其文件存储系统,利用Hadoop MapReduce来处理HBase中的海量数据,利用Zookeeper作为协同服务. 1. 简介 HBase是一个分布式的.面向列的开源数据库,源于google的一篇论文<bigtable:一个结构化数据的分布式存储系统>.HBase是Google Bigtable的开源实现,它利用Hadoop HDFS作为其文件存储系统,利用Hadoop MapReduce来处理HBase

  • Linux常用命令全集(超全面)

    系统信息 arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 - (SMBIOS / DMI) hdparm -i /dev/hda 罗列一个磁盘的架构特性 hdparm -tT /dev/sda 在磁盘上执行测试性读取操作 cat /proc/cpuinfo 显示CPU info的信息 cat /proc/interrupts 显示中断 cat /proc/meminfo 校验

  • Linux常用命令last的使用方法详解

    前言 本文主要给大家介绍了关于Linux常用命令last用法的相关内容,分享出来供大家参考学习,话不多说,来一起看看详细的介绍吧. 命令简介: 该命令用来列出目前与过去登录系统的用户相关信息.指令英文原义:show listing of last logged in users 执行权限 :有些需要特殊权限 指令所在路径:/usr/bin/last 执行last指令时,它会读取位于/var/log目录下名称为wtmp的文件,并把该给文件的内容记录的登录系统的用户名单全部显示出来.默认是显示wtm

  • Docker 常用命令详细整理

    Docker 常用命令详细整理 查看Docker信息(version.info) # 查看docker版本 $docker version # 显示docker系统的信息 $docker info 对image的操作(search.pull.images.rmi.history) # 检索image $docker search image_name # 下载image $docker pull image_name # 列出镜像列表; -a, --all=false Show all imag

  • Docker 常用命令整理及使用注意事项总结

    常用docker命令 对docker常用命名的详细解释,让你快速学会docker的使用! docker,轻量级虚拟机,也有人称之为应用容器 优点:1.部署速度快 2.测试服务与部署可保持完全一致 常用命令 1.查看容器的root用户密码 docker logs <容器名orID> 2>&1 | grep '^User: ' | tail -n1 因为Docker容器启动时的root用户的密码是随机分配的.所以,通过这种方式就可以得到redmine容器的root用户的密码了. 2.

  • 详解修改docker时区及docker常用命令

    前几天遇到这样一个业务场景,数据库运行在docker 中,docker 的市区是utc 所以就跟北京时间相差8个小时.但是又不能重新运行一个容器,只能保证数据库运行状态,并把宿主机的时区复制给docker 容器.很苦恼, 首先我先把宿主机的时区改成啦CST 北京时间.然后把宿主机的时区复制给docker 容器.命令如下 docker cp /etc/localtime:[容器ID或者NAME]/etc/localtime 当然也可以进入容器进行修改时区(不过我的容器修改的时候总是报/etc/lo

  • sqlserver常用命令行操作(启动、停止、暂停)

    启动sql server Net Start MSSqlServer 暂停sql server Net Pause MSSqlServer 重新启动暂停的sql server Net Continue MSSqlServer 停止sql server Net stop MSSqlServer 命令行方式修改sql server sa 的密码 一直都是使用企业管理器操作sql的,昨天帮一朋友部署网站,租的国外vps主机,登陆上去只看到sql的图标正常运行的,企业管理器和查询分析器的影都没看到,汗一

随机推荐