Docker | |
Redis运行环境 | 环境: 云服务 centos7 |
Docker是什么 | 1)应用容器引擎 2)可以理解为一个小的虚拟机 ~ VMWare 3)可发布在任何流行的linux上 |
为什么使用docker | 1)启动快 秒级别 因为直接运行在宿主内核 2)性能接近原生 3)一致性的环境 可以跨平台布置 因为使用同一个镜像 4)轻松的维护和扩展 因为使用分层存储以及镜像的技术 5)动态扩容和缩容,在意外的情况下,流量突然变大,利用docker可以快速增加机器 6)磁盘使用 |
Docker的3个基本概念 | 1)镜像 2)容器 3)仓库 |
1.镜像 | 一个静态的模板文件,可以基于它创建多个容器 可以使用dockfile指令构建镜像,dockfile是一个文本文件,每个指令可以构建一层内容 |
2.容器 | 1)容器是基于模板构建出来的实例 2)Docker利用容器来运行应用(mysql,apache,ngnix) 3)每个容器之间都是相互隔离的,可以看成是简易的linux环境 |
3.仓库 | 集中存放多个镜像文件的场所 |
为什么系统镜像那么小呢? | 镜像运行在宿主内核kernel,底层是一致的,只是在这基础上继续做了一些优化。 Linux系统是由宿主内核和用户空间组成的,所以docker可以同时支持多种linux镜像,模拟多种操作系统环境 |
镜像的文件如何存储的? | 分层存储的。 可以通过docker history查看镜像的历史 启动镜像的时候,一个新的可写 容器层 会加在到镜像的顶部 容器层可以读写,容器所有的变更都是在这层 镜像层,只允许读 |
Container最上面是一个可写的容器层,以及若干只读的镜像层组成,Container的数据就存放在这些层中,这样的分层结构最大的特性是Copy-On- Write(写时复制): | 新的数据会直接放在最上面的容器层 如果需要修改数据,会先把镜像层的数据复制到容器层,修改后的 数据保存在容器层,镜像层不变 |
总结: | 分层实现资源共享,写时复制实现文件隔离 |
Docker镜像的迁移处理 (从本地 -> 服务器) | 导出容器(本质:导出镜像文件) Docker export 容器id > 文件名.tar 导入 Docker import redis.tar redis.v1 注意事项:
可能的原因是:docker容器必须有一个前台进程,如果没有,容器会被认为空闲的,会自动退出; 可以使用Top,tail脚本可以挂起到前台 |
导入方法 | Export && Import Save && Load (保存) (载入)
镜像名(export) 容器名(save) 2)可以回滚到历史层,保存了操作的历史和层级 3) 导出文件大 |
目录结构: | Redis Master Conf Data log Slave Dockfile Ngnix Php |
当容器读取文件的时候 | 从最上层镜像查找,往下找,找到文件后读取并放入内存 若容器中存在,直接使用 |
当容器需要添加文件时 | 直接在最上面的容器层添加文件 |
容器删除文件的时候 | 不会真删除,而是软删除 镜像层 |
Docker指令 | |
构建镜像 | 编写完成dockefile后,使用docker build生成镜像 |
指定基础镜像 | From 指定基础镜像 |
Run指令 | Run 安装一个软件包 Run 一次构建一层 Run 不要太多,尽量合并,否则,会臃肿 |
从公共的仓库这主动去拉取 | Docker pull redis |
Docker镜像创建容器 | Docker run -itd --name redis-master |
查看镜像 | Docker image |
查看所有容器 | Docker ps -a |
删除容器 | Docker rm 容器id |
进入容器 | Docker exec -it redis-master bash |
复制文件 | Add |
更高级的复制文件,可以解压缩 | Copy |
声明端口,方便映射 | Expose |
查看网络 | Docker networks |
查看容器详细信息 | Docker inspect 容器名 |
查看容器的日志 | Docker logs 容器名 |
启动服务(创建镜像时执行) | run |
启动服务(容器启动的时候执行) | CMD[‘’] CMD[ ‘/user/local/ngnix/sbin/ngnix’,’-c’ ] |
入口点 | EntryPoint |
指定工作目录(进入容器时默认打开的目录) | WorkDir |
指定当前用户 | User |
设置环境变量 | Env |
构建参数 | Arg Arg php-version |
匿名卷 | volume |
查看默认的网络 | Docker network ls |
在启动容器时使用 指定网络类型 | --network bridge xxx |
宿主机乃至外界的其他机器通信,通过端口映射 | 通过iptable的nat |
容器就不会分配局域网的IP | --network = none |
指定自定义网络 | Docker network create --subnet = 192.0.0.1 |
0.docker的理解认识
于 2019-12-09 10:32:10 首次发布