1.Docker和虚拟机比较
特性 | 虚拟机 | 容器 |
---|---|---|
隔离级别 | 操作系统级 | 进程级 |
隔离策略 | 运行于Hypervisor上 | 直接运行在宿主机内核中 |
系统资源 | 5-15% | 0-5% |
启动速度 | 慢,分钟级 | 快,秒级 |
占用磁盘空间 | 非常大,GB-TB级 | 小,KB-MB甚至KB级 |
并发性 | 一台宿主机十几个,最多几十个 | 上百个,甚至上百上千个 |
高可用策略 | 备份、容灾、迁移 | 弹性、负载、动态 |
2.Docker组件
-
Docker是cs架构的(客户端和服务端)
-
服务端:server或者守护进程
-
客户端:client
-
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VVithYBB-1608533606215)(https://tcs.teambition.net/storage/3120b0ddbf1d87065498909197baf8fb251f?Signature=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJBcHBJRCI6IjU5Mzc3MGZmODM5NjMyMDAyZTAzNThmMSIsIl9hcHBJZCI6IjU5Mzc3MGZmODM5NjMyMDAyZTAzNThmMSIsIl9vcmdhbml6YXRpb25JZCI6IiIsImV4cCI6MTYwOTEzNzE4OCwiaWF0IjoxNjA4NTMyMzg4LCJyZXNvdXJjZSI6Ii9zdG9yYWdlLzMxMjBiMGRkYmYxZDg3MDY1NDk4OTA5MTk3YmFmOGZiMjUxZiJ9.DRVNRwEl-9B68CS6AuQZV8RZEalootlbjn1CHprNvAo&download=image.png “”)]
-
客户端和服务端可以部署在同一节点
-
容器是镜像创立而来
-
每个容器都有独立的ip
-
容器和宿主机可以共享目录
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YKMqajQf-1608533606218)(https://tcs.teambition.net/storage/31205876d9ebc28571cd4d5bb9cdb75d3820?Signature=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJBcHBJRCI6IjU5Mzc3MGZmODM5NjMyMDAyZTAzNThmMSIsIl9hcHBJZCI6IjU5Mzc3MGZmODM5NjMyMDAyZTAzNThmMSIsIl9vcmdhbml6YXRpb25JZCI6IiIsImV4cCI6MTYwOTEzNzE4OCwiaWF0IjoxNjA4NTMyMzg4LCJyZXNvdXJjZSI6Ii9zdG9yYWdlLzMxMjA1ODc2ZDllYmMyODU3MWNkNGQ1YmI5Y2RiNzVkMzgyMCJ9._IDhHfflgnz60AfrNXflWc_6lkAuPnnhXSpfD3fAgb8&download=image.png “”)]
-
Server是一个常驻进程
-
REST API 实现了client和server间的交互协议
-
CLI 实现容器和镜像的管理,为用户提供统一的操作界面
2.1 镜像
-
镜像是一个只读的模版组成的,是由多层的文件系统构成的联合文件系统,每层之间有依赖关系
-
镜像是创建容器的前提,先有镜像再有容器,镜像可以直接从镜像仓库(注册中心)下载而来,也可以自定义创建而来,每个镜像的最底层是基础镜像,因此自定义镜像可以从最底层的镜像创建而来也可以从继承自基础镜像的子镜像创建其他镜像
2.2 Docker容器
-
容器就是用来部署应用程序的地方,可以将应用程序及应用程序运行所需要的基础环境部署到容器中,然后将容器迁移到其他的服务器上运行,从而解决了软件的跨环境迁移问题
-
容器是基于镜像创建而来的运行实例,意味着容器可以启动、停止、运行、删除等等操作
-
容器是在原来的镜像层的基础上增加了一层可读可写层,也是由镜像层继承而来,因此在该层上可以安装软件及软件运行所需的基础环境
-
Image跟Container的职责区别:Image负责APP的存储和分发,Container负责运行APP。
2.3 注册中心
-
下载镜像所在的地方就是注册中心,
-
注册中心可以搭建仓库
-
仓库分为私有仓库和公共仓库
-
私有仓库
- 可以设置特定的用户下载或者特定的网络下载
-
公共仓库
-
所有人都能下载,可以将本地的镜像push到仓库中
-
在另外的机器pull下载镜像文件,用来创建容器,运行容器
-
-
3. Docker操作步骤
-
1:查找镜像
-
2:拉取镜像
-
3:创建容器
-
4:运行容器
-
5:停止/删除容器
3.1 镜像相关命令
3.1.1 搜索相关命令
-
搜索方式:
-
1:hub.docker.com
docker search images
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aAifoqz5-1608533606220)(https://tcs.teambition.net/storage/3120913cd6ef689df4a227302a0c58f450ff?Signature=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJBcHBJRCI6IjU5Mzc3MGZmODM5NjMyMDAyZTAzNThmMSIsIl9hcHBJZCI6IjU5Mzc3MGZmODM5NjMyMDAyZTAzNThmMSIsIl9vcmdhbml6YXRpb25JZCI6IiIsImV4cCI6MTYwOTEzNzE4OCwiaWF0IjoxNjA4NTMyMzg4LCJyZXNvdXJjZSI6Ii9zdG9yYWdlLzMxMjA5MTNjZDZlZjY4OWRmNGEyMjczMDJhMGM1OGY0NTBmZiJ9.VViMu-d2u_iyhyMQsSC48-cuBA4_BBotf3ymMH9T57g&download=image.png “”)]
3.1.2 拉取镜像
docker pull images
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gDqDT2ew-1608533606222)(https://tcs.teambition.net/storage/312086f41b21169160bd2f30d2b322cba6c7?Signature=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJBcHBJRCI6IjU5Mzc3MGZmODM5NjMyMDAyZTAzNThmMSIsIl9hcHBJZCI6IjU5Mzc3MGZmODM5NjMyMDAyZTAzNThmMSIsIl9vcmdhbml6YXRpb25JZCI6IiIsImV4cCI6MTYwOTEzNzE4OCwiaWF0IjoxNjA4NTMyMzg4LCJyZXNvdXJjZSI6Ii9zdG9yYWdlLzMxMjA4NmY0MWIyMTE2OTE2MGJkMmYzMGQyYjMyMmNiYTZjNyJ9.-evThwz2ahWkaXF0DAm3lM2HNsASyXeZMskLe312aM0&download=image.png “”)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jzcq5oMC-1608533606223)(https://tcs.teambition.net/storage/3120136f716fb4bb3e71cf8654b68a59c091?Signature=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJBcHBJRCI6IjU5Mzc3MGZmODM5NjMyMDAyZTAzNThmMSIsIl9hcHBJZCI6IjU5Mzc3MGZmODM5NjMyMDAyZTAzNThmMSIsIl9vcmdhbml6YXRpb25JZCI6IiIsImV4cCI6MTYwOTEzNzE4OCwiaWF0IjoxNjA4NTMyMzg4LCJyZXNvdXJjZSI6Ii9zdG9yYWdlLzMxMjAxMzZmNzE2ZmI0YmIzZTcxY2Y4NjU0YjY4YTU5YzA5MSJ9.HkGVrX5oS-fNgRKyJo8heGu_ezDOmBvZY46L49-47VQ&download=image.png “”)]
3.1.3 查看镜像
docker images
#可选参数:
-a :列出本地所有的镜像(含中间映像层)
-q :只显示镜像ID。
--digests :显示镜像的摘要信息
--no-trunc :显示完整的镜像信息
3.1.4 删除镜像
#删除单个镜像:
docker rmi -f 镜像id或者镜像名称:tag
#删除多个镜像:
docker rmi -f 镜像id或者镜像名称:tag 镜像id或者镜像名称:tag
#删除所有镜像:
docker rmi -f $(docker images -q)
3.2 容器相关的命令
- 镜像是创建容器的前提,现有镜像后有容器,因此操作容器的话,先下载镜像
3.2.1 查看容器
#查看运行中的容器:
docker ps
#查看所有的容器:
docker ps -a
#查看最后一次运行的容器:
docker ps -l
#查看停止的容器:
docker ps -f status=exited
3.2.2 创建和启动容器
-
容器的创建有两种:
-
1:交互式容器
- 创建容器后,立刻进入到容器的命令行,一旦退出命令行,容器自动停止
-
2:守护式容器
- 后端容器,一直运行
-
#创建容器的命令:
docker run
#可选参数:
--name:指定容器的名称,名称一定是唯一的
-d:创建守护式容器
-i:创建交互式容器,一般与-t一起使用,用-it表示,表示创建交互式容器的同时,进入到容器的命令行
-t:表示容器启动后会进入其命令行,为容器重新分配一个伪输入终端,通常与 -i 同时使用;
-p:配置端口映射规则
#有以下四种格式
ip:hostPort:containerPort
ip::containerPort
hostPort:containerPort
containerPort
-
端口映射
- 前者表示宿主机端口,后者是容器内的映射端口,可以使用多个-p做多个端口映射
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9B5HOpjx-1608533606224)(https://tcs.teambition.net/storage/312036e81e0e6514f0ba91cbb14ba7208d4c?Signature=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJBcHBJRCI6IjU5Mzc3MGZmODM5NjMyMDAyZTAzNThmMSIsIl9hcHBJZCI6IjU5Mzc3MGZmODM5NjMyMDAyZTAzNThmMSIsIl9vcmdhbml6YXRpb25JZCI6IiIsImV4cCI6MTYwOTEzNzE4OCwiaWF0IjoxNjA4NTMyMzg4LCJyZXNvdXJjZSI6Ii9zdG9yYWdlLzMxMjAzNmU4MWUwZTY1MTRmMGJhOTFjYmIxNGJhNzIwOGQ0YyJ9.Kjtk-489Hv6q8d1cI54UuVNG3qqkRMWYUp-_BxYTWYs&download=image.png “”)]
#启动交互式容器:
docker run -it --name=centos centos:latest /bin/bash
#创建容器的同时进入到容器的命令行中,一旦退出容器,则容器停止
#/bin/bash 默认进行加上,有的镜像中不加这个参数创建容器会报错
#容器名称必须是唯一的,不能重复
#交互式容器停止以后,是可以继续启动的,这时候再次启动则变成了守护式容器
3.2.3 容器的停止和启动
#启动容器:
docker start 容器id或者容器名称
#重启容器:
docker restart 容器id或者容器名称
#停止容器:
docker stop 容器id或者容器名称
#容器不使用的时候可以停止掉
#容器强制停止:
docker kill 容器id或者容器名称
3.2.4 文件拷贝
#将宿主机的文件拷贝到容器中
docker cp #需要拷贝的文件或者目录 容器的名称:容器的目录
docker cp /tmp/test.log centos3:/tmp
#可以将安装包从宿主机拷贝到容器中进行软件的安装操作
#将容器中的文件拷贝宿主机中
docker cp 容器的名称:容器的目录 宿主机的目录
docker cp centos3:/tmp/test.log /export/
#可以将容器中的数据文件拷贝到宿主机中,如果删除容器则容器中的数据同步删除,因此可以使用该功能备份数据
3.2.5 挂载目录
-
挂载目录必须要创建容器的时候挂载,实现了宿主机的目录中文件与容器目录文件的共享,使用该功能可以实现容器与宿主机数据的共享
-
如:创建一个redis或者mysql的容器,然后写入数据,当容器被删除的时候,写入到mysql的数据会被删除掉,因此可以使用目录挂载功能,将宿主机的目录映射到容器的数据目录,因此删除容器的时候,数据文件不会被删除
Docker run -di -v 宿主机的目录:容器的目录 --name=mycentos4 300e315adb2f /bin/bash
docker run -di -v /usr/local/myhtml:/usr/local/myhtml --name=mycentos4 300e315adb2f /bin/bash
3.2.6 查看容器的ip地址
#可以使用该命令查看ip地址: docker inspect 容器名称或者容器id
docker inspect mycentos4
docker inspect --format=’{{.NetworkSettings.IPAddress}}’ mycentos4
3.2.7 删除容器
#容器不再使用可以直接删除掉
docker rm 容器id或者容器名称
#注意:删除容器的时候需要先停止在删除
docker stop 容器id或者容器名称
docker rm 容器id或者容器名称
在删除
docker stop 容器id或者容器名称
docker rm 容器id或者容器名称