docker指令

目录

1、docker命令

2、镜像和容器的关系

3、Dockfile中特殊语法

 (1)CMD 和 ENTRYPOINT 

① 普通案例

② 特殊案例

 a、dockfile中的命令 和 命令行中的命令有冲突   

b、使用exec执行PID=1的命令

 ③【cmd、entrypoint】和 exec 的关系

(2)ADD

4、镜像命令 

(1)镜像生成

 【方案一】: 指定dockerfile,生成镜像

【方案二】:容器备份,生成镜像

(2)镜像拉取 

(3)镜像查看

(4)删除所有未被任何容器引用的镜像 【危险!不建议】

(5)push镜像到docker hug


1、docker命令

Docker学不会?不妨看看这篇文章 (qq.com)

Docker批量删除REPOSITORY、TAG为none的镜像_shenzhen_zsw的专栏-CSDN博客_docker删除repository

docker删除镜像的时候报错--image has dependent child images - 清风软件测试 - 博客园

2、镜像和容器的关系

        镜像是一个静态的只读模板,它包含了运行一个应用程序所需要的所有东西,包括代码、运行时环境、库、环境变量和配置文件。

        容器是镜像nginx的一个运行实例(如果把镜像看做类,容器就是类的实例对象)。

3、Dockfile中特殊语法

 (1)CMD 和 ENTRYPOINT 

ENTRYPOINT 和 CMD 都是 Dockerfile 的语法.

(1) CMD 用于提供默认的容器启动命令。如果在启动容器时没有提供命令,那么将使用 CMD 指定的命令。如果在启动容器时提供了额外命令,那么 CMD 指定的命令将被忽略。

(2) ENTRYPOINT 用于将容器当作一个可执行程序。ENTRYPOINT 指定的命令将总是在容器启动时执行,而且不会被忽略。如果在启动容器时提供了命令,那么这个命令将作为 ENTRYPOINT 命令的参数。

① 普通案例

假设你有一个 Dockerfile,其中包含以下指令:

ENTRYPOINT ["echo"]CMD ["Hello, Docker!"]

        当你基于这个 Dockerfile 构建镜像,并用这个镜像启动容器时,如果你没有提供命令,那么容器将输出 “Hello, Docker!”。这是因为 ENTRYPOINT 指定的 echo 命令将使用 CMD 指定的 “Hello, Docker!” 作为参数。

        如果你在启动容器时提供了命令,例如 docker exec -it <容器ID或names> “Hello, World!”,那么容器将输出 “Hello, World!”。这是因为你提供的命令将作为 ENTRYPOINT 指定的 echo 命令的参数,而 CMD 指定的 “Hello, Docker!” 将被忽略。

② 特殊案例

 a、dockfile中的命令 和 命令行中的命令有冲突   

        如果Dockerfile中指定 ENTRYPOINT ["sh", "xx.sh"], 但是又运行了 “docker run --name 容器名 -idt <image> /bin/bash ”,  这时 Docker 将尝试运行 sh xx.sh /bin/bash。这意味着 /bin/bash 会被作为参数传递给 xx.sh 脚本。

        如果你想在容器启动时运行 /bin/bash 而不是 sh xx.sh,你需要在 docker run 命令中使用 --entrypoint 参数来覆盖 Dockerfile 中的 ENTRYPOINT 指令,如下所示:

docker run --name 容器名 -idt --entrypoint /bin/bash <image>
b、使用exec执行PID=1的命令

在 Dockerfile 中,可以使用 exec 形式的 ENTRYPOINT 或 CMD,例如:

