1. 解决上线流程繁琐问题
开发-->测试--> 申请资源-->审批-->部署-->测试等环节(传统部署环节)
2. 资源利用率低
普遍服务器利用率低,造成过多浪费
3.扩容/缩容不及时
业务高峰期扩容流程繁琐,上线不及时
4.服务器环境臃肿
服务器环境越来越臃肿,对维护、迁移带来困难
5.环境不一致
1.使用最广泛的开源容器引擎
2.一种操作系统级的虚拟化技术
3.依赖Linux内核特性Namespace(资源隔离)和Cgroups(资源限制)
4.一个简单的应用程序打包工具
拓展:
Docker本质 用namespace 和 cgroups隔离的“沙盒”
容器是一种沙盒技术,通过约束和修改进程的动态表现,从而为其创造出一个“边界”,
Namespace 技术则是用来修改进程视图的主要方法。帮助容器实现各种计算资源的隔离。
Cgroups 技术是用来制造约束的主要手段。对容器使用某种资源量的多少做一个限制。
Cgroups有V1和V2版本
Cgroups v2的五点改进:
- Cgroups v2 中所有的controller都会被挂载到一个unified hierarchy下,不在存在像v1中允许不同的controller挂载到不同的hierarchy的情况
- Proess只能绑定到cgroup的根(“/“)目录和cgroup目录树中的叶子节点
- 通过cgroup.controllers和cgroup.subtree_control指定哪些controller可以被使用
- v1版本中的task文件和cpuset controller中的cgroup.clone_children文件被移除
- 当cgroup为空时的通知机制得到改进,通过cgroup.events文件通知
Docker从1.13.x版本开始,版本分为企业版EE和社区版CE,版本号也改为按照时间线来发布
较旧的Docker版本称为docker或docker-engine或docker.io(docker.io是由ubuntu统一管理)
docker-ce是由docker团队管理,后面分为社区版(docker-ce)和企业版(docker-ee),Docker CS(商业支持)是版本低于1.13的旧版Docker EE版本。
# 安装前建议关闭selinux和firewalld
# 安装依赖包
yum install -y yum-utils
# 添加Docker软件包源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 安装Docker CE
yum install -y docker-ce
# 启动Docker服务并设置开机启动
systemctl enable docker --now
官方文档:
https://docs.docker.com
https://docs.docker.com/engine/install
https://docs.docker.com/engine/install/centos/
阿里云源:
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
Docker常用命令
指令 | 描述 |
docker ls | 列出镜像 |
docker version | 显示当前docker版本 |
docker info | 显示docker 信息
|
docker build | 构建镜像来自Dockerfile |
docker history | 查看镜像历史 |
docker inspect | 显示一个或多个镜像详细信息 |
docker rmi | 移除一个或多个镜像 |
docker rm | 移除一个或多个容器 |
docker prune | 移除没有被标记或者没有被任何容器引用的镜像 |
docker tag | 创建一个引用源镜像标记目标镜像 |
docker save | 保存一个或多个镜像到一个tar归档文件 |
docker load | 加载镜像来自tar归档或标准输入 |
docker exec | 在运行容器中执行命令 |
docker commit | 创建一个新镜像来自一个容器 |
docker cp | 拷贝文件/文件夹到一个容器 |
docker logs | 获取一个容器日志 |
docker port | 列出或指定容器端口映射 |
docker top
| 显示一个容器运行的进程
|
docker stats | 显示容器资源使用统计 |
docker stop/start/restart | 停止/启动一个或多个容器 |
指令 | 描述 |
docker ps | 查看当运行的docker |
docker ps -a | 查看所有的docker |
docker images | 查看docker镜像 |
docker search mysql | 搜索镜像(从官方仓库找) |
docker pull mysql | 下载(默认从docker-hub拉取 速度比较慢) 一般配置阿里云加速(https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors) |
docker pull hub.c.163.com/library/mysql:latest | 指定pull的地址下载 |
docker push | 推送一个镜像到镜像仓库 |
docker history docker.io/mysql | docker 层次结构 |
Docker创建容器常用选项
选项 | 描述 |
-i | -interactive 交互式 |
-t | -tty 分配一个伪终端 |
-d | -detach 运行容器到后台 |
-e | -env 设置环境变量 |
-p | -publish list 发布容器端口到主机 |
-P | -publish-all布容器所有EXPOSE的端口到宿主机随机端口 |
--name string | 指定容器名称 |
-h | -hostname 设置容器主机名 |
--ip string | 指定容器IP,只能用于自定义网络 |
--network | 连接容器到一个网络 |
-v | -volume list |
--mount | mount(新方式)将文件系统附加到容器 |
--restart string | 容器退出时重启策略,默认no,可选值:[always|on-failure] |
Docker创建容器常用选项--资源限制
选项 | 描述 |
-m | -memory 容器可以使用的最大内存量 |
-memory-swap | 允许交换到磁盘的内存量 |
-memory-swappiness=<0-100> | 容器使用SWAP分区交换的百分比(0-100,默认为-1) |
-oom-kill-disable | 禁用OOM Killer |
--cpus | 可以使用的CPU数量 |
-cpuset-cpus | 限制容器使用特定的CPU核心,如(0-3, 0,1) |
-cpu-shares | CPU共享(相对权重) |