Docker从2013年发布至今,一直备受瞩目,被认为可能会改变软件行业。 但是,许多人并不清楚Docker到底是什么,要解决什么问题,好处又在哪里?本次分享会详细解释,帮助大家理解它,并且还有简单易懂的实例,教你如何将它用于日常开发。
VM就是通过软件模拟具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。
虚拟机可以在一种操作系统里面运行另外一种操作系统,比如Windows系统里面运行Linux系统。虽然用户可以通过虚拟机还原软件的原始环境。但是,虚拟机这种解决方案还是会有以下几个缺点。
资源占用多 虚拟机会独占一部分内存和硬盘空间。它运行的时候,其他程序就不能使用这些资源了。哪怕虚拟机里面的应用程序,真正使用的内存只有1MB,虚拟机依然需要几百MB的内存才能运行。 冗余步骤多 虚拟机是完整的操作系统,一些系统级别的操作步骤必不可少,比如用户登录。 启动慢 启动操作系统需要多久,启动虚拟机就需要多久。可能要等几分钟,应用程序才能真正运行。LXC是一种内核虚拟化技术,可以提供轻量级的虚拟化,以便隔离进程和资源。
LXC不是模拟一个完整的操作系统,而是对进程进行隔离。或者说,在正常进程的外面套了一个保护层。对于容器里面进程来说,它接触到的各种资源都是虚拟的,从而实现与底层系统的隔离。
由于容器是进程级别的,会有以下几点优势。
启动快 容器里面的应用,直接就是底层系统的一个进程,而不是虚拟机内部的进程。所以启动容器相当于启动本机的一个进程,而不是启动一个操作系统,速度会快很多。 资源占用少 容器只会占用需要的资源,不会占用没有用到的资源。虚拟机由于是完整的操作系统,不可避免地要占用所有资源。另外,多个容器可以共享资源,虚拟机是独享资源。 体积小 容器只要包含用到的组件,而虚拟机是打包整个操作系统,所以容器文件比虚拟机文件小很多。总之,容器有点像轻量级的虚拟机,能够提供虚拟化的环境,但是成本开销会小很多。Docker属于LXC的一种封装,提供简单易用的容器使用接口,是目前最流行的LXC解决方案。 在现代的开发流程中随处可见Docker的身影,Docker提供了环境隔离、应用打包等功能,让程序部署变得非常简单。
Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。它基于Google公司推出的Go语言进行开发实现,这应该也是Go大火的原因之一吧。 如果觉得难以理解Docker,我们可以把它类比为一艘货轮,而货轮上面的集装箱就是一个个应用,也就是容器。
Build, Ship and Run Any App, Anywhere
即通过对应用组件的封装(Packaging)、分发(Distribution)、部署(Deployment)、运行(Runtime)等生命周期的管理,达到应用组件级别的 “一次封装,到处执行”。这里的应用组件,既可以是一个Web应用,也可以是一套数据库服务,甚至可以是一个操作系统或编译器。
容器与镜像的关系类似于面向对象编程中的对象与类。
Docker面向对象容器对象镜像类Docker Image Layer
Docker的主要用途,目前有三大类
提供一次性的环境 比如本地环境测试软件、持续集成的时候,提供单元测试和构建运行的环境 提供弹性的云服务 因为Docker容器可以随开随关,非常适合动态扩容和缩容 组建微服务架构 通过多个容器,一台机器可以运行多个服务,因此在本机就可以模拟出微服务架构虚拟机技术与容器技术的最大区别在于:多个虚拟机使用多个操作系统内核,而多个容器共享宿主机操作系统内核。
Docker 使用的第一种存储驱动为 AUFS(Advanced Multi-layered unification filesytem),AUFS 完全重写了早期的 UnionFS,目的是提高其性能与可靠性,此外还引入了如 branch 负载均衡等新功能。
Docker 是一个开源的商业产品,有两个版本:社区版(Community Edition,缩写为 CE)和企业版(Enterprise Edition,缩写为 EE)。企业版包含了一些收费服务,个人开发者一般用不到。下面的介绍都针对社区版。
Docker CE 的安装请参考官方文档。
MacWindowsUbuntuDebianCentOSFedora其他Linux发行版安装完成后,运行下面的命令,验证是否成功
docker version // 或者 docker info搜索镜像
docker search [ImageName]查看本地镜像
docker images可以看到本地所有的镜像信息
REPOSITORY TAG IMAGE ID CREATED SIZE rabbitmq management 867da7fcdf92 5 weeks ago 181MB mcr.microsoft.com/mssql/server 2017-latest d04f0f18f395 2 months ago 1.46GB liyasthomas/postwoman latest 6c6f62a90502 3 months ago 949MB redis 3.2 87856cc39862 20 months ago 76MB mariadb 10.3.8 2c73b3262fff 23 months ago 363MB删除镜像
docker rmi [ImageID/ImageName]查看正在运行的容器
docker ps查看所有容器包括已经关闭的容器
docker ps -a删除已停止容器
docker rm [Container ID/Container Name]本次演示的实例是搭建一个文档分享系统ShowDoc
拉取最新镜像 # 原版官方镜像安装命令(国内用户不建议直接使用原版镜像,可以用后面的加速镜像) docker pull star7th/showdoc # 国内镜像安装命令(安装后记得执行docker tag命令以进行重命名) docker pull registry.cn-shenzhen.aliyuncs.com/star7th/showdoc 重命名镜像 docker tag registry.cn-shenzhen.aliyuncs.com/star7th/showdoc:latest star7th/showdoc:latest 新建存放ShowDoc数据的目录 # Windows系统,在执行的时候加上文件路径,目录请提前创建好,例子:docker run --rm -v d:/docker/showdoc/data hello-world # Linux mkdir /docker/showdoc_data mkdir /docker/showdoc_data/html chmod -R 777 /docker/showdoc_data 启动ShowDoc docker run -d --name showdoc -p 4999:80 -v d:/docker/showdoc/html:/var/www/html/ star7th/showdoc 参数说明 参数说明-d后台运行容器–name设置容器名-p 4999:80将宿主机4999端口映射到容器80端口-v d:/dockerworkspace/showdoc/html:/var/www/html/将宿主机d:/dockerworkspace/showdoc/html目录映射(挂载)到容器/var/www/html/目录根据以上命令操作的话,往后showdoc的数据都会存放在/showdoc/html目录下。 你可以打开 http://localhost:4999 来访问showdoc (localhost可改为你的服务器域名或者IP)。
账户:showdoc 密码:123456