带你了解什么是Docker
带你了解什么是Docker
谈谈Docker的基本架构
并不从很深的层面来谈docker怎么实现,从简单角度谈谈docker的运行流程和架构。先来看两张图。
第一张:
docker_host指代我们的宿主机(运行电脑的物理机),程序docker deamon(守护进程)在宿主机中运行,通过docker deamon来操作docker。
蓝色的地方代表的是互联网端,这是一整个互联网中docker用户共享的一个地方,可以从这里拖取你需要的images。
再来看第二张图:
这张图就是图一的中文版,是更加清晰、直白的解释。
几条命令带你了解Docker
docker run imagename:tag
为什么说Docker足够快,足够方便?
想象一下,你打开vmware,启动一个ubuntu,使用bash输出一句hello world需要多久?一分钟、两分钟?而docker呢,一秒、两秒!
不过上面的例子,在实际运用中并没有多大的意义,下面来看更具体的操作:
docker run -p 8080:80 -d nginx
先搭建docker环境,然后开发完成你的任务后给别人继续开发,这无疑是非常实用的功能,那该如何去搭建一个(比如说)nginx服务器呢?
你可以使用docker pull去从docker的共享中心获取,这个见最后的命令总结。
回到上面这个命令,这个命令使用docker run,通过-d命令,启动了一个名为nginx的image(这个image是我通过docker pull获取到的默认tag lastest的nginx image),使用-p命令,将docker中的80端口映射到宿主机8080端口。
看一下宿主机效果图:
没问题,果然是熟悉的味道!
接下来问题来了,那怎么操作这个image呢?又或者说,我如何对其进行开发呢?
docker exec -it 3137e /bin/bash
你肯定会问3137e这是啥命令,这么奇怪?
错了错了,这不是命令,这是id,对应的就是上面的正在运行的nginx,docker run的时候返回的id。
那,-it又是啥意思呢?这里-it代表的不是一个参数,而是-i,-t,只不过为了方便,直接结合了。
-i参数,打开STDIN,用于控制台交互。
-t参数,分配tty设备,该可以支持终端登录,默认为false。
不信?拆开来看一下。
获取到bash命令行,然后正常操作配置就行!
第三个问题,我们都知道vmware具有拖拽的功能,那docker该如何将宿主机文件拉入images中呢?
第一种办法,当然是共享文件夹。
首先,我们停下之前运行的docker,不停也行,习惯性离开就结束进程。
然后,我们重新启动一个docker:
docker run -p 8080:80 -d nginx -v /F/vue.js:/var/www/html
如果你是windows系统的话,很遗憾,会和我一样报错!
那,如何解决呢?
这里就牵涉到Docker for Windows 里的Shared Drives 设置,右键docker图标,打开setting,找到shared drives,设置你需要的磁盘。
然后就没问题了。
第二种办法,也是最推荐的,copy 进去:
docker cp index.html 21146://usr/share/nginx/html
熟悉linux的肯定很容易理解,没错,就是将当前文件夹内index.html文件移入id为21148的docker内的该目录下,来看具体演示:
最后一步,也是至关重要的,我该如何分享我的docker给别人使用呢?
先来看三个命令的不同效果:
docker psdocker ps -adocker images
有没有发现感觉很不一样?
解释一下吧,docker ps表示当前正在运行的docker,docker ps -a表示所有的docker,包括已经运行结束了的,docker images 则表示所有的images。
用一个通俗的话来说,images好比一个新的镜像,而这些docker像是一个个配置文件,你用这个配置去加载这个镜像,然后内容也不一样。
回到正题,比如说我加了index.html的这个docker我想弄成images分享给别人,我该怎么办?(注意,只有images才可以分享去给别人运行,理解成vmvare的vmx文件吧,ummm,不一定准确)
来看命令:
docker commit 21146 nginx-test:hahahadocker imagesdocker rmi d10d
commit参数,没错,就是这个,很像git的提交操作。
nginx-test对应image name,hahaha对应tag,至于删除操作,没错,rmi参数即可。
或许你还想问,那那些配置文件一样的images该怎么删除呢?
使用rm参数即可:
命令总结
最后,如果有朋友需要自学,或者没有很好的学习途径,那么可以看一下这个视频:
http://www.thinkmo.cn/Home/Course/nradio/course_id/299.html
这是一个零基础入门的教程,对于刚开始接触Linux运维的同学还是很友好的,希望对你有帮助。