Docker的理解和基本命令详解
如何通俗解释Docker是什么?
Docker思想来自于集装箱,集装箱解决了什么问题呢?比如,在一艘大船上,要把各种各样的货物要整理起来,集装箱(Docker)就可以做到,并且相互间不会影响。就不需要指定运输的船了(这个船运吃的那个船运穿的)。只要把货物装在集装箱里封装好,就可以用一艘大船把他们都运走。
1.Docker就是类似的理念。云计算是运输船,Docker就是集装箱。
1.不同的应用程序可能会有不同的应用环境,比如.net开发的网站和php开发的网站依赖的软件就不一样,如果把他们依赖的软件都安装在一个服务器上就要调试很久,而且很麻烦,还会造成一些冲突。比如IIS和Apache访问端口冲突。这个时候你就要隔离.net开发的网站和php开发的网站。常规来讲,我们可以在服务器上创建不同的虚拟机在不同的虚拟机上放置不同的应用,但是虚拟机开销比较高。docker可以实现虚拟机隔离应用环境的功能,并且开销比虚拟机小,小就意味着省钱了。
2.你开发软件的时候用的是Ubuntu,但是运维管理的都是centos,运维在把你的软件从开发环境转移到生产环境的时候就会遇到一些Ubuntu转centos的问题,比如:有个特殊版本的数据库,只有Ubuntu支持,centos不支持,在转移的过程当中运维就得想办法解决这样的问题。这时候要是有docker你就可以把开发环境直接封装转移给运维,运维直接部署你给他的docker就可以了。而且部署速度快。
3.在服务器负载方面,如果你单独开一个虚拟机,那么虚拟机会占用空闲内存的,docker部署的话,这些内存就会利用起来。
总之docker就是集装箱原理。
4.docker就是用来存放应用的一个容器
容器管理
#dockerrun-it–namevm1ubuntubash//创建容器 #dockerps-a//查看容器状态 #dockerattachvm1//链接容器 #dockertopvm1//查看容器进程 [root@foundation22~]#dockerrun-it–namevm1ubuntu root@b6e503aec1e3:/#[root@foundation17~]# //////用ubuntu这个镜像生成一个名为vm1的容器/// [root@foundation22~]#dockerrun-itubuntu//未制定容器名称 [root@foundation22~]#dockerps-a CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES c2c94bd4ef22ubuntu“/bin/bash”2minutesagoUp2minutessilly_curie a2798a01f075ubuntu“/bin/bash”4minutesagoUp8secondsvm1 [root@foundation22~]#dockerstopc2c94bd4ef22//结束一个容器(用进程id结束) c2c94bd4ef22 [root@foundation22~]#dockerrmc2c94bd4ef22//删除容器(用进程id删除) c2c94bd4ef22 [root@foundation22~]#dockerps-a CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES a2798a01f075ubuntu“/bin/bash”5minutesagoUpAboutaminutevm1 root@bd4961841626:/#[root@foundation17~]#dockerattachvm1 root@bd4961841626:/#ls bindevhomelib64mntprocrunsrvtmpvar bootetclibmediaoptrootsbinsysusr root@bd4961841626:/#touchfile{1..5} root@bd4961841626:/#ls bindevfile1file3file5libmediaoptrootsbinsysusr bootetcfile2file4homelib64mntprocrunsrvtmpvar [root@foundation22~]#dockerpausevm1//暂停容器 vm1 [root@foundation22~]#dockerps-a CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES bd4961841626ubuntu“/bin/bash”2minutesagoUp41seconds(Paused)vm1 [root@foundation22~]#dockerunpausevm1//启动容器 vm1 [root@foundation22~]#dockerps-a CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES bd4961841626ubuntu“/bin/bash”3minutesagoUpAboutaminutevm1 [root@foundation22~]#dockerrun-it–namevm2ubuntu root@aac0080d0606:/#[root@foundation17~]#dockerrun-it–namevm3ubuntu root@13e9f0e36ea0:/#[root@foundation17~]#dockerrun-it–namevm4ubuntu root@2e4adfc6ea87:/#[root@foundation17~]#dockerrun-it–namevm5ubuntu root@cf98619960fc:/#[root@foundation17~]# [root@foundation22~]#dockerps-aq cf98619960fc 2e4adfc6ea87 13e9f0e36ea0 aac0080d0606 bd4961841626 [root@foundation22~]#dockerstopdockerps-aq cf98619960fc 2e4adfc6ea87 13e9f0e36ea0 aac0080d0606 bd4961841626
容器内的数据提交:(dockercommitvm3ubuntu//提交vm3容器里面的数据到ubuntu镜像放到仓库)
[root@foundation22~]#dockercommitvm3ubuntu sha256:ca9b1aa4a9aee738f632999bfad3baf5bda20b5a8b51de82b8f288a922cb4a66 [root@foundation22~]#dockerstopvm3 vm3 [root@foundation22~]#dockerrmvm3 vm3 [root@foundation22~]#dockerrun-it–namevm4ubuntu root@6cb52f07dcde:/#ls bindevfile1file3file5libmediaoptrootsbinsysusr bootetcfile2file4homelib64mntprocrunsrvtmpvar
提交的内容是在镜像里面的内容上加一层(只读):
[root@foundation22~]#dockerrun-it–namevm1ubuntu root@59026e7f5104:/#ls bindevfile1file3file5libmediaoptrootsbinsysusr bootetcfile2file4homelib64mntprocrunsrvtmpvar root@59026e7f5104:/#rm-frfile* root@59026e7f5104:/#ls bindevhomelib64mntprocrunsrvtmpvar bootetclibmediaoptrootsbinsysusr root@59026e7f5104:/#exit exit [root@foundation22~]#dockercommitvm1ubuntu sha256:734d5eba88071735584a1c22519d9000d133b531df3dd7b56e6bbd0dca2abdd3 [root@foundation22~]#dockerrun-it–namevm8ubuntu root@e05171f7c0c7:/#ls bindevhomelib64mntprocrunsrvtmpvar bootetclibmediaoptrootsbinsysusr [root@foundation22~]#dockerhistoryubuntu//查看镜像的层(最多不能超过127层) IMAGECREATEDCREATEDBYSIZECOMMENT 734d5eba880729minutesago/bin/bash52B ca9b1aa4a9ae51minutesago/bin/bash28B 07c86167cdc414monthsago/bin/sh-c#(nop)CMD[“/bin/bash”]0B 220d2912ab1d14monthsago/bin/sh-csed-i‘s/^#\s*(deb.*universe)$/1.895kB cc77a2e3d72c14monthsago/bin/sh-cecho‘#!/bin/sh'>/usr/sbin/polic194.5kB c8fa7cdceff314monthsago/bin/sh-c#(nop)ADDfile:b9504126dc55908988187.7MB
////vm1里面新建文件后,提交,vm1里面的文件提交到ubuntu之后,ubuntu里面就有记录,再用镜像ubuntu建立容器,容器内部包含有vm1里面的文件。如果删除vm1里面新建的文件,再次提交,ubuntu里面的内容就会被覆盖掉。再次用ubuntu建立容器,新建立的容器不就没有最早vm1里面建立的文件。
复制文件到容器里面需要制定路径(即容器源)
[root@foundation22~]#dockercp/etc/passwdvm1 mustspecifyatleastonecontainersource [root@foundation22~]#dockercp/etc/passwdvm1:/ [root@foundation22~]#dockerexport-ovm2.tarvm1//导出到当前目录,并命名为vm2.tar [root@foundation22~]#dockersave-oubuntu.tarubuntu:v1//将ubuntu:v1镜像制成ubuntu:v1文件 [root@foundation22~]#dockerrun-d–nameweb-p8000:80nginx 3cca467e17717b7dd09dd997d7df4e2239e8505be8f0fc79ec11804c5365103d [root@foundation22~]#dockerps CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES 3cca467e1771nginx“nginx-g‘daemonoff”15secondsagoUp11seconds443/tcp,0.0.0.0:8000->80/tcpweb [root@foundation22~]#netstat-antlp|grep:8000 tcp600:::8000:::*LISTEN16093/docker-proxy [root@foundation22~]#dockerdiffvm1 C/root C/root/.bash_history A/passwd D/file2 D/file5 D/file1 D/file3 D/file4
D:表示删除
A:表示增加add
以上所述是小编给大家介绍的Docker的理解和基本命令详解,希望对大家有所帮助!