环境配置问题

程序员经常可以听到的一句话是:“代码明明在我电脑上面能跑的啊,怎么到你这就不行了?肯定是你电脑问题(不是)”。听上去是一个调侃,其实确实是经常遇见的问题,而这个问题出现的本质原因是由环境配置引起的。代码运行需要依赖于环境,比如操作系统的设置,各种库和组件的配置,可能还涉及到很多的环境变量,而这些东西都是定制化的,当我们换一台机器的时候,就需要重新再配置一次,可以预见,这个过程需要做许多重复性的工作,耗费大量精力,那么自然就可以想到,我们在拷贝一份代码或者运行一个软件的时候,能否同时将原市的环境也囊括进来?

虚拟机

虚拟机是带着环境安装的一种解决方案。虚拟机是一种在操作系统里面运行的操作系统,对于底层系统来讲,虚拟机是一个普通文件,但是虚拟机会占用更多的资源,独占一部分内存和硬盘空间,虚拟机运行的时候,其他程序无法使用这些资源,即便是虚拟机里面的程序需要占用的内存很少,但是虚拟机仍然需要很大一部分资源才能够运行。而且虚拟机是操作系统级别的,启动起来非常慢。

Linux容器

由于虚拟机存在的诸多问题,Linux发展了另外一种虚拟化技术:linux容器。linux容器不是一个完整的操作系统,可以将其视为是一种对于进程的隔离。对容器里面的进程而言,各种资源都是虚拟的,实现了与底层系统的隔离。

启动迅速

容器里面的应用,就是底层系统的一个进程,不是虚拟机内部的进程,启动容器相当于启动一个进程,而不是启动一个操作系统,相较于虚拟机,它的启动更快。

占用资源少

容器只会占用需要的资源,不会占用那些没有用到的资源,虚拟机是操作系统级别的,需要占用所有资源,多个容器之间可以共享资源,但是虚拟机都是独享的。

体积小

容器只需要包含用到的组件,而虚拟机是整个操作系统的打包,所以容器要比虚拟机文件小的多

Docker

docker是linux容器的一种封装,给用户提供简单易用的容器使用接口。docker将应用程序与该程序的依赖,打包在一个文件里面,通过运行这个文件,就会生成一个虚拟容器,程序在这个容器里面运行,就像是在真实的物理及上面运行一样。docker的接口相当简单,用户可以非常方便的创建和使用容器,把自己的应用放入容器,容器还可以进行版本管理、复制、分享、更新,就像是普通的代码一样

Docker常见命令

docker把应用程序及其依赖,打包在image文件里。只有通过这个文件,才能够生成Docker容器。image文件可以看作是容器的模板。Docker根据image文件生成容器的实例。同一个image,可以生成多个同时运行的容器实例。

列出所有image文件

docker image ls

删除image文件

docker image rm [imagename]

image文件是通用的,一台机器的image文件拷贝到另外一台机器后同样可以使用。为了共享方便,image文件制作完成后,可以上传到网上的仓库:Docker Hub

将image仓库抓取到本地

docker image pull library/hello-world

上述命令中library/hello-world代表的是image文件在仓库中的位置,其中library是image文件所在的组,hello-world代表的是image文件的名字,Docker官方提供的image文件都在library组里面

运行image文件

docker container run hello-world

dock er container run命令会根据image文件,生成一个正在运行的容器实例,docker container run具有自动抓取的功能,如果在本地没有发现指定的image文件,就会从仓库自动抓取

终止container运行

docker container kill [containerid]

image文件生成的容器实例,本身也是一个文件,称为容器文件。也就是说,一旦容器生成,就会同时存在image文件和容器文件,而且关闭容器不会删除容器文件,只是容器停止运行而已。

列出正在运行的容器

docker container ls

列出所有的容器

docker container ls –all

删除容器

docker container rm [containerid]



docker

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!