Docker
为什么使用容器
- 上线流程繁琐
开发->测试->申请资源->审批->部署->测试等环节
- 资源利用率低
普遍服务器利用率低,造成过多浪费
- 扩容/缩容不及时
业务高峰期扩容流程繁琐,上线不及时
- 服务器环境臃肿
服务器越来越臃肿,对维护、迁移带来困难
- 环境不一致性
Docker是什么
- 使用最广泛的开源容器引擎
- 一种操作系统级别的虚拟化技术
- 依赖于Linux内核特性,Namespace(资源隔离)和Cgroups(资源限制)
- 一个简单的应用程序打包工具
Docker应用场景
- 应用程序打包和发布
- 应用程序隔离
- 持续集成
- 部署微服务
- 快速搭建测试环境
- 提供PaaS产品(平台即服务)
Docker基本组成
- Docker Client(客户端)
- Docker Daemon(守护进程)
- Docker Image(镜像)
- Docker Container(容器)
- Docker Registry(仓库)
Docker镜像管理
镜像是什么
- 一个分层存储的文件,不是一个单一的文件
- 一个软件环境
- 一个镜像可以创建N个容器
- 一种标准化的交付
- 一个不包含linux内核而又精简的linux操作系统
配置加速器
- 新建daemon文件
vim /etc/docker/daemon.json
- 编辑文件并输入一下内容
{
"registry-mirrors": ["https://h8r0sjxo.mirror.aliyuncs.com"]
}
- 保存退出并重启docker服务
镜像常用管理命令
命令格式 docker image 【Command】
| 指令 | 描述 |
|---|---|
| ls | 列出镜像 |
| build | 构建镜像来自Dockerfile |
| history | 查看镜像历史 |
| inspect | 显示一个或多个镜像详细信息 |
| pull | 从镜像仓库拉取镜像 |
| push | 推送一个镜像到镜像仓库 |
| rm | 移除一个或多个镜像 |
| prune | 移除没有被标记或者没有任何容器引用的镜像 |
| tag | 创建一个引用源镜像标记目标镜像 |
| save | 保存一个或多个镜像到一个tar归档文件 |
| load | 加载镜像来自tar归档或标准输入 |
Docker容器管理
创建容器常用选项
命令格式:docker run 【OPTIONS】 image 【Command】 【ARG】
| 选项(OPTIONS) | 描述 |
|---|---|
| -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) | 将文件系统附加到容器 |
| –restart string | 容器退出时的重启策略,默认no,可选值(always |
| -m(-memory) | 容器可以使用的最大内容 |
| -memory-swap | 允许交换到磁盘的内存量 |
| -memory-swappiness=<0-100> | 容器使用SWAP分区交换的百分比,默认为1 |
| -oom-kill-disable | 禁用OOM Killer |
| –cpus | 可以使用CPU数量 |
| -cpuset-cpus | 限制容器使用特定的CPU核心,如(0-3,0,1) |
| -cpu-shares | CPU共享 |
常用管理命令
命令格式:docker container Command
| 选项 | 描述 |
|---|---|
| ls | 列出容器 |
| inspect | 查看一个或多个容器详细信息 |
| exec | 在运行容器中执行命令 |
| commit | 创建一个新镜像来自一个容器 |
| cp | 拷贝文件/文件夹到一个容器 |
| logs | 获取一个容器日志 |
| port | 列出或指定容器端口映射 |
| top | 显示一个容器运行的进程 |
| stats | 显示容器资源使用统计 |
| stop/start/restart | 停止/启动/重启一个或多个容器 |
| rm | 删除一个或多个容器 |
| prune | 移除已停止的容器 |
容器数据持久化
Docker提供两种方式将数据从书主机挂载到容器中:
1. volumes:Docker管理宿主机文件系统的一部分(/var/lib/docker/volumes)。保存数据的最佳方式
2. bind mounts:将宿主机上的任意位置的文件或者目录挂载到容器中
volumes示例
# 创建数据卷
docker volumes create nginx-vol
docker volumes ls
docker volumes inspect nginx-val
# 使用数据卷
docker run -d --name=nginx-test --mount src=nginx-val,dst=/usr/share/nginx/html nginx
or
docker run -d --name=nginx-test -v nginx-val:/usr/share/nginx/html nginx
bind mounts示例
# 挂载宿主机目录到容器
docker run -d --name=nginx-test --mount type=bind,src=/app/wwwroot,dst=/usr/share/nginx/html nginx
or
docker run -d --name=nginx-test -v /app/wwwroot:/usr/share/nginx/html nginx
容器网络
veth pair
成对出现的一种虚拟网络设备,数据从一端进,从另一端出。用于解决网络命名空间之间隔离
docker0
网桥是一个二层网络设备,通过网桥可以将Linux支持的不同的端口连接起来,并实现类似交换机那样的多对多的通信
2351

被折叠的 条评论
为什么被折叠?



