Dockerfile常用命令的使用简介

 更新时间:2021年04月19日 09:53:46   作者:DBA随笔  
这篇文章主要介绍了Dockerfile常用命令的使用简介,帮助大家更好的理解和学习使用Docker,感兴趣的朋友可以了解下

   之前的文章中,我们已经说了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命令的使用的资料请关注脚本之家其它相关文章!

相关文章

  • IDEA使用Docker插件(菜鸟教程)

    IDEA使用Docker插件(菜鸟教程)

    本文主要介绍了IDEA使用Docker插件,文中通过图文示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • docker部署访问postgres数据库的实现方法

    docker部署访问postgres数据库的实现方法

    本文主要介绍了docker部署访问postgres数据库的实现方法,文中根据实例编码详细介绍的十分详尽,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • chatgpt-web之docker打包流程

    chatgpt-web之docker打包流程

    这篇文章主要介绍了chatgpt-web中docker的打包流程,文中有详细的代码示例,对学习或工作有一定的帮助,需要的朋友可以参考下
    2023-05-05
  • docker-compose部署nginx教程

    docker-compose部署nginx教程

    文章介绍了如何安装和配置docker-compose,创建一个Nginx容器,并通过docker-compose.yml文件进行配置,包括映射文件夹和自定义转发配置,最后,提供了重启和配置生效的脚本
    2025-01-01
  • Docker 常用命令整理及使用注意事项总结

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

    这篇文章主要介绍了Docker 常用命令整理及使用注意事项总结的相关资料,这里整理了Docker 的常用命令,说明这些命令是什么意思及使用方法,需要的朋友可以参考下
    2016-12-12
  • Docker系列学习之Swarm mode管理节点常用命令详解

    Docker系列学习之Swarm mode管理节点常用命令详解

    这篇文章主要为大家介绍了Docker系列学习之Swarm mode管理节点常用命令详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • Docker-Compose搭建Redis集群的实现教程

    Docker-Compose搭建Redis集群的实现教程

    本文主要介绍了Docker-Compose搭建Redis集群的实现教程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • idea使用docker插件实现一键自动化部署

    idea使用docker插件实现一键自动化部署

    本文主要介绍了idea使用docker插件实现一键自动化部署,文中通过图文介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • Docker 查询、停止、删除和重启容器的详细过程

    Docker 查询、停止、删除和重启容器的详细过程

    这篇文章主要介绍了Docker 查询、停止、删除和重启容器,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-02-02
  • docker如何为容器指定虚拟网卡或IP

    docker如何为容器指定虚拟网卡或IP

    在Docker中,可以通过自定义网络和--network标志将容器绑定到特定的虚拟网卡或网络接口,此外,还可以使用host和macvlan等其他网络驱动,在使用这些模式时,需要注意一些注意事项
    2025-01-01

最新评论