Docker技术-容器命令
一、容器和镜像的区别
-
镜像
上篇文章中有提到docker pull 镜像,这个操作其实是在下载一些镜像层组成的只读的文件系统,比如ubuntu会下载三个不fs layer。镜像可以看成是由多个镜像层叠加起来的一个文件系统(通过UnionFS与AUFS文件联合系统实现),镜像层也可以简单理解为一个基本的镜像,而每个镜像层之间通过指针的形式进行叠加。镜像是一堆只读层的统一视角,除了最底层没有指向外,每一层都指向它的父层。统一文件系统( Union File System)技术能够将不同的层整合成一个文件系统,为这些层提供了一个统一的视角,这样就隐藏了多层的存在。在用户的角度看来,只存在一个文件系统。镜像每一层都是不可写的,都是只读层。
-
容器
大概可以理解为一堆的只读镜像组成的只读文件系统(镜像)+一层可读写层。并且,容器的定义中并没有规定是否运行容器与否。也就是说只要container有那就有。 无需运行起来容器也是存在的。下图是容器和镜像之间的关系(未运行的容器)
运行状态的容器「Running Container」是由一个可读写的文件系统「静态容器」+ 隔离的进程空间和其中的进程构成的。下面这张图片展示了一个运行中的容器。
正是文件系统隔离技术使得Docker成为了一个前途无量的技术。一个容器中的进程可能会对文件进行修改、删除、创建,这些改变都将作用于可读写层(read-write layer)。下面这张图展示了这个行为。
二、新建容器并启动
docker run [可选参数] image
#参数说明
-i 已交互模式运行docker,也就是说我们是需要进入docker并且执行某些命令的比如/bin/bash之类的
-t 给我们一个伪终端,所以-it经常一起使用
-p 指定端口映射,常用格式是 -p 宿主机端口:容器端口
启动并进入docker实验
[root@localhost /]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu latest d70eaf7277ea 2 weeks ago 72.9MB centos latest 0d120b6ccaa8 3 months ago 215MB hello-world latest bf756fb1ae65 10 months ago 13.3kB [root@localhost /]# docker run -it centos /bin/bash [root@91543a1f4f9f /]# ls #可以看到,容器里面和外面的文件系统还是有差异的,并且容器这里root@【容器的ID】,发现不是镜像ID之后我在最后用docker ps -a 发现是容器ID bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var [root@91543a1f4f9f /]# exit exit [root@localhost /]# ls bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var [root@localhost /]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 91543a1f4f9f centos "/bin/bash" 2 minutes ago Exited (0) 49 seconds ago naughty_hertz daf48b75976b hello-world "/hello" 5 hours ago Exited (0) 5 hours ago gallant_gates [root@localhost /]#
docker ps命令查容器
docker ps查看正在运行的容器;
docker ps -a#查看所有曾经运行的容器
docker ps -aq 只显示容器id
[root@localhost /]# docker ps -aq 91543a1f4f9f daf48b75976b
删除所有容器,如果有在运行中的容器,删除会报错,这个时候可以 docker rm -f $(docker ps -aq)
[root@localhost /]# docker rm $(docker ps -aq)
91543a1f4f9f
daf48b75976b
[root@localhost /]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@localhost /]#
值得注意的是exit从容器中退出,这样会停止容器,如果用CTRL+P+Q
[root@localhost /]# docker run -it centos /bin/bash [root@7c9a1e77f168 /]# [root@localhost /]# [root@localhost /]# docker ps #不加-a就可以查出来了 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7c9a1e77f168 centos "/bin/bash" 14 seconds ago Up 13 seconds youthful_shirley [root@localhost /]#
第二行第一个#我输入了CTRL+P+Q这三个键,然后的确退出到宿主机,并且查询到status为up运行状态了,前面实验的时候exit就退出状态了
容器的启动,停止,重启,强制停止用docker start,stop,restart,kill +容器ID即可(今天坐了一天车,已经凌晨2点多了,就先不总结了,先睡了。有空继续)