分类 "Docker" 下的文章

日常工作中,总会遇到有些 MySQL 实例我们自己访问不到的情况!

不过我们可以另辟蹊径,因为开发环境的容器可以连接到目标数据库!

而由于安全问题公司禁止使用 ssh 跳板,

这个时候只能在容器内部安装 mysql-client MySQL 客户端,这样也可以达到访问数据的目的。

命令如下:

rpm -ivh https://repo.mysql.com/mysql57-community-release-el7-11.noarch.rpm && \
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022 && \
yum install mysql-community-client.x86_64 -y

特此记录下来,下次遇到就直接粘贴上去!

对了,这个是 CentOS 7 适用,其他系统应该是不能用的。

最后更新时间 2023-01-24.

背景

笔者所在公司技术栈为 Golang + PHP,目前部分项目已经逐步转 Go 语言重构,部分 PHP 业务短时间无法用 Go 重写。

相比 Go 语言,互联网公司常见的 Nginx + PHP-FPM 模式,经常会出现性能问题——

特别是我们的活动业务,尽管底层用了鸟哥的 Yaf 框架,

但由于业务逻辑繁重,即使框架层面上完全零损耗,常常支撑不了流量高峰。

一旦某个时间段开启活动,虚拟机的扩容真的非常痛苦。

SRE、开发、QA 三方经常需要因为某个运营活动的进行,提前压测预估容量。

目前活动业务已经逐步用 Go 语言改造,此处不具体展开,防止跑题哈哈。

正因为 PHP 虚拟机模式,每次扩容需要流量剔除、克隆、操作负载均衡、验证流量等等,

推进 PHP 容器化就显得格外重要。

公司在去年年中,已经开始进行 PHP 容器化,不过由于项目优先级以及人力原因,进度较为迟缓。

事情经过

  1. 某项目进行 PHP 容器化改造,切换少许流量到容器中
  2. 逐步加大灰度流量
  3. 某一天开发上线新功能,发现滚动部署过程中存在 502 错误

分析原因

nginx 发生了 502,很多时候是后端,也就是 php-fpm 不在工作。

我们的 PHP 业务的 Pod,由以下 5 个容器组成:

阅读全文

传统部署的坑:

1202 年了,如果你连 Docker 都不知道是什么,我建议买一本书看看——或者谷歌一下,博客已经写烂了。

为什么有这篇文章,是因为我在真正做容器化改造的时候,发现公司生产环境存在大量的坑:

  • 传统虚拟机部署,基本依赖克隆或者手工编译。由于人力原因,SRE 历来单传,编译出来的 PHP、扩展等二进制版本不一致;
  • 项目开发人员痛苦不堪——他没办法模拟出接近于线上一致的环境(碰不到摸不着,各种扩展版本都要自己去编译);
  • 新人入职都会灵魂拷问你一句——我怎么把线上的代码跑起来?
  • ……

用什么 Linux 发行版?

Ubuntu 应该是全球用户量最多的发行版了,嗯我说的是桌面这一块,折腾过的人都知道,出问题的时候开机会有 “检测到系统错误” 的提示,另外,网上提供的配置或者各种疑难杂症,改了不一定能生效,而且你还不确定改了会不会影响到别的,反正我是不敢用的哈哈(Manjaro 真香)。

阅读全文

phpmyadmin

真的很喜欢 phpmyadmin 这个 PHP 程序。

虽然工作上基本都用 Navicat,但是很多东西都是习惯了,就很难改变!

比如建表,执行 SQL 语句,界面操作肯定是 phpmyadmin 更胜一筹:

  • phpmyadmin 建表很直观,是不是主键 ID、有无符号,如果是时间字段,可以直接选择当前时间、自动更新,而 Navicat 要自己把整个单词填进去……
  • 执行 SQL 语句,phpmyadmin 支持语法高亮,Navicat 是黑底白字,非常古老,没有自动完成。

当然,phpmyadmin 也有不好的地方,比如导入/导出就没有 Navicat 那么强大,大表操作还是 Navicat 好使。

开发环境上,我还是离不开 phpmyadmin,搭建环境很容易,电脑需要安装 docker,找个终端执行以下命令即可:

docker run -d --name phpmyadmin -e PMA_HOST=10.43.3.13 -e PMA_PORT=3306 -p 8081:80 phpmyadmin/phpmyadmin

注:PMA_HOSTPMA_PORT 请根据实际情况填写!网上很多教程带了 MySQL,我这边不需要本地数据库,公司提供了测试数据库。

如果你都想自己搭,那也很简单,我一直都是用 MySQL 5.7,实际上 MariaDB 10.2 也可以,后者有 arm 版本,我用 M1 跑起来会舒服些。

docker run -itd --name mariadb -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mariadb:10.2-bionic
docker run -d --name phpmyadmin-mariadb --link mariadb -e PMA_HOST="mariadb" -p 8082:80 phpmyadmin/phpmyadmin