Docker基本概念和简单原理介绍

**

什么是容器?

**
轻量级的操作系统虚拟化解决方案, 能够在Linux系统上迅速创建一个容器(类似于虚拟机)并在容器上部署和运行应用程序,同时还可以通过配置文件轻松将应用程序的自动化安装、部署和升级。
基于Linux容器(LXC)技术,利用namespace的隔离机制隔离资源和cgoup的限额功能进行资源管理
docker诞生于2013年go语言实现,类似于java虚拟机的效果,在github维护。

Guest OS 是虚拟机安装的一个完整的内核,Hypervisor为硬件虚拟化平台在HOST OS 层以内核驱动的形式的存在,虚拟机实现资源隔离的方式是利用独立的Guest OS以及利用Hypervisor虚拟化cpu、内存、I\O等设备实现。
Docker Engine可以看做对linux,namespace,cgroup、镜像管理文件操作系统的封装,docker并没有和虚拟机一样利用一个独立的Guest OS实行环境的隔离,利用的是当前linux内核本身支持的容器方式实现了资源和环境的隔离简单来说docker就是利用zplace实现了系统环境的隔离,利用cgroup实现了资源的限制,利用镜像实例实现跟环境的隔离,由此可见docker有着比虚拟机更少的抽象层,由于docker不需要Hypervisor实现硬件资源的虚拟化所以运行在docker上的程序直接使用的都是实际物理机的硬件资源,因此在cpu、内存的利用率上,docker在效率上具有很大的优势,此外docker直接使用虚拟机的内核,避免了虚拟机启动时所需要的系统引导时间和操作系统运行资源的消耗,利用docker能够在几秒钟之内,启动大量的容器,虚拟机无法办到,快速启动、低资源消耗的优点使得docker在弹性云平台自动运维方面具有很好的应用场景。
与虚机相比容器的优点
更快速的交付和部署
高效的部署和扩容
更高的资源利用率
更简单的管理
docker在整个开发中都可以完美辅助你快速交付,开发者本地应用直接进入到可持续开发的流程当中,例如开发者可以使用一个标准的镜像构建一套开发容器,开发完成之后运维人员可以直接使用这个容器部署代码,docker可以快速创建容器,快速迭代应用程序使得整个过程全程可见,使团队中的其他成员更容易理解应用程序是如何创建和工作的,此外容器的启动时间是秒级的,大量节约开发、测试、部署的时间;
还有一个关键的点docker容器几乎可以在任意平台上运行包括虚拟机、物理机、公有云、私有云和个人电脑服务器等。这种兼容性可以让用户把一个应用程序从一个平台直接迁移到另外一个平台,docker的兼容性和轻量性的特点可以轻松的实现负载的动态管理,快速扩容或方便的下线你的应用和服务,这种速度趋近于实时;
此外docker对系统资源率利用很高,一台主机上可以运行数千个docker容器,容器除运行其应用之外基本不消耗额外的系统资源,使得应用性能高,系统开销小,而传统的虚拟机方式则需要十个不同的应用, 就要启动10个不同的虚拟机耗费了大量的资源;
另一个使用docker只需要小小的更改就可以替代以往大量的更新工作,所有的修改都以增量的方式被分发和更新, 主要实现了自动化和高效的管理。

Docker的组件

docker是采用cs架构,docker daemon作为服务端来接受客户的请求,并处理这些请求,这些请求有创建、运用、分发容器客户端和服务端即可以运行在同一台机器,也可以通过socket或者REST API 来进行通信,docker daemon 一般在宿主主机后台运行等待接受客户端的消息,docker client则为用户提供一些可执行命令,用户可以用这些命令实现与docker daemon的交互,docker具有四大模块:镜像、网络、文件卷、管理。镜像一般是只读模板,用户不能直接修改使用镜像用户可以轻松创建容器,相同的镜像可以创建不同的容器,容器和容器之间具有相互隔离互不干扰,可以进行被开始、停止、删除和启动等操作,他是相对于镜像上的一层可写层,文件卷可以将本地的文件卷挂载在容器内,容器和容器之间可以共享本地文件夹。网络则是帮助容器实现网络互联。

Docker常见架构

主要有三部分:docker 客户端、daocker daemon和docker Registry,Registry则是帮助用户存储镜像的仓库,分为公有hub和私有hub,公有hub通常指的是docker公司创建的hub,同时各个供应商和厂商都会创建自己的镜像hub供自己的客户使用,华为云的镜像hub则是容器镜像服务。前面我们说docker理念是一次构建到处使用而docker daemon则是将镜像存储在宿主机中,而docker为了达成这一理念,docker Registry就应用而生,他帮助用户保存镜像,用户可以通过docker pull 命令,将镜像直接从 registry直接拉取到本地、宿主机,当用户创建了一个新的镜像则可以通过docker push命令将镜像push到registry中,这就是docker常见的架构。

Docker的安装

1、unbutu可以直接使用命令进行安装

sudo apt-get install dokcer-engine

出现报错请修改docker 配置文件
https://www.cnblogs.com/zzcit/p/5845717.html 或者 官网 https://docs.docker.com/install/linux/docker-ce/ubuntu/#install-from-a-package

docker的使用
docker -v 查看docker版本


docker images 查看我们所拥有的镜像


docker pull tomcat  #(tomcat是镜像名,如果不指定默认是latest) 下载镜像

一般镜像会保存两类文件manifest、layer文件,manifest是layer的信息,它会告诉你客户端的镜像包含哪些layer。docker 会根据manifest会下载相应的layer(一层一层的下载)。
docker run -it -d -p 8888:8080 tomcat:latest 将宿主机端口与tomcat容器端口绑定

latest就是其标签,8888为宿主机端口,8080为远程docker容器端口(tomcat默认为8080)

返回的是sha值(容器的sha值)

docker ps  查看在运行的容器
docker stop  containerid 停止运行docker容器`


docker rm -f 容器别名 删除指定容器名的容器


docker rm -f $(docker ps -a | awk '{print $1}')  删除所有容器 


docker rename <my_container> <my_new_container>  给容器起别名 当然name可以换成id


docker exec -it tomcat bash  进入docker shell | docker attach <container-id>

tomcat(为容器别名,也可以是容器id,bash或"/bin/bash”),后边的方法也可以
exit 退出docker shell 或者 Ctrl + D

猜你喜欢

转载自blog.csdn.net/qq_42066250/article/details/89250420