谈谈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 pul
l获取到的默认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
,ummm,不停也行,习惯性离开就结束进程
然后,我们重新启动一个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 ps
docker ps -a
docker images
有没有发现感觉很不一样?2333
来解释一下吧,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:hahaha
docker images
docker rmi d10d
commit
参数,没错,就是这个,很像git
的提交操作哦~
nginx-test
对应image name
,hahaha
对应tag
,至于删除操作,没错,rmi
参数即可
或许你还想问,那那些配置文件一样的images
该怎么删除呢?
使用rm
参数即可
命令总结