Docker 使用及常见问题总结

一、使用

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://;

 

posted @ 2020-12-22 21:48  人艰不拆_zmc  阅读(707)  评论(1编辑  收藏  举报