欢迎来到LYBLaoInB的博客
LYBLaoInB
LYBLaoInB
回首往事,不因虚度年华而悔恨,不因碌碌无为而愧疚

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点多了,就先不总结了,先睡了。有空继续)

 

posted @ 2020-11-13 02:17  LiuYongbo  阅读(266)  评论(0编辑  收藏  举报
<--将网易云歌单中的id复制到上面的data-id中就可以了 http://music.163.com/playlist?id=3103841025&userid=1698529278 -->