一、使用

1、docker run -it 命令中的 it 参数是什么含义

在Docker中,-it是两个选项的组合,用于在交互式模式下运行容器。让我解释一下它们的含义:

  • -i 或 --interactive:这个选项表示要进入容器的交互式模式。它允许您与容器的标准输入(stdin)进行交互,这样您可以输入命令、与容器中运行的应用程序进行交互等。
  • -t 或 --tty:这个选项分配一个伪终端(pseudo-TTY)设备给容器。伪终端允许模拟终端的交互性,使得您可以像在本地终端一样与容器进行交互,例如,使用箭头键、Ctrl+C 来中断进程等。

当您在容器中执行docker run -it命令时,Docker会创建一个交互式的终端会话,使您可以直接与容器内的命令行界面互动。这在需要手动控制容器、调试或执行需要用户输入的任务时非常有用。
小结:-it 的含义是“保持 STDIN 打开状态,并且分配一个虚拟的终端(Terminal)”。您可以简单理解为,我们通过 SSH 登录到了容器内部,在当前终端下运行的所有命令都是基于容器内的。

2、镜像和容器这两个概念

通俗地说,镜像是一个同时包含业务应用和运行环境的“系统安装包”,它需要运行起来之后才能提供服务,运行后镜像的“实例化”称为容器(Container)。你可以对同一个镜像实例化多次,产生多个独立的容器,这些容器拥有不同的容器 ID,不同的容器之间是相互隔离的。

进一步理解,你可以把容器比喻为虚拟机,虚拟机也是,彼此之间的数据和状态都是隔离的,但是要注意容器和虚拟机有本质上的区别,那就是容器和宿主机是共享同一个内核的

3、Dockerfile COPY 和 ADD 指令有什么区别

COPY 和 ADD 是两个常用于 Dockerfile 中的指令,用于将文件从主机复制到容器中,但它们有一些区别:
(1)COPY 指令:

  • COPY 主要用于复制本地主机上的文件或目录到容器中。
  • 它的语法通常为 COPY <源路径> <目标路径>,其中源路径可以是本地主机上的文件或目录,目标路径是容器中的目标位置。
  • COPY 只进行简单的文件复制操作,不会自动解压缩文件,也不会从 URL 下载文件。

(2)ADD 指令:

  • ADD 不仅可以复制本地主机上的文件或目录到容器中,还可以从 URL 下载文件并复制到容器中,并且它会自动解压缩压缩文件(如 tar、gzip、bzip2 等)。
  • 它的语法为 ADD <源路径> <目标路径>,和 COPY 类似。
  • ADD 功能更强大,但也因此更复杂,如果只需要简单地将本地文件复制到容器中,通常建议使用 COPY。

  ADD指令示例:

# 使用ADD从URL下载文件并复制到容器中
ADD https://example.com/file.tar.gz /app/

总的来说,COPY 用于简单的文件复制操作,而 ADD 则具备更多功能,包括文件复制、自动解压缩和从 URL 下载等。在选择使用时,应根据具体需求来决定使用哪个指令。如果只需要进行文件复制操作,推荐使用 COPY,以保持 Dockerfile 的简洁性。

4、Dockerfile CMD 和 ENTRYPOINT 指令有什么区别

详情参见《Dockerfile 中的 CMD 与 ENTRYPOINT》这篇博文。

二、常见问题

1、Error starting daemon: error initializing graphdriver: driver not supported

安装并启动docker服务时, 报了如上的错误。找到了个解决方案:

# rm -rf /var/lib/docker/*
# systemctl start docker.service

2、docker push到harbor私库中报unknown blob错误

本地构建好镜像推送到私库,私库配置了域名,并使用https协议进行访问。

执行docker push到harbor私库中时报unknown blob错误。

# docker push xxxx/library/tomcat:latest
The push refers to repository [xxx/library/tomcat]
e52576dc1f49: Pushing [==================================================>] 3.584kB
ffdb94571df7: Pushing [==================================================>] 372.7kB
47fc804728ff: Pushing [> ] 545.3kB/80.14MB
dab4e68f20a2: Pushing [==================================================>] 6.144kB
6435966ee18f: Pushing [==================================================>] 4.096kB
b1c057a951b8: Waiting
df654d36e69e: Waiting
77b174a6a187: Waiting
unknown blob

解决方案:

原本nginx harbor域名配置:

proxy_redirect http:// $scheme://;

将上面那行nginx配置命令改成下面这种形式即可解决推送镜像报unknown blob错误问题。

proxy_redirect http:// https://;

