2022 年全国职业院校技能大赛高职组云计算赛项试卷-容器云-2

【题目 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 容器所提供的界面。

你可能感兴趣的:(容器云,linux,docker,数据库)