docker知识

82 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第6天,点击查看活动详情

docker----CMD的详解

1.介绍

类似于RUN指令,用于运行程序,但二者运行的时间点不同:
    1.CMD是docker run时运行的
    2.RUN是在docker build构建镜像时运行的

作用:为启动的容器指定默认要运行的程序,程序运行结束,容器也就结束。CMD指令指定的程序可被
docker run命令行参数中指定要运行的程序所覆盖

大白话说:也就是容器启动以后,默认的执行的命令。重点就是这个"默认",意味着,如果docker run没有指定任何的
执行命令或者dockerfile里面也没有entrypoint,那么,就会使用cmd指定的默认的执行命令执行,同时也从侧面说明
了entrypoint的含义,它才是真正的容器启动以后要执行命令

CMD ["exectable","param1","param2"] (exec模式) CMD command (shell模式) CMD ["param1","param2"] (作为ENTRYPOINT指令的默认参数)

例:cd /root/dockerfile/test
cat dockerfile
#first dockerfile
FROM centos
MAINTAINER xianchao
RUN yum clean all
RUN yum install nginx -y
EXPOSE 80
CMD ["/usr/sbin/nginx","-g","daemon off;"]

构建镜像:
docker build -t="dockerfile/test-cmd:v1" .

基于上面构建的镜像运行一个容器
docker run -p 80 --name cmd_test2 -d dockerfile/test-cmd:v1
(不需要跟 nginx -g “daemon off;”了)

docker-ENTERYPOINT

类似于CMD指令,担起不会被docker run的命令行参数指定的指令所覆盖,而且执行命令行参数会当作参数送给 ENTRYPOINT指令指定的程序

但是,如果运行docker run 时使用了--entrypoint选项,将覆盖entrypoint指令指定的程序

优点:在执行docker run的时候可以指定ENTRYPOINT运行所需的参数 注意:如果dockerfile中如果存在多个ENTRYPOINT指令,仅最后一个生效

格式: ENTERYPOINT ["executable","param1","param2"]

docker的命令

-a, --all 显示所有容器(默认显示正在运行)

-n 显示最后创建的n个容器(包括所有状态)(默认值-1) 示例:docker ps -n2

-l,--latest 显示最新创建的容器(包括所有状态)

-q, --quiet 只显示数字id

-s, --size 显示总文件大小

--no-trunc 不截断输出

-f, --filter 根据提供的条件过滤输出 过滤条件如下: Filter | Description ---|--- id | 容器的ID name | 容器的Name label | 表示键或键值对的任意字符串。表示为或= exited | 表示容器退出代码的整数。只有对所有人有用。 status | created,restarting,running,removing,paused,exited,dead之一 ancestor| 筛选指定镜像的容器,例如[:],, or image@digest before or since | 筛选在给定容器ID或名称之前或之后创建的容器 volume | 运行已挂载给定卷或绑定挂载的容器的筛选器。 network | 过滤器运行连接到给定网络的容器。 publish or expose | 筛选发布或公开给定端口的容器,例如[/] or /[] health | 根据容器的健康检查状态过滤容器,例如starting, healthy, unhealthy or none. isolation | 仅Windows守护进程,例如default, process, or hyperv. is-task | 筛选服务的“任务”容器。布尔选项(true or false)

            示例:
            docker ps -f name=^'modality'
            docker ps --filter name=nginx
            docker ps -a --filter exited=0
            docker ps --filter status=running
            docker ps --filter expose=3306
--format    使用Go模板漂亮地打印容器
            过滤条件如下:
            Placeholder | Description
            ---|---
            .ID         | 容器的ID
            .Image      | 镜像的ID
            .Command    | 引用命令
            .CreatedAt  | 创建容器的时间
            .RunningFor | 自容器启动以来的运行时长
            .Ports      | 暴露的端口
            .Status     | 容器状态
            .Size       | 容器的磁盘大小
            .Names      | 容器的名称
            .Labels     | 分配给容器的所有标签
            .Label      | 此容器的特定标签的值,例如`{{.Label "com.docker.swarm.cpu"}}`
            .Mounts     | 容器挂载的卷
            .Networks   | 容器所用的网络名称

            示例:
            docker ps --format "{{.ID}}: {{.Names}}: {{.Command}}"