ENTRYPOINT ["exec", "python", "app.py"]或CMD ["exec", "python", "app.py"]

        这里的 exec 实际上并不是指 exec 命令,而是表示 Docker 应该使用 exec 形式来执行指定的命令,而不是使用 shell 形式。

        在 exec 形式中,Docker 会直接执行指定的命令,而不是通过 /bin/sh -c(command) 或其他 shell 来执行。这样做的一个好处是,执行的命令会成为容器的 PID 1 进程,这样它就可以接收到系统的各种信号,例如 SIGTERM。

        即无exec时,docker默认会转化为 /bin/sh -c [cmd或entrypoint] python app.py;有exec时docker会直接执行 [cmd或entrypoint] python app.py,不再借助shell执行。

 ③【cmd、entrypoint】和 exec 的关系

  • dockfile中的 exec  是在标识一种命令执行形式。告诉机器直接以PID=1来运行后面的命令,而不是先启动shell 再在shell里执行后续命令。
  • cmd、entrypoint 是在标识 后面的命令是 默认值 or 必须执行的值。

    所以两者是独立的,只是可以组合一起用罢了。所以 cmd exec python app.py 并不能保障PID=1的命令就是python app.py,因为cmd的命令会被 “docker run xx 命令”中的命令取代,而exec只保障后续执行的命令一定是PID=1,至于具体的命令是什么还要受cmd、entrypoint、docker run xx 的指令限制。

(2)ADD

        ADD命令用于将主机中的文件或目录复制到镜像中,所以基于同一个镜像启动的所有容器都会有相同的工作目录。复制完成后,主机目录和镜像目录是完全独立的,后续操作都不会互相影响。

      例如 ADD ./pythonwork/test01 /test会将主机上的./pythonwork/test01目录下的所有内容复制到镜像下的/test

4、镜像命令 

(1)镜像生成

 【方案一】: 指定dockerfile,生成镜像

docker build -t <镜像名:镜像tag> -f=<dockfile所在路径> .
  • -t 参数:用于指定镜像。如果不写-t,Docker 会为构建的新镜像分配一个随机的哈希值作为其 ID,但其镜像名:镜像tag=None:None,会导致删除、引用等管理上的问题。如果只是tag如果不写,默认是lastest。
  • 最后的点(.):表示 Dockerfile 所在的上下文目录的路径,点(.)即当前目录,也可以指定其他目录。Docker 构建过程需要一个上下文。上下文是在本地的文件系统中指定的一个目录,它包含了构建镜像所需要的所有文件。

注意:这个目录会影响Dockerfile中的ADD、COPY指令,因为这两个指令中对应的本地文件系统目录就是以该目录为父目录的。举例:

        如果 Dockerfile 和 app.py 在不同的文件夹下,那么你需要在执行 docker build 命令时,指定的构建上下文路径应包含这两个文件。

例如,你的文件结构如下:

/myproject/

  |-- Dockerfile

/otherdir/

  |-- app.py

        你可以将 app.py 复制或者移动到 myproject 目录下,这样 Dockerfile 和 app.py 就在同一个目录中了,然后你在 myproject 目录下执行 docker build 命令。

        如果你不想移动 app.py 文件,那么你就需要选择一个包含 Dockerfile 和 app.py 的公共父目录作为构建上下文。这里的公共目录就是 / 目录,再在该公共目录下执行 docker build 命令,并使用 -f 参数指定 Dockerfile 的路径,如下:

docker build -t my-python-app:1.0 -f /myproject/Dockerfile .

 然后在 Dockerfile 中,你可以使用以下命令将 app.py 文件添加到镜像中:   

  ADD /otherdir/app.py /app/

注意:这样会将 / 目录下的所有文件和子目录都包含到构建上下文中,这可能会使构建过程变得非常慢,并且可能会包含你不想添加到镜像中的文件。因此,通常建议将 Dockerfile 和所有需要添加到镜像的文件都放在同一个目录中。 

        所以常看到把Dockerfile和需要添加到镜像的文件都放在同一个目录下,然后再cd 到这个公共目录,执行docker build xx操作。

【方案二】:容器备份,生成镜像

docker commit -p <容器ID> 备份命名

(2)镜像拉取 

docker image pull <repository>:<tag> 或者  docker pull <repository>:<tag>

其中:
    PEPOSITORY-镜像的仓库源;TAG-镜像的标签。未指定TAG,默认是最新tag。

(3)镜像查看

 docker images
或
docker images -a

(4)删除所有未被任何容器引用的镜像 【危险!不建议】

