【题目 1】容器化 MariaDB 服务[1 分]
编写Dockerfile文件构建hyperf-mariadb:v1.0镜像,具体要求如下: (需要用到的软件包:Hyperf.tar.gz)
(1)基础镜像:centos:7.9.2009;
(2)完成 MariaDB 服务的安装;
(3)声明端口:3306;
(4)设置数据库 root 用户的密码为 root;
(5)将提供的数据库文件 hyperf_admin.sql 导入数据库;
(6)设置服务开机自启。
完成后构建镜像,并提交 master 节点的用户名、密码和 IP 地址到答题框。
1.镜像构建成功得 0.5 分;
2.数据库安装且导入数据成功得 0.5 分。
vi Dockerfile
##内容如下
# 使用 CentOS 7.9.2009 作为基础镜像
FROM centos:7.9.2009
# 安装 MariaDB 服务
RUN yum install -y mariadb-server mariadb
# 配置 MariaDB 服务
RUN sed -i "s/^bind-address.*$/bind-address=0.0.0.0/" /etc/my.cnf
RUN sed -i "s/^\[mariadb\]/[mariadb]\ncharacter-set-server=utf8mb4\ncollation-server=utf8mb4_unicode_ci\n/" /etc/my.cnf
# 声明端口
EXPOSE 3306
# 设置数据库 root 用户的密码
ENV MYSQL_ROOT_PASSWORD=root
# 将数据库文件 hyperf_admin.sql 导入数据库
ADD hyperf_admin.sql /docker-entrypoint-initdb.d/
# 设置服务开机自启
RUN systemctl enable mariadb
# 拷贝启动脚本
COPY entrypoint.sh /usr/local/bin/
RUN chmod +x /usr/local/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
# 设置容器启动命令
CMD ["mysqld_safe"]
除了 Dockerfile 文件之外,还需要创建一个名为 entrypoint.sh 的启动脚本文件,内容如下:
vi entrypoint.sh
##内容如下
#!/bin/bash
set -e
# 初始化数据库
if [ ! -d "/var/lib/mysql/mysql" ]; then
mysql_install_db --user=mysql --ldata=/var/lib/mysql
chown -R mysql:mysql /var/lib/mysql
# 启动 mariadb 服务
mysqld_safe --nowatch --user=mysql &
# 等待服务启动
sleep 5
# 设置 root 用户密码
mysql -uroot -e "SET PASSWORD FOR root@localhost=PASSWORD('${MYSQL_ROOT_PASSWORD}');"
# 导入 hyperf_admin.sql 文件
if [ -f "/docker-entrypoint-initdb.d/hyperf_admin.sql" ]; then
mysql -uroot -p${MYSQL_ROOT_PASSWORD} < /docker-entrypoint-initdb.d/hyperf_admin.sql
fi
# 关闭 mariadb 服务
mysqladmin -uroot -p${MYSQL_ROOT_PASSWORD} shutdown
fi
# 启动 mariadb 服务
exec mysqld_safe --user=mysql
请将 entrypoint.sh 文件与 Dockerfile 文件放在同一个目录下,并确保 hyperf_admin.sql 文件也在此目录下。然后在此目录中运行如下命令以构建镜像。
docker build -t hyperf-mariadb:v1.0 .
【题目 2】容器化 Redis 服务[1 分]
编写 Dockerfile 文件构建 hyperf-redis:v1.0 镜像,具体要求如下:(需要用到的软件包:
Hyperf.tar.gz)
(1)基础镜像:centos:7.9.2009;
(2)安装 Redis 服务;
(3)关闭保护模式;
(4)声明端口:6379;
(5)设置服务开机自启。
完成后构建镜像,并提交 master 节点的用户名、密码和 IP 地址到答题框。
1.镜像构建成功的 0.5 分;
2.Redis 服务安装成功且配置正确得 0.5 分。
vi Dockerfile
# 使用 CentOS 7.9.2009 作为基础镜像
FROM centos:7.9.2009
# 安装 Redis 服务
RUN yum install -y epel-release
RUN yum install -y redis
# 配置 Redis 服务
RUN sed -i 's/^bind .*/bind 0.0.0.0/' /etc/redis.conf
RUN sed -i 's/^protected-mode yes/protected-mode no/' /etc/redis.conf
# 声明端口
EXPOSE 6379
# 设置服务开机自启
RUN systemctl enable redis
# 设置容器启动命令
CMD ["redis-server", "/etc/redis.conf"]
将以上内容保存为 Dockerfile 文件,然后在 Dockerfile 所在目录中运行
docker build -t hyperf-redis:v1.0 .
【题目 3】容器化 Nginx 服务[0.5 分]
编写 Dockerfile 文件构建 hyperf-nginx:v1.0 镜像,具体要求如下:(需要用到的软件包:
Hyperf.tar.gz)
(1)基础镜像:centos:7.9.2009;
(2)安装 nginx 服务;
(3)声明端口:80;
(4)设置服务开机自启。
完成后构建镜像,并提交 master 节点的用户名、密码和 IP 地址到答题框。
1.镜像构建成功得 0.3 分;
2.Nginx 安装成功且配置正确得 0.2 分。
##Dockerfile内容如下:
# 使用 CentOS 7.9.2009 作为基础镜像
FROM centos:7.9.2009
# 安装 Nginx 服务
RUN yum install -y epel-release
RUN yum install -y nginx
# 声明端口
EXPOSE 80
# 设置服务开机自启
RUN systemctl enable nginx
# 设置容器启动命令
CMD ["nginx", "-g", "daemon off;"]
将以上内容保存为 Dockerfile 文件,然后在 Dockerfile 所在目录中运行
docker build -t hyperf-nginx:v1.0 .
【题目 4】容器化 Hyperf 服务[1 分]
编写 Dockerfile 文件构建 hyperf-service:v1.0 镜像,具体要求如下: (需要用到的软件包:Hyperf.tar.gz)
(1)基础镜像:centos:7.9.2009;
(2)安装 PHP 及扩展;
(3)使用源码编译安装 Swoole。
完成后构建镜像,并提交 master 节点的用户名、密码和 IP 地址到答题框。
1.镜像构建成功得 0.5 分;
2.PHP 安装成功得 0.2 分;
3.Swoole 安装成功得 0.3 分。
Dockerfile内容如下:
# 使用 CentOS 7.9.2009 作为基础镜像
FROM centos:7.9.2009
# 安装必要的依赖和 PHP 及扩展
RUN yum install -y epel-release
RUN yum install -y http://rpms.remirepo.net/enterprise/remi-release-7.rpm
RUN yum-config-manager --enable remi-php74
RUN yum install -y php php-cli php-devel php-openssl php-pdo php-mbstring php-xml php-bcmath php-json php-gd php-curl gcc-c++ make autoconf unzip
# 添加 Swoole 源码
ADD https://github.com/swoole/swoole-src/archive/v4.7.1.tar.gz /tmp/swoole-src.tar.gz
# 使用源码编译安装 Swoole
RUN tar -zxvf /tmp/swoole-src.tar.gz -C /tmp/ \
&& cd /tmp/swoole-src-* \
&& phpize \
&& ./configure \
&& make \
&& make install
# 添加 Swoole 扩展到 PHP 配置文件
RUN echo "extension=swoole.so" > /etc/php.d/swoole.ini
# 添加 Hyperf 代码
COPY Hyperf.tar.gz /var/www/
RUN cd /var/www/ && \
tar -zxvf Hyperf.tar.gz && \
rm Hyperf.tar.gz
# 设置工作目录
WORKDIR /var/www/hyperf-master
# 设置容器启动命令
CMD ["php", "bin/hyperf.php", "start"]
构建镜像:
docker build -t hyperf-service:v1.0 .
【题目 5】编排部署 Hyperf 框架[3.5 分]
编写/root/hyperf/project/docker-compose.yaml 文件,具体要求如下:
(1)容器 1 名称:hyperf-mysql;镜像:hyperf-mariadb:v1.0;端口映射:3306:3306;
(2)容器 2 名称:hyperf-redis;镜像:hyperf-redis:v1.0;
(3)容器 3 名称:hyperf-ui;镜像:hyperf-nginx:v1.0;端口映射:80:8081;
(4)容器 4 名称:hyperf-service;镜像:hyperf-service:v1.0
完成后编排部署 Hyperf 框架,并提交 master 节点的用户名、密码和 IP 地址到答题框。
1.docker-compose.yaml 文件编排成功得 1.5 分;
2.8081 端口访问服务成功得 1 分;
3.Hyperf-service 连接数据库和 Redis 成功得 1 分。
docker-compose.yaml内容如下:
version: '3'
services:
hyperf-mysql:
image: hyperf-mariadb:v1.0
container_name: hyperf-mysql
ports:
- "3306:3306"
hyperf-redis:
image: hyperf-redis:v1.0
container_name: hyperf-redis
hyperf-ui:
image: hyperf-nginx:v1.0
container_name: hyperf-ui
ports:
- "80:8081"
hyperf-service:
image: hyperf-service:v1.0
container_name: hyperf-service
将此内容保存到 /root/hyperf/project/docker-compose.yaml 文件中。在保存文件后,您可以使用 docker-compose 工具部署这些服务。
安装docker-compose:
curl -L "https://github.com/docker/compose/releases/download/1.29.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
在包含 docker-compose.yaml 文件的目录中运行以下命令:
docker-compose up -d
通过执行上述 docker-compose up -d
命令,您已完成 Hyperf 框架的部署。现在,所有服务应该正在运行,你可以通过访问 http://localhost
来查看 hyperf-ui 容器所提供的界面。