【背景】最近在信创环境测试虚拟机性能,用一个非常简单的小型应用做测试,架构为典型的前后端分离架构,前端web服务为应用服务器,后端使用mysql数据库。然后对这个应用做容器化改造,以容器方式启动,两种方式的应用分别进行梯度加压,对比文件/容器启动的性能表现及虚机资源利用情况,以及X86和信创虚机表现。
该项工作涉及到:
1、测试应用选型;
2、X86和XC环境分别部署mysql数据库(其中虚机有麒麟、统信、欧拉等多种国产操作系统,网络不能访问国外,个别没有网络访问)和redis缓存;
3、应用传统文件方式部署;
4、容器化改造一个应用并运行;
5、要求两种方式的应用都能应对梯度加压,压测并发1000以上。
整个过程问题很多,掉坑多次。。。应用容器化改造的过程算是比较简单的,简单记录一下。
Phorum | Open Source PHP Forum Software
解压:tar xzf phorum-5.2.23.tar.gz -C /var/www/html
chmod -R 777 /var/www/html
mv /var/www/html/Core-phorum_5_2_23 /var/www/html/phorum
#搭建LAMP环境
yum install -y httpd php php-fpm php-common php-cli php-mbstring php-xml php-mysqlnd
更改数据库配置:phorum/include/db/config.php.sample配置文件
cp -a config.php.sample config.php
vim config.php
array( // Database connection 1.
'name' => 'phorum',
'server' => '192.168.XXX',
'user' => 'phorum5',
'password' => 'phorum5',
'port' => '3306',
'socket' => NULL),
打开 http://10.200.XXXXX/Core-phorum_5_2_23/admin.php安装即可
到此是传统的文件部署方式,然后对这个应用做容器化改造:
【安装docker 】
cp -a /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
wget -O /etc/yum.repos.d/CentOS-Base.repo
https://repo.huaweicloud.com/repository/conf/CentOS-7-anon.repo
yum clean all
yum makecache
yum update
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install -y docker-ce --nogpgcheck
systemctl start docker
systemctl enable docker
docker --version (25.0.2)
【镜像仓库】
在没有网络互通的情况下,不同虚拟机之间传递镜像用一个公网仓库中转,可以换成自己的harbor或者nexus:
docker login -u USER -p PASSWORD swr.cn-north-4.myhuaweicloud.com
docker pull swr.cn-north-4.myhuaweicloud.com/ORG/centosx86withlamp:latest
docker tag phorumarm64:latest swr.cn-north-4.myhuaweicloud.com/ORG/phorumarm64:latest
docker push swr.cn-north-4.myhuaweicloud.com/ORG/phorumarm64:latest
离线包传输:docker save一个镜像成为tar包:docker save -o image.tar image_name:tag
docker load一个tar包镜像docker load -i image.tar
【Dockerfile 】
vim dockerfile #本机repo源替换容器repo源
FROM daocloud.io/library/centos:7.6.1810
COPY ./CentOS-Base.repo /etc/yum.repos.d/
RUN yum clean all && yum makecache
RUN yum install -y tar httpd php php-fpm php-common php-cli php-mbstring php-xml php-mysqlnd #基镜像里没有LAMP环境,所以需要另行安装,但最好是先把基镜像改造一下,commit成新的基镜像,打出来的镜像总大小可以减小一半
COPY ./phorum-5.2.23.tar.gz /tmp/
RUN cd /tmp/ && tar xzf phorum-5.2.23.tar.gz -C /var/www/html
RUN cd /var/www/html
RUN mv /var/www/html/Core-phorum_5_2_23 /var/www/html/phorum
ADD config.php /var/www/html/phorum/include/db/config.php #原配置文件写死了数据库配置,将config.php中数据库配置改成环境变量
RUN chmod -R 777 /var/www/html
ADD httpd-foreground /httpd-foreground
RUN chmod -v +x /httpd-foreground
ENV DB_NAME=phorumdocker
ENV DB_HOST=localhost
ENV DB_USER=root
ENV DB_PASSWORD=
CMD ["/httpd-foreground"]
【开机脚本】
httpd-foreground为开机启动httpd服务脚本,在docker里面无法直接使用systemctl来启动服务,因此需要使用开机脚本启动httpd服务
vim httpd-foreground
#!/bin/bash
set -e
rm -f /usr/local/apache2/logs/httpd.pid
exec httpd -DFOREGROUND
保存后更改权限
chmod +x httpd-foreground
【构建镜像】
docker build -t phorum .
【运行镜像】
docker run --name phorum -d -p 81:80 -e DB_HOST=10.246.XX phorum:latest
访问互联网81端口指向容器80端口。