刚接触Docker时感觉和虚拟机差不多,但是在了解过后才知道它内在的东西与虚拟机大不相同。
虚拟机是虚拟出各种硬件设施,每新建一台虚拟机,就要虚拟出很多硬件设施,尤其是当同时开启多台虚拟机时特别耗费系统资源。而Docker就不同,它是基于真机的内核,利用真机的硬件来建立各式各样的容器,这个容器就像用户空间一样,是独立开的,和内核之间的关系也就像用户空间和内核的关系一样,节省了不少系统资源。
我个人认为Docker最重要的命令就是images、pull、ps、run、exec、network、commit、build、save等等。
images&pull&ps
Docker和虚拟机类似,也是需要镜像来生成虚拟系统的。
images可以查看当前所拥有的镜像。
pull是可以从库里拉出一个镜像来下载使用。
ps是查看当前所有的容器。
run&exec
run
run命令就是生成一个新的容器,其下还有很多参数。
- - name
用来设置容器的名字
- - p
用来设置端口,格式为 主机端口:容器端口。
- - network
当设置了network之后,就可以指定到某个network里,在那个网段下面。(network配置在下面)
- - ip
设置该容器的ip地址。
- d
设置容器在后台运行。如果没有-d的话,刚生成容器时,在当前终端就会直接进入容器里。
exec
exec就是用来执行容器,一定要在启动容器后才能执行,加上-it参数,表示标准输出到当前终端,接着加上容器名和容器命令就行。
network
network是docker里很重要的东西,各个容器之间能否通信、和外部能否通信,全看network的设置。
create
字面意思,生成一个新的网络。其中也有部分参数。
-d
网络模式,一般设置为桥接(bridge),也有host和null。
- - subnet
指定网段。
- - gateway
指定网关。
connect
这个是用来连接的,如果生成容器时没有指定network,那么就可以用该命令来连接,格式为先写network后写容器。
disconnect
和connect用法类似,功能相反。
ls
查看当前所有的network
rm
移除某个network
commit&build&save&load
commit
commit是以当前某个容器为样板,生成一个镜像,参数是-a表示作者信息,-m表示描述信息,接着加上容器名和需要生成的镜像名就可以了。
build
build是使用文件来生成镜像,可以根据自己想要的东西来加入一些东西,相比于commit来说比较方便和快捷。在生成镜像前安装一些镜像,以后再生成容器时就会方便很多。文件名一定要用dockerfile,命令格式为 docker build -t [镜像名] [文件所在路径]。
文件内容如下图所示
save
save就是把镜像打包成一个tar包,在机器之间传输很方便。
具体命令如下
docker save -o [文件名] [镜像名]
load
load和save相反,就是把一个文件加载成镜像。
具体命令如下
docker load -i [文件名]