上线流程繁琐,环节过多。
资源利用率低,服务器利用率低,浪费核资源。
扩容/缩容不及时,业务高峰期扩容流程繁琐。
服务器环境臃肿,维护、迁移困难。
环境不一致。
ps:
1. 服务器的使用率一般要高于实际业务占用率的30%。
2. 服务器需要一个弹性伸缩空间。
Docker是当前使用最广泛的开源容器引擎,是一种操作系统级的虚拟化技术,依赖于Linux内核的特性,资源隔离(Nmaespace)和资源限制(Cgroups)。
是一个简单的应用程序打包工具。
可以使多个环境保持一致性。
使开发人员和运维人员各司其职。
ps:
1. 开发人员,开发项目、打包项目环境、代码成镜像、部署到容器平台。
2. 运维人员,高效管理容器群。
虚拟机里面运行的应用程序,每一个都依赖于一个单独建立的子操作系统,具有良好的操作化界面,提供一个完全隔离的环境,提升服务器资源利用率。
容器并不单独建立子操作系统,无操作化界面,仅提供一个基本的独立环境,实现容器隔离、资源限制。主要解决应用层面问题,应用快速部署、高效管理
分类 | 容器 | 虚拟机 |
---|---|---|
启动速度 | 秒级 | 分钟级 |
运行性能 | 接近原生 | 5%左右损失 |
磁盘占用 | MB | GB |
数量 | 成百上千 | 一般几十台 |
隔离性 | 进程级 | 系统级(更彻底) |
操作系统 | 主要支持Linux | 几乎所有类型的操作系统 |
封装程度 | 只打包 项目代码和依赖关系,共享 | 完整的操作系统 |
安装依赖包: yum install -y yum-utils
安装DockerCE: yum install -y docker-ce
启动Docker服务: systemctl start docker
重启Docker服务: systemctl restart docker
查看安装的Docker信息: docker info
开机自动启动Docker: systemctl enable docker
镜像是一个分层存储的文件,是一个软件的环境;一个镜像可以创建N个容器;是一种标准化的交付物;是一个不包含Linux内核而又精简的操作系统。
样例: docker run -d -p 8080:80 nginx
:1.17
docker ps
查看下载并运行的容器。docker ps -l
命令可以查看最新的运行的容器。docker images
查看下载的镜像。docker logs 71f4031aea56
查看日志信息(71f4031aea56为ps里面的容器ID)Docker官方自带的仓库http://hub.docker.com
镜像是一个只读模板容器,容器是通过下载镜像创建运行的实例
拉取镜像: docker pull nginx
查看本地镜像仓库: docker images
以testNginx为容器名调用本地Nginx镜像运行容器: docker run -d --name testNginx nginx
查看运行的实例列表: docker ps
查看某一实例的详细信息: docker ps
docker inspect 71f4031aea56
管理镜像常用命令: docker image --help
管理容器常用命令: docker container --help
镜像打包命令: docker build -t name:tag .
.代表当前目录,该字段是DockerFile的路径
指令 | 描述 | 样例 |
---|---|---|
ls | 列出镜像 | docker image ls |
build | 构建来自DockerFile或者远程的镜像 | docker build github.com/creack/docker-firefox |
history | 查看历史镜像 | docker history nginx |
inspect | 显示一个或者多个镜像详细信息 | docker inspect nginx |
pull | 从镜像仓库拉取镜像 | docker pull nginx:1.17 |
push | 推送一个镜像到镜像仓库 (先登录镜像仓库) | docker pull nginx:v1 |
rm | 移除一个或多个镜像 -f 强制删除 | docker image rm -f nginx:1.17 |
prune | 移除没有被标记或者没有被任何容器引用的镜像 | docker image prune |
tag | 创建一个引用源镜像标记目的镜像 | docker tag nginx nginx:v1 |
export | 导出容器文件系统tar归档文件创建镜像 | docker container export nginx > nginx.tar |
import | 导入容器文件系统tar归档文件创建镜像 | docker import nginx.tar |
save | 保存一个或者多个镜像到一个tar归档文件 | docker save nginx > nginx.tar |
load | 加载来自tar归档或标准输入的镜像 | docker load < nginx.tar |
镜像能够高效存储的原因是,联合文件系统(Union file system),将镜像多层文件联合挂载到文件系统
联合文件系统给容器层提供一个沙盒的环境,容器层的独立的运行的同时,不会占用更多的磁盘空间,
镜像是只读的,共享给多个容器。如果容器里修改文件,镜像会如何进行修改呢。
写时复制(Copy-on-write)机制会在修改文件操作时,先从镜像里把要写的文件复制到自己的文件系统中进行修改。
第一层: 联合文件系统挂载层,也叫统一视图层,
第二层: 联合文件系统容器层
第三层: 联合文件系统镜像层,其中的init层会挂宿主机hostname(主机名)、hosts(添加hosts)、resolv.config(设置DNS)三个文件。
读取和修改文件时,首先在容器层进行搜索,如果没有就会向镜像层进行搜索,所以读写速度是影响其性能的关键。可以通过使用固态、使用卷作为频繁读写文件的工作目录,绕过存储驱动,减少抽象的开销。
选项 | 描述 | 样例 |
---|---|---|
-i,-interactive | 交互式 | docker run -i centos |
-t,-tty | 分配一个为终端 | docker run -t centos |
-d, -detach | 运行容器到后台 | docker run -d nginx |
-e, -env | 设置环境变量 | docker run -d -e ABC=123 -e CED=456 nginx |
-p, -publish list | 发布容器端口到主机 | docker run -p 8888:80 nginx |
–name | 设置容器名 | docker run --name myNginx nginx |
-h,-hostname | 设置容器主机名 | docker run -h host nginx |
-ip | 指定容器IP,只能用于自定义网络 | `` |
-network | 连接容器到一个网络 | `` |
-mount mount | 将文件系统附加到容器 | `` |
-v,-volume list | 绑定挂载一个卷 | `` |
–restart | 容器退出时重启策略,默认no,可选值有 | docker run --restart=always nginx |
值得一提的是,可以使用docker run -idt centos
同时使用几个常用选项.
进入容器内部 docker container exec -it 容器号 bash
默认创建的容器会使用宿主机所有资源
选项 | 描述 |
---|---|
-m, -memory | 容器可以使用的最大内存量 |
-memory -swap | 容器允许交换到磁盘的内存量 |
-memory-swappiness=<0-100> | 容器使用SWAP分区交换的百分比 |
-oom-kill-dosan;e | 禁用OOM Killer |
–cpus | 容器可以使用的cpu数量 |
-cpuset-cpus | 限制容器使用特定的CPU核心 |
-cpu-shares | cpu共享(相对权重) |
例如:``