Docker 使用及常见问题总结的更多相关文章

  1. 字节跳动内部微服务架构-Docker实战学习笔记分享 真香

    前言 基于 Spring Cloud 的微服务设计和开发,已经越来越多地得到了更多企业的推广和应用,而 Spring Cloud 社区也在不断的迅速发展壮大之中,近几年时间,Spring Cloud ...

  2. 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗? 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现! 是否有一个全局视角来查看系统的运行状况? 有什么办法可以监控到JVM的实时运行状态?

    https://alibaba.github.io/arthas/ Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱. 当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决 ...

  3. Arthas Alibaba 开源 Java 诊断工具

    Arthas 用户文档 English Docs Arthas(阿尔萨斯) 能为你做什么? Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱. 当你遇到以下类似问题而束手无策时,A ...

  4. activemq消息队列的使用及应用docker部署常见问题及注意事项

    activemq消息队列的使用及应用docker部署常见问题及注意事项 docker用https://hub.docker.com/r/rmohr/activemq/配置在/data/docker/a ...

  5. docker 常用命令 以及常见问题

    常见命令 windos 在搜索框 输入 windows powershell,打开.然后输入以下命令#查看镜像列表 docker images ls #删除单个镜像 docker rmi image- ...

  6. Docker 类面试题(常见问题)

    Docker 常见问题汇总   镜像相关 1.如何批量清理临时镜像文件? 可以使用sudo docker rmi $(sudo docker images -q -f danging=true)命令 ...

  7. 在Ubuntu上安装docker常见问题

    安装完docker之后,发现docker是装好了,但是运行docker就会报“Segmentation Fault or Critical Error encountered. Dumping cor ...

  8. docker和kubernetes中hostname的使用和常见问题

    hostname在docker中是使用UTS namespace进行隔离的.docker中主要有两种ns的用法, 一种是docker run --uts="" busybox.这种 ...

  9. Docker常见问题

    问题 当我使用docke search mysql时,显示如下错误: [root@iZ25u61v97hZ opt]# docker search redis Segmentation Fault o ...

  10. Docker部署常见问题

    一.删除容器和镜像 在删除镜像之前要先用 docker rm 删掉依赖于这个镜像的所有容器(哪怕是已经停止的容器),否则无法删除该镜像. 停止容器 # docker stop $(docker ps ...

随机推荐

  1. ContextWrapper

    /* * Copyright (C) 2006 The Android Open Source Project * * Licensed under the Apache License, Versi ...

  2. Go接口 - 构建可扩展Go应用

    本文深入探讨了Go语言中接口的概念和实际应用场景.从基础知识如接口的定义和实现,到更复杂的实战应用如解耦与抽象.多态.错误处理.插件架构以及资源管理,文章通过丰富的代码示例和详细的解释,展示了Go接口 ...

  3. Bug是如何产生的?

    前言 知乎上有一个提问:Bug是如何产生的? ↓↓↓ 今天,我们就这个话题,一起来做个讨论. 个人觉得程序员与BUG的关系,就像空气中的细菌与人的关系一样. 我们不能完全杜绝与它接触,唯一能做的,就是 ...

  4. 聊聊基于Alink库的特征工程方法

    示例代码及相关内容来源于<Alink权威指南(Java版)> 独热编码 OneHotEncoder 是用于将类别型特征转换为独热编码的类.独热编码是一种常用的特征编码方式,特别适用于处理类 ...

  5. C#基数排序算法

    前言 基数排序是一种非比较性排序算法,它通过将待排序的数据拆分成多个数字位进行排序. 实现原理 首先找出待排序数组中的最大值,并确定排序的位数. 从最低位(个位)开始,按照个位数的大小进行桶排序,将元 ...

  6. 谈谈selenium4.0中的相对定位

    相对定位历史 2021-10-13 发布的 selenium 4.0 开始引入,selenium 3.X是没有的 implement relative locator for find_element ...

  7. Vue源码学习(十三):nextTick()方法

    好家伙,nextTick, (...这玩意,不太常用) 1.什么是nextTick 在Vue中,nextTick是一个用于异步执行回调函数的方法. 它在Vue更新DOM后被调用,以确保在下一次DOM更 ...

  8. HarmonyOS原生分析能力,即开即用助力精细化运营

    数据分析产品对开发者的价值呈现在两个层面,第一个是产品的层面,可以通过数据去洞察用户的行为,从而找到产品的优化点.另外一个就是运营层面,可以基于数据去驱动,来实现私域和公域的精细化运营. 在鸿蒙生态上 ...

  9. jmeter--jsr223组件使用和功能详解

    相比于BeanShell 取样器,JSR223取样器具有可大大提高性能的功能(编译)如果需要,一定要使用JSR223取样器编写脚本是更好的选择!!! 属性描述名称:显示的此取样器的描述性名称,可自定义 ...

  10. [USACO2007OPENS] City Horizon S

    题目描述 Farmer John has taken his cows on a trip to the city! As the sun sets, the cows gaze at the cit ...