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是什么?-王先生笔记](https://wxsnote.cn/wp-content/uploads/2021/10/1635407498-20201002_5f77805e8f516.png)
一句话总结就是,从仓库中拉取镜像,利用镜像生成容器。
创建应用时所用命令讲解
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?
或使用宝塔安装
请登录后发表评论
注册
社交帐号登录