多人协同下不建议使用!!!!

docker image prune -a

如果是要同时删除所有已经停止的容器以及所有未被任何容器引用的镜像,包括那些你可能希望保留的镜像:【同样危险!不建议!

docker system prune -a 

(5)push镜像到docker hug

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/70694.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2023年05月 C/C++(八级)真题解析#中国电子学会#全国青少年软件编程等级考试

C/C编程&#xff08;1~8级&#xff09;全部真题・点这里 第1题&#xff1a;道路 N个以 1 … N 标号的城市通过单向的道路相连:。每条道路包含两个参数&#xff1a;道路的长度和需要为该路付的通行费&#xff08;以金币的数目来表示&#xff09; Bob and Alice 过去住在城市 1.在…

百度云智大会:科技与创新的交汇点

​ 这次的百度云智大会&#xff0c;可谓是亮点云集—— 发布了包含42个大模型、41个数据集、10个精选应用范式的全新升级千帆大模型平台2.0&#xff0c;发布首个大模型生态伙伴计划&#xff0c;而且也预告了文心大模型4.0的发布&#xff0c;大模型服务的成绩单也非常秀&#x…

ABAP BP维护客户cl_md_bp_maintain=>maintain

ps_head结构如下 下面是封装好的form示例 *&---------------------------------------------------------------------* *& Form frm_modify_customer *&---------------------------------------------------------------------* *& text *&--------…

TypeScript类型守卫

概念 在语句的块级作用域【if语句内或条目运算符表达式内】缩小变量类型的一种类型推断的行为。 类型守卫可以帮助我们在块级作用域中获得更为需要的精确变量类型&#xff0c;从而减少不必要的类型断言。 类型判断&#xff1a;typeof实例判断&#xff1a;instanceof字面量相等…

2023-08-31 LeetCode每日一题(一个图中连通三元组的最小度数)

2023-08-31每日一题 一、题目编号 1761. 一个图中连通三元组的最小度数二、题目链接 点击跳转到题目位置 三、题目描述 给你一个无向图&#xff0c;整数 n 表示图中节点的数目&#xff0c;edges 数组表示图中的边&#xff0c;其中 edges[i] [ui, vi] &#xff0c;表示 ui…

一个简单的DNS服务器

DNS数据包的格式如下&#xff1a; 头部&#xff1a;会话标识ID&#xff0c;用于标识报文的ID标识&#xff0c;对于请求报文和其对应的应答报文&#xff0c;这个字段是相同的&#xff0c;通过它可以区分DNS应答报文是哪个请求的响应。正文&#xff1a; Queries区域 查询名QNAME…

Python入门学习14(面向对象)

一、内置方法 二、封装 1. 封装的概念是指&#xff1f; 将现实世界事物在类中描述为属性和方法&#xff0c;即为封装。 2. 什么是私有成员&#xff1f;为什么需要私有成员&#xff1f; 现实事物有部分属性和行为是不公开对使用者开放的。同样在类中描述属性和方法的时…

Maven 项目配置使用备忘录

创建 Maven 项目&#xff1a; mvn archetype:generate -DgroupIdcom.ivandu -DartifactIdcmaimms -DarchetypeArtifactImaven-archetype-quickstart -DinteractiveModefalse命令解释&#xff1a; -DgroupId 组织Id&#xff08;项目包名&#xff09;。-DartifactId ArtifactI…

如何分库分表?

分析&回答 分库&#xff1f;分表&#xff1f;还是既分库又分表&#xff1f; 如果需要分表&#xff0c;那么分多少张表合适&#xff1f; 由于所有的技术都是为业务服务的&#xff0c;那么&#xff0c;我们就先从数据方面回顾下业务背景。 如果每天产生 8w 笔交易单&#…

SCRUM敏捷产品负责人(CSPO)认证培训课程

课程简介 Scrum是目前运用最为广泛的敏捷开发方法&#xff0c;是一个轻量级的项目管理和产品研发管理框架。产品负责人是Scrum的三个角色之一&#xff0c;产品负责人在Scrum产品开发当中扮演舵手的角色&#xff0c;他决定产品的愿景、路线图以及投资回报&#xff0c;他需要回答…

