首页 > 其他分享 >Commands and Arguments in Docker

Commands and Arguments in Docker

时间:2022-11-08 10:55:59浏览次数:50  
标签:容器 Commands 定义 命令 entrypoint Arguments ubuntu Docker dockerfile

如果你按照下面的方式运行了一个ubuntu容器,你将会发现一段时间后,容器退出了,为什么会发生这种情况?

这是因为,不像virtual machine,containers无意于托管os operation system,containers意图于运行指定的任务或进程,如托管一个web server或其应用的实例等,或简单的执行一些计算和分析任务,一旦任务完成,容器将会退出,容器仅存活在其内部应用在活动状态,若容器内的应用退出或崩溃,则容器将会退出。
那么问题是,谁定义了容器内该要运行着什么?

如果你查看了Dockfile定义,如下的nginx dockefile,你将会看到一条cmd指令

最后的cmd ["nginx"],表示该应用在容器启动后,将会在容器内运行。对应nginx 镜像而言,它是nginx命令,对于mysql 镜像而言,它是mysql命令:

前面我们仅仅在容器内运行了一个ubuntu操作系统。
下面我们看下该ubuntu镜像的Dockerfile定义:

能够看到它使用bash作为默认命令,而bash并不是像web server或database server那样,是一个真正的进程,它是一个shell,监听来自终端的输入,在找不到终端时,它将会退出。

这就导致,当我们执行docker run ubuntu命令,运行一个容器时,默认docker并没有attach一个终端到容器内,因此bash 程序没有找到终端,然后就退出了。

因此如何指定一个不同的命令来启动容器?其中一个选项是,附加命令到docker run ,这样它将覆盖容器内定义的command,如docker run unbuntu sleep 5,此时在容器启动后,它将sleep 5s后退出

但是如何持久化该修改呢?即声明你想要该镜像所创建的容器启动后,总是执行sleep命令
此时你可以基于ubuntu镜像创建自己的镜像,并指定一条新的命令。有多种指定命令的方式,要么简单地以shell形式,或json数组形式;需要注意的是,如果以json数组形式指定命令,数组的第一个元素必须是能够执行的命令,请不要像下面这种形式指定命令,而是应该将命令和它的参数隔离开来

如果我们想要实现,启动后随眠10s,可以在启动容器的时候,传入参数:

但是多数时候,我们可能直接使用entrypoint,它接收命令行参数做append操作,也可以配置默认值,

当启动容器时候,没有指定任何的参数,cmd命令,会append到entrypoint命令后面,如

此时,若在启动容器时,指定了参数,则会替换掉dockerfile中的cmd命令

当然,如果你想要覆盖dockerfile中定义的entrypoint,则可以使用--entrypoint选项参数,如

另外我们比较关心的是,dockerfile中定义的command和entrypoint,映射到kubernetes资源定义文件中会是什么样的?
在启动容器时,命令行参数等价于在POD定义文件中这样来书写

我们可以在POD定义文件中,使用Args字段参数来覆盖dockerfile中的command指令;而使用command字段来覆盖dockerfile中的entrypoint指令

标签:容器,Commands,定义,命令,entrypoint,Arguments,ubuntu,Docker,dockerfile
From: https://www.cnblogs.com/cosmos-wong/p/16868882.html

相关文章

  • python 使用docker开发
    背景pycharm+win10环境开发很多时候需要编译一些c++拓展例如bcrypt==3.1.4win安装一堆的MicrosoftVisualC++14.0isrequired使用docker可以模拟linu......
  • docker 设置 容器自启动
    因为我们要ssh去连接虚拟机,并且在本地操作虚拟机,但是这些都得在虚拟机容器启动的情况下才能实现,所以说设置开机自启就能省去很多步骤。dockerps查看正在运行的容器。......
  • docker 安装 mysql
    1、下载镜像文件dockerpullmysql:5.72、创建实例并启动dockerrun-p3306:3306--namemysql\-v/mydata/mysql/log:/var/log/mysql\-v/mydata/mysql/data:/var......
  • Docker介绍和Docker安装配置
    Dockers:是一种虚拟化容器技术,解决了以前在Linux安装MySQL等软件的繁琐步骤,而且某个软件工作出问题可能导致其他服务不可用。docker为每一个软件提供了容器互不干扰(在run......
  • docker
    使用yum卸载Docker库yumremovedockerdocker-clientdocker-client-latestdocker-commondocker-latestdocker-latest-logrotatedocker-logrotatedocker-engine......
  • 基于docker和cri-dockerd部署kubernetes
    基于docker和cri-dockerd部署kubernetesv1.25.31、环境准备1-1、主机清单主机名IP地址系统版本k8s-master01k8s-master01.666.comkubeapi.666.comkubeap......
  • Docker安装Redis
    1.Docker安装Redis方案一:使用docker拉取镜像1、查找DockerHub上的redis镜像dockersearchredis2、拉取官方的镜像,标签为3.2(先创建redis文件夹)dockerpullredis:3.2......
  • docker-compose部署elasticsearch集群
    一、准备基础镜像dockerpullelasticsearch:7.3.2二、dockerfile(Dockerfile-elasticsearch),为了保护原生的镜像FROMelasticsearch:7.3.2MAINTAINERlili......
  • Docker 安装 nginx 并启动容器
    docker拉取Nginx镜像dockerpullnginx:latest拉取完成查看:dockerimages准备工作先在主机创建工作文件夹,为了挂载配置和静态文件的访问使用#启动一个容器docker......
  • docker mysql slave 运行
    dockerrun\--name=mysql8.0\--hostname=988da3c35887\--env=MYSQL_ROOT_PASSWORD=123456\--env=PATH=/usr/local/sbin:/usr/loc......