赞
踩
虚拟化:其核心是对资源的抽象。目的是为了再同一个主机上同时运行多个系统或者应用,从而提升系统资源的利用率,降低成本。
虚拟化分为了很多,其中的2个有完全虚拟化和操作系统级虚拟化。
docker是虚拟化技术中的操作系统级虚拟化,直接复用宿主机的操作系统。即宿主机内核通过创建多个虚拟的操作系统实例(内核和库)来隔离不同的进程。
虚拟机vmware软件则是完全虚拟化,其模拟完整的底层硬件环境和特权指令的执行过程。
核心概念
镜像:生成容器模本(源代码)。由多个只读层组成。与容器的唯一区别是,容器在这些只读层上面添加了一层可读写的容器层。
容器:镜像的一个实例;由只读镜像层和可读写容器层组成。表现为一个微型操作系统和一个(组)应用。
仓库:存放镜像的地方;实际上为Registry仓库注册服务器,仓库只是相对于某个镜像的而言的。即仓库存放mysql镜像,有为很多版本。Registry仓库注册服务器则有很多仓库,比如mysql仓库和redis仓库等。注册索引(index)则是负责维护用户的账号,权限等管理。
层:联合文件系统,是一种轻量级的高性能分层文件系统,每次修改作为一次提交,并层层叠加。多个层就可以组成一个镜像,即联合文件系统是实现docker镜像的技术基础。
新增的一些命令
# 镜像 # 镜像详情 docker inspect mysql:7 # 镜像分层信息 docker history tomcat:7 # 镜像清理,一些临时镜像文件和没有使用的镜像 docker prune -af # 镜像创建,四种commit import builid,load docker commit -m 'add a new file' -a 'docker nb' 容器id qsmtomcat:0.1 # 镜像上传 docker push qsmtomcat:1.0 # 容器 # 容器run,等于create和start docker run -it -p 9999:8080 --name mytomcat 镜像id # 容器导出 docker export -o qsm.tar ce5 # 容器导入 docker import qsm.tar - test/qsmtomcat:1.0 # 容器信息,inspect详情。top进程。stats统计信息,cup内存,网络等 docker stats 容器id # 容器查看变更 diff 容器内一些数据修改; docker diff 容器id # 容器,更新配置update,一些运行时资源配置。 docker update--cpu-quota 100000 容器id/name # 仓库 # 可以使用registry镜像搭建本地仓库 docker run -d -p 5000:5000 registry:2
docker的数据管理
一是使用数据卷
即容器内的数据直接映射到本地主机环境。有2种方式可以实现
# 第一种,--mount
docker run -d -P --name web --mount type=bind,source=/webapp,destination=/opt/webapp training/webapp python app.py
# 第二种,在run命令的时候直接-v
docker run -it -p 8888:8080 --name qsmtomcat2 -v /local/tomcat/webapps/ /usr/local/tomcat/webapps tomcat镜像id
# 第三种,在dockerfile中指定Volume,宿主机的模板可以用docker inspcet 容器id看到。
二是使用数据卷容器
使用特点的容器维护数据,可以实现各个容器之间的数据共享。
# 首先创建一个容器
docker run -it -v /dbdata --name dbdata ubuntu
# 其他容器使用--volumes-from 来指定容器
docker run -it --volumes-from dbdata --name db1 ubuntu
具体详细实现和相关问题可以参考Docker之数据卷容器
docker的容器访问
一是使用端口映射,二是容器互联
前者在run命令的时候使用-p指定或者-P随机指定。
后者是创建一个容器之后,在另外一个容器–link 第一个容器名
Dockerfile
基础的操作系统镜像有busybox debian centos ubuntu等
需要多加练习
基本架构
C/S组件+仓库
C端:用户使用的Docker可执行命令就是客户端程序。
S端:dockerd,接受请求。docker-proxy端口映射。containerd具体处理与容器相关的请求,containerd-shim,为runC容器提供支持,并且作为容器内进程的根进程。
仓库:存放镜像
底层实现:namespace、cgroup,UnionFS
namespace命名空间保证了一套独立的运行环境
进程命名空间:独立的一套进程管理方法
IPC命名空间:进程间的交互方式,信号量,消息队列,共享内存
网络命名空间:一对虚拟接口(虚拟网卡)veth,在docker0网桥上。
挂载命名空间:文件挂载。
UTS命名空间:独立的主机名和域名。163.com:这个是域名。
用户命名空间:一套用户管理方法。
cgroup控制组对共享的系统资源进行控制分配等。避免竞争。
资源限制
优先级
资源审计
隔离
控制
UnionFS联合文件系统,是镜像的基础,镜像是由多个层组成。
UnionFS是一种轻量级的高性能分层文件系统。层是可以继承的。层除了有基础文件,还有一个json文件,将静态的镜像右dockerd变为动态的容器。
docker网络
一共有5种方式
bridge模式
bridge模式是docker默认的,也是开发者最常使用的网络模式。在这种模式下,docker为容器创建独立的网络栈,保证容器内的进程使用独立的网络环境,实现容器之间、容器与宿主机之间的网络栈隔离。同时,通过宿主机上的docker0网桥,容器可以与宿主机乃至外界进行网络通信
host模式
由于容器和宿主机共享同一个网络命名空间,换言之,容器的IP地址即为宿主机的IP地址。所以容器可以和宿主机一样,使用宿主机的任意网卡,实现和外界的通信
container模式
docker中一种较为特别的网络的模式。在这个模式下的容器,会使用其他容器的网络命名空间
none模式
在这种模式下,容器有独立的网络栈,但不包含任何网络配置,只具有lo这个loopback网卡用于进程通信
用户定义模式
在用户定义网络模式下,开发者可以使用任何docker支持的第三方网络driver来定制容器的网络
docker compose
我们知道使用Dockerfile模板文件可以让用户很方便的定义一个单独的应用容器,其实在工作中,经常会碰到需要多个容器相互配合来完成的某项任务情况,例如工作中的web服务容器本身,往往会在后端加上数据库容器,甚至会有负责均衡器,比如LNMP服务。
因此,docker compose可以批量的操作多个应用容器。
三个要素:services,networks ,volumes
样例yml文件:
version: "3.7" services: redis: image: redis:alpine ports: - "6379" networks: - frontend deploy: replicas: 2 update_config: parallelism: 2 delay: 10s restart_policy: condition: on-failure db: image: postgres:9.4 volumes: - db-data:/var/lib/postgresql/data networks: - backend deploy: placement: constraints: [node.role == manager] networks: frontend: backend: volumes: db-data:
若查看基础版,请移步指docker基础版笔记
【正在去BAT的路上修行!!!】
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。