生产环境中,对于运维来说,可能不需要亲自去编写Dockerfile来构建镜像,大多数是研发部门来做这个事情,但我认为运维岗位有必要清楚Dockerfile的构建过程,再不济也应该知道运行这个image时,最后的进程是怎么样的,这会更有利于测试维护。
在我的公司来说,底层运维和研发是搭不上话的,更别说了解Dockerfile了,这就需要自己来研究。
偶然的一次机会,解决项目故障的分析过程中,看到项目中有研发团队写好的Dockerfile,居然出现了两个FORM
,吸引了我的眼球。和我自己之前写过的文章 Dockerfile构建简单镜像 有所不同,决定一探究竟。
涉及到docker的几个配置文件
/etc/docker/daemon.json # 启动配置文件
/root/.docker/config.json # 启动配置文件
/etc/systemd/system/docker.service # 启动文件
这里使用nfs为PV&PVC做后端存储
[root@node1 ~]# yum -y install nfs-utils rpcbind
[root@node1 ~]# mkdir /nfsdata/mysql_pv
[root@node1 ~]# vim /etc/exports
/nfsdata *(rw,no_root_squash,sync)
[root@node1 ~]# exportfs -r
[root@node1 ~]# systemctl start rpcbind nfs-server
[root@node1 ~]# systemctl enable rpcbind nfs-server
试想一个场景
现在有一个正常运行的多副本应用,要对应用进行更新(比如更新image),Kubernetes会启动新副本来代理旧副本,然后发生了以下事件:
1、正常情况下新副本需要10s左右来完成准备工作,在此之前无法响应更新后的业务请求。
2、但由于人为配置错误,副本始终无法完成准备工作(比如无法连接后端数据库)
这个环境是生产环境中的真实项目,仅做参考 通过Docker+k8s来部署web集群,GitLab+Jenkins实现代码自动化部署,在Jenkins中通过构建脚本,实现k8s对容器web集群代码自动更新
实验环境
ip | 服务 | 备注 |
---|---|---|
192.168.1.11 | Docker swarm service(nginx+php) | swarm-manager |
192.168.1.12 | Docker swarm service(nginx+php) | node1 |
192.168.1.13 | Docker swarm service(nginx+php) | node2 |
192.168.1.14 | mysql+haproxy | mysql-haproxy |
部署环境仍然是swarm集群环境
部署一个 WordPress 应用,WordPress 是流行的开源博客系统。
将创建一个 MySQL service,将密码保存到 secret 中。我们还会创建一个 WordPress service,它将使用 secret 连接 MySQL。这个例子将展示如何用 secret 避免在 image 中存放敏感信息,或者在命令行中直接传递敏感数据。
建议主机使用内存4G以上
要在Docker Engine处于群集模式时部署应用程序镜像,创建服务。通常,服务是某个大型应用程序上下文中微服务的镜像。service示例可能包括HTTP服务器,数据库或希望在分布式环境中运行的任何其他类型的可执行程序。
1 / 4