48小时系统班试听入口

Linux运维-红帽认证解析之一文带你初解什么是Docker!

发布作者:新盟教育 发布日期:2021-12-10 浏览人数:20000人

带你了解什么是Docker

image.png



谈谈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 namehahaha对应tag,至于删除操作,没错,rmi参数即可。


或许你还想问,那那些配置文件一样的images该怎么删除呢?


使用rm参数即可:






命令总结





最后,如果有朋友需要自学,或者没有很好的学习途径,那么可以看一下这个视频:

http://www.thinkmo.cn/Home/Course/nradio/course_id/299.html

这是一个零基础入门的教程,对于刚开始接触Linux运维的同学还是很友好的,希望对你有帮助。


image.png