序
Docker自开源以来受到了各大公司的广泛关注,或许现在互联网公司的运维体系不承载在Docker之上都不好意思说自己是互联网公司。
原理
对Docker最简单并且带有一定错误的认知就是“Docker是一种性能非常好的虚拟机”。
正如上面所说,这是有一定错误的说法。Docker相比于传统虚拟机的技术来说先进了不少,具体表现在Docker不是在宿主机上虚拟出一套硬件后再虚拟出一个操作系统,而是让Docker容器里面的进程直接运行在宿主机上(Docker会做文件、网络等的隔离),这样一来Docker会“体积更轻、跑的更快、同宿主机下可创建的个数更多”。
Docker中有三个核心概念:Image、Container、Repository
- Image:Docker中的镜像是分层的,可复用的,而非简单的一堆文件迭在一起(类似于一个压缩包的源码和一个git仓库的区别)。
- Container:容器的存在离不开镜像的支持,他是镜像运行时的一个载体(类似于实例与类的关系)。依托Docker的虚拟化技术,给容器创建了独立的端口、进程、文件等“空间,Containner就是一个与宿机隔离“容器”。容器可宿主机之间可以进行port、volumer、network等的通信。
- Repository:Docker的仓库和git仓库比较相似
安装
Win10
- 计算机BIOS开机虚拟化支持(VT-x/AMD-V)
- 启用Hyper-V
- 安装docker for Windows
https://www.docker.com下载Docker Desktop
Linux
- 获取安装脚本https://get.docker.com
1 | $ curl -fsSL get.docker.com -o get-docker.sh |
需要开启sudo,验证安装
1 | $ sudo docker version |
Image vs container 镜像与容器
image
- docker image是一个只读文件
- 这个文件包含文件系统,源码,库文件,依赖,工具等一些运行application所需要的文件
- docker image具有分层的概念
Container容器
- 一个运行中的docker image
- 实质是复制image最上层加上一层read-write(称之为container layer容器层)
- 基于同一个image可以创建多个container
docker image获取
- 自己制作
- 从registry拉取,比如docker hub
docker命令
1 | docker container ls |
如何批量的停止所有的容器
停止多个容器可以通过命令docker container stop 容器id1 容器id2....
来完成,前提是需要知道容器的ID,如果几十个ID要一个一个写,如何简便操作呢
- 批量获取容器ID,可以通过命令
docker container ps -qa
来完成 - 把上面获取的参数传递给
docker container stop
命令
1 | docker container stop $(docker container ps -qa) |
镜像的获取
- 从registry拉取
- public 公有
- private 私有(内部搭建)
- 从Dockerfile构建
- 文件导入(离线)