在深入探讨Docker之前,先通过一个流程图来简单了解Docker的工作原理。安装Docker后,只需执行docker run命令,Docker会在本地查找指定的镜像,如果已安装,则运行该镜像;如果没有,则从Docker Hub(将在下一篇文章中介绍)搜索并下载镜像,然后在本地创建容器并启动程序。这听起来是否像软件安装?逻辑上是的,但从技术角度来看并非如此。阅读本文后,将得到答案。
在深入了解Docker之前,让先看看目前使用的非Docker传统系统,并理解为什么要转向Docker。在这张图中,可以看到传统的网页浏览方式。想象一下,如果有数百万用户同时访问同一个服务器,服务器会变得越来越慢。为了解决这个问题,来看传统的策略。这种策略的问题在于,如果服务器或硬件因任何原因关闭,用户将面临困难。为了解决这个问题,出现了多种解决方案,其中最好的解决方案之一就是Docker。
从虚拟机转向Docker的原因是,虚拟机完全运行在一个完整的操作系统上,这需要高内存需求。如果使用Docker容器而不是虚拟机,可以享受到以下优势:
Docker是一个开源平台,用于构建、部署和管理容器化应用程序。这个生态系统围绕创建和运行容器。Docker是一个作为容器运行时的软件。例如,这个生态系统包含:
容器简化了分布式应用程序的交付,并随着组织转向云原生开发和混合多云环境而越来越受欢迎。简单来说,Docker使得安装和运行软件变得非常容易,无需担心设置或依赖关系。
在这里,客户端与服务器通信(docker ps)。如果客户端需要特定的镜像,它会向服务器请求该镜像(docker pull),服务器将在注册表中找到镜像并将其返回给客户端(注册表包含由各种开发者上传的镜像)。
在正常系统中的实际问题、解决方案以及容器的工作原理。安装Docker的步骤如下:
在这里,可以看到IMAGE ID,它被认为是创建的镜像的最新ID。Docker始终将最新层更新到镜像。确切地说,就是取一个镜像(层)进行修改,最终将得到修改后的镜像(最顶层)。对于每次修改,Docker都会为其层分配不同的ID,因此镜像最终会获得最新的层ID。
最后添加的层应该在顶部。复制AB镜像并创建C镜像。在AB层的顶部添加C镜像层。现在C镜像位于AB层的顶部。可以通过使用Docker diff命令来查看层的修改。C表示更改,A表示添加。
注意:这是一个很大的缺点,因为在进行修改时,所有以前的不需要的层也会在层后面。为了解决这个问题,可以使用Dockerfile。在介绍Dockerfile之前,将使用此方法创建镜像。
现在,可以通过保存和重定向文件与朋友共享镜像。或者,可以使用以下命令保存镜像:
docker save -o myimage.tar myimage:tag
保存文件后,可以将文件与朋友分享。一旦朋友收到文件,他可以使用以下命令加载文件:
docker load -i myimage.tar
在hub.docker.com创建账户。在hub.docker.com创建仓库—可以推送创建的Docker镜像。应该使用之前创建的相同仓库名称。创建仓库后,将获得上传命令:
docker push lmcshub/myhttpd:v1
需要使用docker login命令登录Docker账户。系统会要求输入用户名和密码。登录成功后,使用:
docker push lmcshub/myhttpd:v1