一、为什么使用容器
1. 解决上线流程繁琐问题
开发-->测试--> 申请资源-->审批-->部署-->测试等环节(传统部署环节)
2. 资源利用率低
普遍服务器利用率低,造成过多浪费
3.扩容/缩容不及时
业务高峰期扩容流程繁琐,上线不及时
4.服务器环境臃肿
服务器环境越来越臃肿,对维护、迁移带来困难
5.环境不一致
二、Docker是什么
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命名
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版本。
四、安装Docker
# 安装前建议关闭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常用命令
指令 |
描述 |
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共享(相对权重) |