如何系统地学习Docker?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何系统地学习Docker?相关的知识,希望对你有一定的参考价值。

1Docker 技术可谓是近年最火热的技术之一,铺天盖地的技术论坛和各种讲座,大家都在分享关于如何容器化及如何使用Docker优化自己运维和开发流程的经验。随着Docker技术的逐渐普及,使用Docker已经不再是一个难题。现在更加重要的是生产环境容器化的最佳实践,另外就是容器的编排框架之争。但是,对于技术人员来说,除去Docker 外表的繁华外,什么是容器,容器到底是怎么创建的,容器底层的技术探秘也是非常重要的。2014年开始接触 Docker的时候,经历了从最初的新奇—感叹竟然还有Docker 这样的好工具,到逐渐熟悉Docker的各种功能,尝试在生产环境中使用Docker技术的过程。但是,每每被人问到:“Docker技术到底是怎么实现的呢”我只能粗粗浅浅地说:“Docker是使用Linux Kernel的Namespace 和 Cgroups实现的一种容器技术。”那么,什么是Namespace,什么是Cgroups,Docker是怎么使用它们的,容器到底是怎么一步步被创建出来的.问到这些,我就会支支吾吾地不知所以。由此可见,了解容器技术的底层技术,然后明白它们是如何工作的,尤为重要,这些才是整个容器技术的基石,掌握了这些基石才能更加容易地向上攀登。

2从docker的用途上来考虑,看docker能否解决你工作中遇到的问题。例如在实际开发过程中,经常遇到的持续集成问题,软件开发,测试,部署,如何做成自动化的。配合github Jenkins和docker实现自动化部署,系统持续集成。docker最重要的是编排,如何合理有效稳定的管理各个容器,调度容器。可以看看k8s,自己动手搭建跑跑看。docker本身并没有引入新的技术,都是在linux原有的基础上做的融合。可以关注docker源码分析。UCloud也支持Docker,推出了UDocker产品。UCloud - 专业云计算服务商。

参考技术A

目前,腾讯云平台支持 Docker ,以下是在腾讯云生产环境中体验、使用Docker的教程,可以让你更好地理解Docker的不同使用场景。在腾讯云服务器上体验Docker利用 Docker 快速搭建 git 仓库 Gitlab 与代码审阅 Gerrit 平台在 CVM 上使用腾讯云 Docker 镜像加速构建Docker 部署dotnetcore此外,腾讯云还推出了容器服务CCS,可以在托管的云服务器实例集群上轻松运行应用程序。使用该服务,您将无需安装、运维、扩展您的集群管理基础设施,只需进行简单的API调用,便可启动和停止Docker应用程序,查询集群的完整状态,以及使用各种云服务。

如何优雅地删除Docker镜像和容器(超详细)

一、前言

 
  大家是怎么删除Docker中的镜像和容器的呢,有没有考虑过如何优雅地删除呢?本教程详细指导如何在优雅地删除Docker容器和镜像。如需了解如何在Centos7系统里面安装Docker,可以参考教程【最新Docker在Centos7下安装部署(参考官方教程文档)
 
  本文由 @大白有点菜 原创,请勿盗用,转载请说明出处!如果觉得文章还不错,请点点赞,加关注,谢谢!
 

二、优雅删除镜像(推荐做法

 

1、查看Docker要删除的镜像,如目标版本为stable-perlNginx,镜像ID(IMAGE ID)为 df1998569adb

docker images

 

2、使用命令“docker rmi 镜像ID”删除Nginx(stable-perl)的镜像,只取“IMAGE ID”的前3个字符即可。

docker rmi df1

 
  报错内容如下,意思是镜像(df1)存在使用中的容器(f66),不能强制删除镜像。官方的意思是要先停止容器运行,再进行镜像的删除操作吗?

Error response from daemon: conflict: unable to delete df1998569adb (cannot be forced) - image is being used by running container f6678f2821c7

 

3、查看Docker运行中的容器,如容器 nginx:stable-perl ,容器ID为 f66

docker ps


 

4、先停止nginx:stable-perl容器(f66)运行,再去删除Nginx(stable-perl)镜像(df1)

(1)停止容器(f66)运行。

docker stop f66

(2)删除镜像(df1)。

docker rmi df1

 
  What?都已经停止容器(f66)运行了,删除镜像(df1)怎么还报错啊!?其实,只停止容器的正常运行还不行,还有最重要的一步没做:删除容器

Error response from daemon: conflict: unable to delete df1998569adb (must be forced) - image is being used by stopped container f6678f2821c7

 

5、查看Docker所有容器的状态(包含运行中的和已停止的),“STATUS”为“Exited(0)”代表停止运行。执行删除容器命令“docker rm f66”,删除 nginx:stable-perl 容器,再查看 nginx:stable-perl 容器是否还在列表中。

(1)查看Docker所有容器的状态。

docker ps -a

(2)删除 nginx:stable-perl 容器。

docker rm f66

(3)再查看Docker所有容器的状态,发现 nginx:stable-perl 容器(f66)已经不存在了。

docker ps -a


 

6、删除镜像,再查看所有镜像,发现列表中已经不存在版本为stable-perl的Nginx镜像(df1)。

docker rmi df1


 

三、优雅删除容器(推荐做法

 

1、查看Docker中运行中的容器,例如 Nginx ,容器ID为 39c,并删除容器。

(1)查看Docker中运行中的容器。

docker ps

(2)删除Nginx容器(39c)。

docker rm 39c

(3)发现会报错,报错内容如下,意思是容器还在运行,不能删除,先停止运行再删除,或直接强制删除。

Error response from daemon: You cannot remove a running container 39cdb69246fdb6b623cff60af5b59e033149b6940bc5e0432c760ea245da81a9. Stop the container before attempting removal or force remove


 

2、停止容器(39c),查看所有容器的运行状态。

(1)停止容器。

docker stop 39c

(2)查看所有容器的运行状态(包含运行中的和已停止的)。

docker ps -a


 

3、删除容器(39c),查看所有容器的运行状态。

(1)删除容器。

docker rm 39c

(2)查看所有容器的运行状态(包含运行中的和已停止的)。

docker ps -a

(3)容器(39c)已经不存在了,说明被成功删除了。
 

 

四、暴力删除镜像和容器(不推荐做法

 

1、经验证,镜像中的容器状态已停止已删除的才能被强制删除,同时对应的容器(d70)也会被删除。若容器还在运行中删除镜像会报错命令“docker rmi”后面加参数“-f”。“image_id”代表镜像ID(IMAGE ID)。

docker rmi -f image_id

 

 

2、无论容器是否正在运行中或者已停止,都可被强制删除!命令“docker rm”后面加参数“-f”。“container_id”代表容器ID(CONTAINER ID)。

docker rm -f container_id


 

五、总结

  优雅地删除镜像的最佳做法是:先停止容器,再删除容器,最后删除镜像
 
  优雅地删除容器的最佳做法是:先停止容器,再删除容器

以上是关于如何系统地学习Docker?的主要内容,如果未能解决你的问题,请参考以下文章

如何优雅地删除Docker镜像和容器(超详细)

Docker 学习总结(72)—— Docker 相关的最重要的安全因素

Docker 学习总结(72)—— Docker 相关的最重要的安全因素

Docker学习笔记

Docker学习笔记

Docker学习笔记