系统日期如何在页面展示,框架是react或者vue3

安装插件dayjs或者moment.js 2.使用setInterval&#xff08;useInterval&#xff09;或者requestAnimationFrame react项目中useInterval的代码示例&#xff1a; import React, {useState } from react; import { useInterval } from "ahooks"; import moment fro…

学单片机有前途吗?

学单片机有前途吗? 个人认为学习任何一门技术都比不学的强&#xff0c;针对学单片机有前途吗?那么比较对象当然就是在整个IT行业做对比。因此我们可以从职业前景、钱景、这几方面综合考量。 学单片机有前途吗?我觉得重要的一点就是是否适合职业生涯发展&#xff0c;总说程序…

C++内存管理(2)new、delete详解

目录 new operator&#xff08;new操作&#xff09; new类对象时加不加括号的差别 new工作任务 delete工作任务 new和delete 堆区空间操作&#xff08;对比malloc和free&#xff09; new和delete操作基本类型的空间 new和delete操作基本类型的数组 new和delete操作类的…

elasticsearch访问9200端口 提示需要登陆

项目场景&#xff1a; 提示&#xff1a;这里简述项目相关背景&#xff1a; elasticsearch访问9200端口 提示需要登陆 问题描述 提示&#xff1a;这里描述项目中遇到的问题&#xff1a; 在E:\elasticsearch-8.9.1-windows-x86_64\elasticsearch-8.9.1\bin目录下输入命令 ela…

简单谈下Spring、Spring MVC和Spring Boot

Spring是一个开源的轻量级框架&#xff0c;用于构建Java应用程序。它提供了一种全面的编程和配置模型&#xff0c;可以帮助开发人员构建各种类型的应用程序&#xff0c;从简单的控制台应用程序到大型企业级应用程序。Spring框架的主要目标是提高应用程序的可维护性、可扩展性和…

Java真过饱和了吗?现在学Java迟了?

Java行业内幕揭秘 我是某有名机构的线下课Java老师&#xff0c;负责Java热门框架教学&#xff0c;如Spring、Spring MVC、Spring Boot。但最近被解雇了&#xff0c;让我来吐槽一下。Java现在的学习人数真的太多太多了。 Java的学习饱和度 Java学习的人太多&#xff0c;给你一…

python Playwright优化页面等待和处理异步操作

在使用 Playwright 进行页面自动化时&#xff0c;优化页面等待和处理异步操作是非常重要的&#xff0c;可以提高脚本的稳定性和执行效率。 优化页面等待和处理异步操作的建议 **1. 使用正确的等待条件&#xff1a;**Playwright 提供了多种等待条件&#xff0c;如等待元素出现…

Linux修改24小时制中国时区

1. 执行命令修改时区 tzselect 2. 时区依次选 亚洲 5) Asia 中国 9) China 北京 1) Beijing Time 确定 1) Yes 3. 执行命令使其生效 #TZAsia/Shanghai; export TZ ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime #上海时区 ln -sf /usr/share/zoneinfo/Etc/GMT…

【CSS】简记CSS效果:通过transition(动画过渡属性)实现侧边栏目滑入滑出

需求 在资金明细的页面中&#xff0c;点击按钮时筛选区域从左侧滑出&#xff0c;完成筛选点击确认后调用接口完成数据查询&#xff0c;筛选区域滑入左侧&#xff1b; 基于微信小程序页面实现 wxml代码 <view><!-- 操作按钮 --><button type"primary&qu…

昨天面试的时候被提问到的问题集合(答案)

1、vue的双向绑定原理是什么&#xff1f;里面的关键点在哪里&#xff1f; Vue的双向绑定原理是基于Object.defineProperty或者Proxy来实现的&#xff0c;其关键点在于数据劫持&#xff0c;即对数据的读取和修改进行拦截&#xff0c;在数据发生变化时自动更新视图 2、实现水平垂…