一、数据持久化
我们什么情形下要做数据持久化呢?一定是在做容器之前先预判好哪些文件是要永久存储的, 而不会随着容器的生命周期而消逝。
比如说配置文件、日志文件、缓存文件或者运用数据等等。数据初始化有三种类型:第一种 volumes,这个是最推举的,也是最好的一种办法,第二种是 bind—mount,第三种是 tmpfs。

办法一:volumes
它是官方比较推举也是大型的集群比较常见的一种办法。可以理解为在自己的宿主机或者云端 或者在某一个区域创建一块磁盘专门去存放容器里的数据或文件。把这个容器里边的数据或者 文件还有目录等都方案好,再去启动容器。在老一些的版本里边首先必须要去创建 volumes, 否则是没有办法创建成功的。新版本彷佛不写命令也可以创建成功,详细可以查询官方关于 volumes 的文档。
利用:
docker volume create test1docker run -itd -p 8800:80 -v test1:/usr/share/nginx/html nginx:v1创建:docker volume create删除某个卷:docker volume rm 卷名删除所有未利用的卷:docker volume prune列出所有卷:docker volume ls查看某个卷的信息:docker volume inspect 卷名挂载到容器:-v 或–volume。如果是 Docker17.06 或更高:推举利用–mount。(同 bind mo unt)挂载类型:key 为 type,value 为 bind、volume 或 tmpfs挂载源:key 为 source 或 src,对付命名卷,value 为卷名,对付匿名卷,则忽略
容器中的挂载点:key 为 destination、dst 或 target,value 为容器中的路径 读写类型:value 为 readonly,没有 keyvolume-opt 选项,可以涌现多次。比如 volume-driver=local,volume-opt=type=nfs,... 第一个域:对付命名卷,为卷名;匿名卷,则忽略,此时会创建匿名卷 第二个域:容器中的挂载点
第三个域:可选参数,由’,'隔开,如 ro -v 或—volume:由 3 个域组成,’:’分隔 —mount:由多个’,’隔开的键值对组成
办法二:bind—mount
将宿主机中的文件、目录 mount 到容器上。宿主机、container 之间共享宿主机文件系统。这 种持久化方法更导致 container 与宿主机的耦合过于紧密,以是不推举利用。
利用:docker run -itd -p 8801:80 -v /var/log/cont/apache1:/var/log/httpd/apache:new2挂载到容器:-v 或—volume。如果是 Docker17.06 或更高:推举利用—mount。(同 volume s)-v 或–volume:由 3 个域组成,’:'分隔
第一个域:对付命名卷,为卷名;匿名卷,则忽略,此时会创建匿名卷 第二个域:容器中的挂载点第三个域:可选参数,由’,'隔开,如 ro –mount:由多个’,'隔开的键值对=组成:
挂载类型:key 为 type,value 为 bind、volume 或 tmpfs挂载源:key 为 source 或 src,value 为主机中文件或目录的路径容器中的挂载点:key 为 destination、dst 或 target,value 为容器中的路径读写类型:value 为 readonly,没有 key bind-propagation选项:key为bind-propagation,value为rprivate、private、rshared、
shared、rslave 或 slave 同等性选项:value 为 consistent、delegated、cached。这个选项仅仅适用于 Docker for
Mac –mount不支持z和Z(这个不同于-v和—volume)
办法三:tmpfs
将数据存于宿主机内存中。docker 可将用户名与密码等敏感数据保存在某个数据库中,当启动 须要访问这些敏感数据的 container 或者 service 时,docker 会在宿主机上创建一个 tmpfs,然 后将敏感数据从数据库读出写到 tmpfs 中,再将 tmpfs mount 到 container 中,这样能担保数 据安全。当容器停滞运行时,则相应的 tmpfs 也从系统中删除。
docker run -itd --name tmptest --tmpfs /root nginx:latest
二、harbor 仓库
镜像获取有两种办法:
第一种办法是从官方的镜像仓库获取,search 命令从官方镜像查找已有的镜像。 第二种办法是企业级镜像仓库,公司最常用的是 harbor。
harbor 的浸染:
1:企业级镜像仓库,根据企业需求创建的镜像,可以通过 harbor 实现管理和利用。 2:紧张特点功能包括:基于角色的访问掌握,基于镜像的复制策略,图形化用户界面,审计管 理等。
安装:
安装并启动 docker安装 docker-compose1.18 以上版本。(docker 单机容器编排工具) wget https://github.com/docker/compose/releases/download/1.29.2/ docker-compose-Linux-x86_64#从官网下载 docker-compose 二进制文件 chmod +x docker-compose-Linux-x86_64#添加实行权限 mv docker-compose-Linux-x86_64 /usr/bin #移动到系统指令目录下
tar -xvf harbor-offline-installer-v2.3.1.tgz #解压 cp harbor.yml.tmpl harbor.yml #复制官方配置文件案例。
vim harbor.yml#修正配置文件中 hostname 和 https 字段。{ Vim/etc/docker/daemon.json(信赖 harbor 端 IP)
“Registry-mirrors”:[“https//f9dk003m.mirror.aliyuncs.cm”], “insecure-regidtries”:[“192.168.28.100]}(重启 docker) bash prepare && bash install.sh
#初始化并安装
compose 是 docker 的单机容器编排工具。
https 注释,帮助我们实现安全的目的。 重启 docker。
实行,保存退出,涌现 Harbor has been installedand started successfully,安装成功。
1)新建项目后,创建用户,新建成员名称要和创建用户名字一样。
2)将本地刚刚做的镜像推送到 harbor 共用项目仓库中。
docker tag apache:new1 192.168.28.100/library/apache:new1 利用 harbor•vim /etc/docker/daemon.json(信赖 harbor 端 IP)
{ "registry-mirrors": ["https://f9dk003m.mirror.aliyuncs.com"], } "insecure-registries":["192.168.28.200"]
docker login 192.168.28.100docker push 192.168.28.100/library/apache:new1
三、微做事
微做事是一种架构的模式,是单体的运用。单体运用拆分成各个模块,充分的去解耦,独立构 建支配,相互之间可以折衷合营。
微做事的特点:颗粒度小,且专注一件事情;单独的进程;轻量级的通信机制;松耦合,独立支配。
微做事具备四个特性,繁芜性,隐匿性,异变性,合营性。
1、繁芜性困境:系统会随着业务的发展,增加越来越多的特性和功能,使得系统繁芜到没有一个人能全 面理解,没有一个人敢去修正原有的功能或代码。
微做事:微做事提出以业务边界作为模块划分原则,每个模块独立进程,一个业务由很多独立 的小业务组合而成,系统也是由独立的小系统组合而成,这样的好处是每个小系统都很随意马虎理 解,一个大系统可以根据业务组合微做事,或者逐渐发展独立的微做事。
代价:微做事为了降落单个微做事的繁芜性,导致整体系统的繁芜性急剧增加。微做事之间的 连接更加繁芜,网络通讯不可靠和性能损耗,协议匹配,接口对接和转换,版本协作,微做事 注册和创造,编排和调度,分布式业务和数据同等性等繁芜性都是单体架构不须要考虑的。
2、隐匿性困境:软件在没有运用到业务之前,各种信息和思考大多在每个人的脑海里,很难完备呈现和 想象出来,客户只是知道自己想要更多新英雄,但并不知道要详细什么样的英雄;开拓设计人 员知道怎么做英雄,但又不能完备理解用户需求;运维知道支配做事和上线,但又不能完备理 解业务逻辑。单体架构中的各个模块隐蔽在大系统的页面下,在交付之前对外界是不可见的。 导致没有人能看清全貌,各自都把事情做到最好,但组合起来却不是客户想要的东西。
微做事:微做事架构并没有改变软件开拓过程中的隐匿性,而是通过缩短从需求到交付这段软 件开拓周期,减少隐匿韶光,来降落软件工程总体的隐匿性。
代价:组织必须要具备自动支配持续交付能力。如果一个别系上线须要 3 小时进行支配,如果 我们要持续支配,每天都支配一次,那就须要每天拿出 3 小时做支配,这个本钱是不能接管的。
3、耦合性困境:如果系统从零开始做的话,头三个月开拓会比较慢,由于须要搭建和熟习一些开拓、测 试、支配根本举动步伐,随着根本举动步伐和公共组件的完善,接下的半年到一年开拓会加速,但是再 今后开拓速率又会逐渐降落,由于那些一开始提高开拓效率的接口、共享表、依赖组件都变成 了繁芜网络缠绕在一起,变成了所谓的牵一发而动全身,改一行代码都不知道会影响到什么地 方。
微做事:微做事系统的耦合性问题总是在一个可控的范围内。比如微做事独立数据库表构造, 那我们根据业务须要改表构造的时候就不须要去考虑会不会影响到其他业务,由于其他业务和 这个表构造完备没紧要。
代价:纯挚从接口协同一致上来说,微做事架构比较糟糕。单体架构的接口之间合营是相同的 编程措辞,基本上在编译时就能创造缺点,而微做事的接口每每是远程做事,验证增加难度。
4、易变性困境:比如某个模块的流量溘然增加,或者须要大内存,单体架构只能为极少的模块增加全体 系统的打算资源,又由于增加全体系统的打算资源本钱很高,履行韶光长,导致性能需求迟迟 不能得到知足。
微做事:微做事哀求独立进程,可以完备根据需耱定制不同类型的打算资源,更风雅化分类的 利用内存、IO、CPU。由于小,可以更快水平扩展相应性能需求变革。更关键是,微做事小, 强调独立业务代价。小团队直接面对客户需求做决策,所有信息和想法在小范围内快速互换, 业务代价流动更随意马虎可见,更快速的相应变革。后期可以弹性扩容。
代价:微做事架构须要改变组织构造小团队充分制授权、业务交付模式。对付传统组织而言, 这点是最难的,尤其是大公司每每采取层级组织架构。
总结:
1、单体运用的困难,是现在普遍的困境。新的团队有了理念后,会在万丈高楼平地起时就采取 该架构,避免单体运用困境。 2、微做事是趋势,现在某些大公司难以实现只是韶光问题。除非它不须要拓展业务和变更业务。 3、18 年前后 k8s 的涌现,短短三年就被天下各互联网公司所接管和利用,就足以解释微做事 的主要性。对运维职员和开拓职员来说,这是个大的寻衅和机遇。
4、碰着风口,不进则退。
实现:
我们末了做一个案例,nginx 和 php-fpm 实现 php 网页正常运行。这个案例学通,之后就可以 根据该案例知识,做更繁芜的架构。该案例也是运维微做事须要根本节制的核心内容。 有几个问题须要办理:
1、一个容器只能有一个启动命令(CMD),但这里启动两个做事 。 2、多个容器之间如何通信?3、php-fpm 只许可本机通信,多个容器通信需自私做?4、nginx 和 php-fpm 须要访问同一个网页文件,怎么办理?
php-fpm 镜像
创建镜像准备:
vim /etc/php-fpm.d/www.conf listen=0.0.0.0:9000 监听 IP 和端口。
;listen.allowed_clients=127.0.0.1 许可连接的 FastCGI 客户的 ipv4 地址列表。
mkdir /root/php-fpmcp /etc/php-fpm.d/www.conf/root/php-fpm/写 php-fpm 的 dockerfilevim /root/ php-fpm/dockerfileFROM centos:7RUN yum –y install php-fpmEXPOSE 9000COPY www.conf /etc/ php-fpm.d/www.confCMD [“/usr/sbin/ php-fpm”,”—nodaemonize”]
1)Php-fpm 创建镜像准备
vim/etc/php-fpm.d/www.conflisten = 0.0.0.0:9000 监听 IP 和端口。 ;listen.allowed_clients = 127.0.0.1mkdir /root/php-fpmcp /etc/php-fpm.d/www.conf /root/php-fpm/
2)php-fpm 的 dockerfile
vim /root/php-fpm/dockerfile FROM centos:7RUN yum -y install php-fpm EXPOSE 9000
COPY www.conf /etc/php-fpm.d/www.conf CMD ["/usr/sbin/php-fpm","--nodaemonize"]
3)nginx 创建镜像准备
vim /etc/nginx/conf.d/default.conf改成 php 配置mkdir /root/nginxcp /etc/nginx/conf.d/default.conf /root/nginx mkdir /root/nginxweb
vim /root/nginxweb/index.php <?php echo '<p>true</p>'; ?>
4)写 nginx 的 dockerfile
vim /root/nginx/dockerfileFROM centos:7RUN rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/ nginx-release-centos-7-0.el7.ngx.noarch.rpm
RUN yum -y install nginx EXPOSE 80CMD ["nginx","-g","daemon off;"]
5)构建镜像
cd /root/nginxdocker build -t nginx:v1 .cd /root/php-fpmdocker build -t php-fpm:v1 .
6)启动容器
docker run -itd -p 8800:80 -v /root/nginxweb/:/usr/share/nginx/html --name nginx nginx:v1docker run -itd --network=container:nginx
-v /root/nginxweb/:/usr/share/nginx/html php-fpm:v1
验证,直接网页打开即可。