docker是什么?

Docker简述

Docker是一种OS虚拟化技术,是一个开源的应用容器引擎。它可以让开发者将应用打包到一个可移植的容器中,并且该容器可以运行在几乎所有linux系统中(Windows10目前也原生支持,Win10前需要内置虚拟机),正所谓“一次打包,到处运行”。

Docker容器的运行是完全的沙箱机制,相互之间不会有任何关联(除非自己串联集群)。网络、存储、进程等资源,不仅对于不同的容器是相互隔离,对于宿主机和容器直接也是隔离的,除非你手动映射暴露端口或者挂载存储卷。很多人不理解,Docker和虚拟机到底有什么区别。

从这两张结构图来看,Docker比虚拟机少了一层虚拟机操作系统,Docker的应用直接Docker引擎上运行。由于虚拟机需要一层操作系统,所以会导致虚拟机的体积非常大,通常在几G到十几G之间。并且通常一个虚拟机上,不只一个应用,因此对于整体的虚拟集群管理并不太友好,比较难做到灵活分配。而一个Docker镜像的体积大约在几十M到几百M之间,一般一个镜像只打包一个应用,由多个镜像组成一个完整的项目,并且镜像易于复制,可以跨平台运行,这样可以使项目的部署管理有更好的灵活性。所以Docker无论从资源消耗上、管理上、使用上都在虚拟机之上,因此我们又有何理由不使用这样的容器化技术呢?

对于容器化技术的学习,可谓是深如海。从基本的镜像、容器操作,到镜像的打包、容器的部署,再到企业生产级的容器集群管理技术(Docker官方的Swarm、Google的Kubernetes),如此多的内容,并不是所有人技术人员都能一朝学会。不过除了生产级别的集群管理技术有难度意外,其他内容从学习使用的角度来说,其实是非常简单的,况且K8s这种东西,对于普通开发来说也是很少能接触到。

说到这里,可能还有很多人觉得这个是公司层面、运维层面的操作,不是很了解Docker对于普通开发来说,意味着什么,对我们有什么好处?

多办公环境,一键部署。假如你在公司一套开发环境,在家一套开发环境,当你公司的开发环境变更时,在家的环境就要跟着变,如果是使用Docker,将一些依赖型的应用,如Redis、ZK、Mysql等边缘服务都打包在docker里面。无论你在哪里改变了内容,只要在运行时更新下镜像,就可以按照最新的内容去执行了,不需要一个手动去安装,适配。联调测试,无需依赖他人。当后端完成对外的接口后,将后端应用打包进docker,这样无论是前端、测试,在何地何时都可以自己把容器启动起来进行联调测试,而不需要自己手动一步步地搭建这个后端环境。

什么场景下使用docker?

1、需要环境隔离的应用
2、需要环境隔离的线上应用,如:docker一个apache,宿主机通过nginx反向代理出去,实现LNMPA架构
3、需要用户隔离的应用
4、并发小的微应用
5、热备
6、临时应用

它可以运行在什么系统之上?

Linux发行版、Mac、Windows等非openvz或docker下的系统服务器

推荐Linux发行系统CentOS 7

概念介绍

宿主机,Host,运行Docker所在的物理机,是Docker运行的系统环境。而且Docker是一个开源的应用容器引擎,我们使用docker应该有容器思维,我们不应该将它当成一台服务器使用,而应该将它当成一个应用来使用。

镜像

镜像,Image,相当于一个程序模板,通过这个模板可以生成很多个相似的容器。可以理解为Java中的类,它本身不具备执行运行的能力,是一个对象抽象的模板。每个镜像可以有多个版本,用tag来区分。镜像可以通过Dockerfile来构建。

容器

容器,Container,Docker运行的最小单位对象。它是通过镜像实例化出来的一个可运行对象。容器的修改,可以提交反作用于镜像,更新这个容器的模板。

仓库

仓库,Repository,用于存储管理镜像的仓库,类似于git管理代码的仓库一样,可以管理多版本的镜像。

图片[3]-docker是什么?-王先生笔记
镜像、容器、仓库的关系

一句话总结就是,从仓库中拉取镜像,利用镜像生成容器。

创建应用时所用命令讲解

docker run -d \
    -p 9000:9000 \     #无/udp标识时,即放行端口TCP端口9000,前为服务器端口后为服务器端口
    -p 9443:9443/udp \   #后有/udp,即放行端口UDP端口9443,端口说明同上
    --name portainer \  #容器名
    --restart=always \  #和上行一样,它们都是环境变量,除了开头--,-e开头的也是另外环境变量的一种
    -v /var/run/docker.sock:/var/run/docker.sock \   #前为服务器目录,后为容器目录
    -v portainer_data:/data \  #同上
    portainer/portainer-ce:latest   #镜像地址,冒号后可以跟指定的镜像版本号,latest代表该镜像的最新版

该命令还可以使用改变为一行命令,删除\和换行即可

docker run -d -p 9000:9000 -p 9443:9443/udp -v --name portainer --restart=always /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer

如何安装Docker?

或使用宝塔安装

© 版权声明
THE END
喜欢就支持一下吧
点赞13赞赏
分享
评论 抢沙发

请登录后发表评论