1.什么是Docker?
在理解docker之前,外我们先来了解容器和虚拟机的概念
我们用的传统虚拟机如VMware,VisualBOX之类的需要模拟整台机器包括硬件,每台虚拟机都需要有自己的操作系统。
虚拟机一旦被开启,预分配给它的资源将全部被占用。
每一台虚拟机包括应用,必要的二进制和库,以及一个完整的用户操作系统。
容器技术是和我们的宿主机共享软件资源及操作系统,可以实现资源的动态分配。
容器包含应用和所以的依赖包,但是与其他容器共享内核。
容器在宿主机操作系统中,在用户空间以分离的进程运行。
容器技术是实现操作系统虚拟化的一种途径,可以让您在资源受到隔离的进程中运行应用程序以及依赖关系。通过使用容器,我们可以轻松打包应用程序的代码,配置和依赖关系,将其变成容易使用的构建块,从而实现环境一致性。运营效率,开发人员生产力和版本控制等诸多目标。容器可以帮助我们保证应用程序快速,可靠,一致的部署,其间不受部署环境的影响。容器还赋予我们对资源更多的精细化控制能力,让我们的基础设施效率更高。通过下面的图片我们可以很直观的反应出这俩者的区别。
而Docker属于Linux容器的一种封装,提供简单易用的容器接口,它是目前最流行的Linux容器解决方案。而Linux容器是linux发展出了另一种虚拟化技术,简单来讲,Linux容器不是模拟一个完整的操作系统,而是对进程进行隔离,相当于是在正常进程的外面套了一个保护层。对于容器里面的进程来说。它接触到的各种资源是虚拟化的,从而实现与底层系统的隔离。Docker将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器,程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了Docker,就不用担心环境问题。总体来说,Docker的接口相当简单,用户可以方便的创建和使用容器,把自己的应用放入容器,容器还可以进行版本管理,复制,分享,修改,就像管理普通的代码一样。
2.Docker的安装
3.docker的一些参数介绍
访问一下server1的80端口就可以看到game2048这个游戏。
解除上面的俩个警告:
我们再来一个容器
从上面可以看出容器它和快照很像,缺点是每一次的操作不能保存,相当于cow(copy on write)写时复制机制
上面test:v1和busybox:latest有相同之处是使用了同一个镜像层,而test:v1比busybox:latest多了一个sh,这时因为咱们刚才新建了一个testfile文件,这个打包后的容器不能准确知道sh里面具体执行了什么内容,所以它是不安全的
官方推荐使用Dockerfile的方式来保存
mkdir docker ##建立这个目录
cd docker ##进入这个目录
vim Dockerfile ##编辑文件
vim Dockerfile ##编辑Dockerfile
我们再来看一下add关键字
add和copy的作用差不多,只不过add在拷贝文件的同时也会解压文件
数据卷VOLUME关键字
docker run -it --name vm2 test:vm3 ##运行vm2
WORKDIR工作目录参数、CMD命令、ENTRYPOINT命令
WORKDIR命令它用来指定ADD、COPY、RUN命令的工作目录,相当于我们平时用的cd 命令。
CMD、ENTRYPOINT命令都是用于容器启动后执行的命令,但是CMD命令会被docker RUN 后面接的命令所覆盖,而ENTRYPOINT命令不会被覆盖。
这里我们顺便来看一下Dockerfile的俩种格式,一种shell格式,一种exec格式。
cd docker ##进入docker目录
vim Dockerfile ##编辑Dockerfile文件
vim Dockerfile ##前面是shell格式我们再来编辑Dockerfile文件来试一下exec格式
vim Dockerfile ##由于变量没有被解析,这里我们再来修改一下文件
vim Dockerfile