docker镜像搜索

  docker可以输入下面两条命令查看本地的镜像,不过现在第二条命令在逐渐替代第一条:

docker images
docker image ls

  就是版本在18以后就可以用第二条命令来查看本地有哪些镜像了,输出结果都是一样的。
  现在看看怎么搜索镜像:

docker search tomcat

  上述操作就是搜索了Tomcat,这个搜索结果和在官网搜索结果是一样的
ajDc.png
  用过GitHub的同学都知道我们用命令行搜索出来的STARS意思是收藏的数量。就是那个小☆☆☆,后面的OFFICIAL意思是是否是官网撰写的。AUTOMATED意思是是否是自动化的脚本。还有搜索出来的docker镜像有的NAME那里是直接的一个名字,有的是一个路径跟镜像命令,一般直接是名字的都是官方的,叫做顶级仓库,而那些有路径的基本都是个人写的。

docker镜像安装

  现在以安装Tomcat为例:

docker pull tomcat

  直接这样装就是装的官方镜像最新版本,如果 tomcat后面跟一个TAG可以写版本号,指定版本下载,什么都不指定就下载的latest版,也就是最新版本。安装完之后输入下面的命令看看有没有安装上,如果速度太慢,请看本站的docker安装文末写了如何配置加速

docker image ls

  如图所示我刚才装的Tomcat已经有了:
aool.png
  现在说一下这几个的意思:REPOSITORY镜像名称,TAG版本号(latest为最新),IMAGE ID镜像在本地的唯一ID编号,可以用来做很多操作,CREATED发布时间,本例为22小时前,SIZE大小。
  现在有一个难点就是平时的Tomcat最多几十兆,而镜像却要600多MB,原因是Docker 利用Linux核心中的资源分离机制,例如cgroups,以及Linux核心名字空间(namespaces),来创建独立的容器(containers)。这可以在单一Linux实体下运作,避免引导一个虚拟机造成的额外负担。Linux核心对名字空间的支持完全隔离了工作环境中应用程序的视野,包括行程树、网络、用户ID与挂载文件系统,而核心的cgroup提供资源隔离,包括CPU、存储器、block I/O与网络。从0.9版本起,Dockers在使用抽象虚拟是经由libvirt的LXC与systemd - nspawn提供界面的基础上,开始包括libcontainer库做为以自己的方式开始直接使用由Linux核心提供的虚拟化的设施。
arVH.png
  最后一句话,软件Docker被用来管理LXC的环境。也就是说原来Linux是有容器技术的,现在用docker来管理更好的使用这项技术,其实谷歌大哥在这之前就有自己的容器技术叫做borg,已经用了很多年了,到最后docker现在开源了。
a6IY.png
  还有一个概念就是Namespace名字空间,相当于是域把那些镜像隔离开来,还有cgroup就是Linux的进程限制,限制资源,说白了namespace是用来做资源隔离的,cgroup是用来做资源限制的,在docker之内还有一个AUFS,现在看看这个镜像600多mb的原因就是有一个精简版的Linux用来做Namespace和cgroup还有LXC的支持,之后还有Tomcat的依赖环境,还有Tomcat的本体,所以加起来能有600多算差不多了。
11.png
  在这个600MB镜像的最底层就是有bootfs用来引导容器的运行,还有一个rootfs可以理解为工作目录。有这两个才能在这上面说依赖,说应用等等。之后上面那些蓝色的部分就是镜像的部分,Debian就是一个Linux的基础镜像,而中间两层比如图中的Apache或者什么JDK都是依赖环境,最上面浅蓝的地方就是可读写层,正儿八经的软件部分。下面就是只读层。
  如果你的依赖环境有重复的,就会启用联合挂载机制也就是前面说到的AUFS,可以去了解一下前面的超链接。

docker镜像操作

  删除镜像:

docker rmi -f 镜像ID或镜像名:TAG
例:
docker rmi -f tomcat

  如果你是最新版的镜像删除的时候就不需要加TAG版本号,如果你不是最新版的就必须跟上版本号
  获取元信息:

docker inspect 镜像ID或镜像名:TAG
例:
docker inspect tomcat

  元信息有很多内容自行百度

docker容器操作

  现在看看怎么把镜像跑起来:

docker run --name tom -d -p 8080:8080 tomcat

  这里的docker run就是固定的,--name后面的tom就是定一个名字,这个名字可以自定义,然后-d就是因为Tomcat在运行时前台会打印日志出来,而在Linux中我们打印出来了就没法做别的操作了,加个-d可以后台隐藏,这里的-p就是将docker里面的端口和宿主机的端口映射一下,第一个8080是指宿主机的端口,第二个8080就是docker里面的端口,之后的tomcat就是docker镜像,这个必须要写TAG版本号,当然除非是最新版,已经强调很多遍了。运行之后会报一堆的ID,这个就跟刚才的镜像ID是一个道理,但是不是一样的哟。输入下面的命令可以看到docker现在运行的哪些进程:

docker container ps

  可以看我的图:
a48z.png
  第一个就是启动的ID,第二个就是镜像名称,第三个就是容器运行的那条命令是什么,第四个是已建立的时间,第五个是启动的时间,PORTS就是端口,最后的NAME就是刚才取名的tom
  现在看看有没有启动成功,我们就需要查看日志了:

docker logs tom

  现在说的就是容器方面的事了,所以我们查看日志的时候要么就写容器的ID,就是刚才启动之后的那个ID,要么就写刚才取得那个tom的名字,因为日志是整合在一起的所以用上面那条命令查看即可。
a5Mt.png
  补充一点,如果自己起的名字重复了可以使用下面的命令查看:

docker ps -l    #查看得到ID
docker rm ID    #删除容器

  这里的这些日志就是我们的web服务器的日志很熟悉啊。现在看看如何进入容器,进入这个小的Linux系统里面去操作:

docker container exec -it nextcloud /bin/bash

  我是装了一个经典应用nextcloud,然后进入你会发现原来的系统提示符都变了:
aKzC.png
  我们说这个容器是一个小的操作系统,我们现在进去看看,后面的/bin/bash是默认的,经典版本的是/bin/sh,然后-it,里面的i就是以交互模式运行容器,t就是分配一个伪终端,即命令行。进入这个容器里面之后就可以为所欲为了,不过这里面很小,是一个小小的Linux所以有些命令根本就没有,比如有ls但是没有ll,没有vi和vim等等,毕竟这个容器只有600多MB,不然的话所有功能都有那就很大了。退出的方法直接是exit。

exit #退出容器内部操作

  结束,其实原理没什么复杂的,就一个LXC的意思和namespace是用来做资源隔离的,cgroup是用来做资源限制的别的命令什么的就加起来不到10条,可以试试装装别的好玩的应用,比如文章中提到的nextcloud,还有像可道云那些的都可以哦

最后修改:2020 年 06 月 12 日 02 : 08 PM
请俺喝杯咖啡呗