首页 > 其他 > 详细

docker学习笔记

时间:2019-06-22 21:44:08      阅读:115      评论:0      收藏:0      [点我收藏+]

总结:

1.镜像 容器关系:镜像好比java中的类,容器好比java中的对象,一个镜像可以有多个容器;镜像是分层的

2.docker image:列出本地的镜像 -q查镜像的id

3.docker search xxx 例如docker search tomcat 在仓库(hub.docker.com)中查找 列出的offical是指的是官方版本,还可以使用 docker search -s 30 tomcat 意思是查找点赞数超过30的tomcat,给搜索出来
4.docker pull xxx:version 如果不写冒号后面的,默认是最新版本
5.docker info可以查看docker的版本,内存空间,以及注册的镜像源(可以看是否阿里云镜像是否配置成功)
6 docker rmi hello-world:version 删除某一个版本的本地镜像
如果容器在运行中,强制删除用 docker rmi -f hello-world
如果删除本地中所有容器:docker rmi -f $(docker images -qa)

docker容器:有镜像才能创建容器,这是根本前提,可以把容器看成简易版的Linux环境(包括root用户权限、进程空间、用户空间和网络空间)和运行在其中的应用程序,容器的定义和镜像几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的

 

docker容器相关的指令:
1.docker run -it id号(或者镜像名字)举例:docker run -it centos就进入了docker中的centos,还可以加一个参数 --name
2.docker ps 列出正在运行的容器 ,这个命令执行后会列出他的容器id,注意这个容器id和镜像命令docker images 列出的 image id不一样
docker ps -l 指的是把上次运行的容器列出来
docker ps -a列出历史和现在所有的容器
3.退出容器 exit 例如当我们以交互加伪终端的方式run centos时,进入的是docker的centos系统,这时候,我们要退出,也就是退出centos这个容器,执行exit 命令即可(在docker运行中的centos中执行exit)
另一个关闭指令(离开并不离去) ctrl +P + Q 方式就是暂时离开容器,但是容器还是在运行状态,这个可以通过 docker ps进行验证
4. docker启动容器:场景,比如刚才exit退出了一个centos容器,但是我们通过docker ps -n 2指令找到那个已经关闭容器的container id ,然后,我们在执行执行docker start container id,就可以把exit那个容器重新启动了,最终的结果也能证明,一个centos镜像,可以跑多个容器
5.容器重启 docker restart container id
6.关闭容器,docker stop container id
7.强制关闭容器: docker kill container id 与关闭容器的区别是,强制关闭容器指令关闭容器会比较快,普通的关闭容器会比较慢一些
8.删除已停止的容器 docker rm 容器 id 。解释:向上述docker stop或者docker kill指令是已经把容器停止了,在docker ps中找不到,但是docker ps -l (或者docker ps -n 数字) 中是可以看到的,也就是说,docker会缓存已经停止掉的容器,docker rm 容器id这条指令就是删除已经停止的容器
这个指令和删除镜像的区别是:删除镜像用的是docker rmi rm后面跟着i
如果想强制删除正在运行的容器,就用-f

9.容器以守护式进程启动 docker run -d id号(镜像 id号)或镜像名字,这个是和上面的交互命令(-it)相对应的另一种方式,-d是在后台运行了,但是运行完docker run -d 镜像名称(或镜像id号之后),在执行 docker ps 发现没有刚刚起的centos的容器,这是为什么呢?
10.接着上述问题,说说docker的机制:其实上述是因为容器已退出了,即容器肯定启动过,但是又退出了,Docker容器后台运行,就必须有一个前台进程,容器运行的命令如果不是那些一直挂起的命令(比如top,tail)就是会自动退出的,如何解决这个问题呢?就是将你要运行的程序以前台进程的形式运行。下面这个指令就可以解决docker上述机制带来的问题
docker run -d centos /bin/sh -c "while true;do echo hello zhangshitong;sleep 2;done"
11.查看容器日志: docker logs -f -t --tail 容器ID
-t是加入时间的意思;-f跟随最新的日志打印;--tail数字,显示最后多少条
12.查看容器内运行的进程: docker top container id
13.查看容器内部细节:docker inspect 容器id docker的镜像是一层套一层的,是json串一层嵌套一层的
14.进入正在运行的容器并以命令行交互:还记得上面的ctrl+Q+P吗?docker容器还在后台运行着呢?如何再次进入呢,这个就是解决上面的问题的 docker attach 容器id,这条指令直接进入docker centos的根目录
还有另外一条指令,也能从ctrl+p+q中再次进入容器:docker exec -t ls -s
/tmp 这个-t 后面跟的是linux的指令
上面两个指令的区别:attach直接进入容器启动命令的终端,不会启动新的进程;exec是在容器中打开新的终端,并且可以启动新的进程。docker exec -t 容器id /bin/bash 就等价于 docker attach 容器id
14.从容器内拷贝文件到主机上:docker cp 容器di:容器内路径 目的主机路径

 

docker镜像学习:镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时库、环境变量和配置文件 UnionFS联合文件系统:是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下,Union文件系统是Docker镜像的基础,镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。 Union文件系统的特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录

docker镜像加载原理:分层文件系统,这就能解释为什么一个tomcat的镜像为什么能有四五百兆之多

 技术分享图片

 

docker为什么采用这种分层的结构呢?:最大的一个好处就是共享资源

比如:有多个镜像都从相同的base镜像构建而来,那么宿主机只需要在磁盘上保存一份base镜像,同时内存中也只需要加载一份base镜像,就可以为所有容器服务了,而且镜像的每一层都可以被共享

 docker镜像的特点:

1.docker镜像都是只读的;2.当容器启动时,一个新的可写层被加载到镜像的顶部,这一层通常被称为“容器层”,容器层之下都叫“镜像层”

docker学习笔记

原文:https://www.cnblogs.com/zhangshitong/p/11070242.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!