一、使用

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. 高可用mongodb集群(分片+副本):规划及部署

    目录 ■■ 概述 ■ 下图是一个典型的3节点分片副本集群 ■ Mongos Server ■ config server ■ shard server ■ replica set ■ 仲裁者(Arbi ...

  2. 一个简单的C4.5算法,采用Python语言

    Test1.py 主要是用来运行的 代码如下: # -*- coding: utf-8 -*- from math import log import operator import treePlot ...

  3. 基本操作:vscode快捷键

      1.复制,剪切 补选中具体内容的话,光标放在这一行的任何位置,输入Ctrl+C,就表示已经复制这一行了:直接Ctrl+V可以粘贴: 截切也一样:光标放在这一行的任何位置,输入Ctrl+X,就表示已 ...

  4. jenkins 原理篇——pipeline流水线 声明式语法详解

    大家好,我是蓝胖子,相信大家平时项目中或多或少都有用到jenkins,它的piepeline模式能够对项目的发布流程进行编排,优化部署效率,减少错误的发生,如何去写一个pipeline脚本呢,今天我们 ...

  5. Java文件与IO流

    首先我们要清楚什么是流,正如其名,很形象,流就是像水一样的东西,具有方向性,在java中 ,流大概就是类 接下来,我们要对输入输出流有一个基本认识,什么是输入输出流呢? 输入输出明显需要一个参照,而这 ...

  6. mybatis 操作 mysql 动态创建数据表

    Map 数据一般是根据需求生成的,例如 map.put("ticketId",176),map.put("ticketName","测试工单" ...

  7. Python入门--字符串

    字符串的使用和C语言 .java中一致 .使用" "(双引号)并且字符串可以与数字相乘,表示我使用这个字符串次数 字符串的连接:'+' Python中的变量直接赋值即可 ,如果赋予 ...

  8. 使用 PPO 算法进行 RLHF 的 N 步实现细节

    当下,RLHF/ChatGPT 已经变成了一个非常流行的话题.我们正在致力于更多有关 RLHF 的研究,这篇博客尝试复现 OpenAI 在 2019 年开源的原始 RLHF 代码库,其仓库位置位于 o ...

  9. 28. 干货系列从零用Rust编写正反向代理,项目日志的源码实现

    wmproxy wmproxy已用Rust实现http/https代理, socks5代理, 反向代理, 静态文件服务器,四层TCP/UDP转发,内网穿透,后续将实现websocket代理等,会将实现 ...

  10. DP:打家劫舍

    你是一个专业的小偷,计划偷窃沿街的房屋.每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警. 给定一个代表每 ...