大白话Docker入门

Posted CI智创未来

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大白话Docker入门相关的知识,希望对你有一定的参考价值。

转载自: 云栖社区


随着docker现在越来越热门,也对docker的好奇心也越来越重,终于忍不住利用了一些时间把docker学习一遍。目前的资料不少,但是由于docker的发展较快,每个团队对docker的关注点也并不相同,大部分的文章还是不够完整和易懂,所以希望有这样一篇文章能让大家通过简单的阅读来客观全面的认识一下docker。


先简单认识一下Docker吧

Docker由下面几样东西组成,先简单认识一下吧

Docker Client : Docker提供给用户的客户端。Docker Client提供给用户一个终端,用户输入Docker提供的命令来管理本地或者远程的服务器。


Docker Daemon : Docker服务的守护进程。每台服务器(物理机或虚机)上只要安装了Docker的环境,基本上就跑了一个后台程序Docker Daemon,Docker Daemon会接收Docker Client发过来的指令,并对服务器的进行具体操作。


Docker Images : 俗称Docker的镜像,这个可难懂了。你暂时可以认为这个就像我们要给电脑装系统用的系统CD盘,里面有操作系统的程序,并且还有一些CD盘在系统的基础上安装了必要的软件,做成的一张 “只读” 的CD。


Docker Registry : 这个可认为是Docker Images的仓库,就像git的仓库一样,用来管理Docker镜像的,提供了Docker镜像的上传、下载和浏览等功能,并且提供安全的账号管理可以管理只有自己可见的私人image。就像git的仓库一样,docker也提供了官方的Registry,叫做Dock Hub(http://hub.Docker.com)


Docker Container : 俗称Docker的容器,这个是最关键的东西了。Docker Container是真正跑项目程序、消耗机器资源、提供服务的地方,Docker Container通过Docker Images启动,在Docker Images的基础上运行你需要的代码。 你可以认为Docker Container提供了系统硬件环境,然后使用了Docker Images这些制作好的系统盘,再加上你的项目代码,跑起来就可以提供服务了。 听到这里,可能你会觉得是不是有点像一个VM利用保存的备份或者快照跑起来环境一样,其实是挺像的,但是实际上是有本质的区别,后面我会细说。


Docker是怎么玩的?

一下接触这么多东西肯定有一点点晕了吧,没关系,我们把这些串起来走一遍就会好了。


首先你得安装一下docker的环境,这个我在这里就不说了,针对你的系统看一下docker的官网吧。

( http://www.docker.com/products/docker ) 


安装好后,我们在terminal中就有了docker的命令了,这个命令就是Docker Client啦。所有的操作都是通过docker命令完成的。比如: docker version

ruideMacBook-Pro:~ ruihuang$ docker version

Client:

 Version:      1.12.1

 API version:  1.24

 Go version:   go1.7.1

 Git commit:   6f9534c

 Built:        Thu Sep  8 10:31:18 2016

 OS/Arch:      darwin/amd64

Server:

 Version:      1.12.1

 API version:  1.24

 Go version:   go1.6.3

 Git commit:   23cf638

 Built:        Thu Aug 18 17:52:38 2016

 OS/Arch:      linux/amd64


查看一下我们拥有了哪些images吧,命令: docker images

大白话Docker入门(一)


可以看到我们拥有3个images,其中ubuntu大家都知道,busybox是一个linux下的大工具箱,它集成压缩了 Linux 的许多工具和命令,而job1则是我自己基于busybox创建的一个image,可以通过busybox的工具进行一些命令的执行,比如 echo 'hello world'。


再查看一下我们有哪些Docker Container吧,命令: docker ps

大白话Docker入门(一)


这里看到的都是正在运行的Container,如果要查看所有的Container就使用 docker ps -a 


下面我们从Docker hub的Registry下载一个Image,命令: docker pull image-name 

大白话Docker入门(一)


再看一下现在images,命令: docker images

大白话Docker入门(一)


我们看到刚才我们从docker hub上面下载了一个docker官方已经制作好的叫做hello-world的image,下载完成后,就在本地可以查看到这个image了。


我们把hello-world的image,放到一个docker container里面让他跑起来吧。命令  docker run image-name 


这个image运行后很简单,就是打印了这段话。告诉了我们,我们已经成功的让docker daemon从docker hub上拉了一个"hello-world"的image,并且通过这个image创建了一个container,并且通过daemon将输出的内容传回了docker client,也就是我们现在看到的这段话。


我们最后再看一下是否真的创建了docker container,命令 docker ps -a


首先看到,确实已经创建了docker container了,可见 docker run  的命令实际上是create 和 start的结合命令,基于hello-world的image创建并启动了container。container启动后执行了打印的程序,打印完上面我们看到的那句话,程序执行完成,container也跟着关闭了。从STATUS可以看出,在9分钟前hello-world的这个container已经exited了。


思考一下

这里我们可以想象一下,这个hello-world里面到底有什么?前面我也说了,其实一个image就是一个系统盘加上你的代码,所以对于这个hello-world的image,我想里面就是一个busybox这样的命令工具箱和一个打印文本(echo ....)的个sh文件,当image加载后执行了这个sh文件这么简单。


那么再思考一下,如果要我去创建这个image,我也可以拿一个ubuntu的image,并且安装了jre,再写一个class,main方法里面打印这段文本,最后build成这一个image,上传到docker hub。是不是也是一个hello-world-for-java的image呢。其它人下载后也可以一样的打印出预期的结果。


小结

好了通过这个简单的演示,希望大家已经初步认识了docker是怎么运作的。下面我们再来聊docker的概念和他可以为我们带来什么吧。

以上是关于大白话Docker入门的主要内容,如果未能解决你的问题,请参考以下文章

Docker入门教程Docker API

Docker 入门

Docker入门教程Docker Registry

Docker部署Rstudio Server【一】:Docker入门

Docker Compose 入门(V3)

Docker入门教程介绍