ChinaSkillsMall-1(GZ-2021040/1)

云梦公司开发了一套基于SpringBoot+MyBatis微服务架构的ChinaSkillsMall电商系统,并实现全容器化部署,ChinaSkillsMall电商应用系统架构图如下:

模块 说明
mall-monitor 监控中心
mall-gateway 微服务网关
mall-auth 认证中心
mall-admin 商城后台服务
mall-portal 商城前台服务

image-20220113231452676

tar -xf mall-swarm.tar && mv mall-swarm /opt
mkdir mall-swarm && cd mall-swarm
[root@master mall-swarm]# vi ftp.repo
[centos]
name=centos
baseurl=ftp://192.168.100.101/centos
gpgcheck=0
enable=1
[gpmall]
name=gpmall
baseurl=ftp://192.168.100.101/mall-swarm/mall-repo 
enabled=1
gpgcheck=0

请将Redis组件、RabbitMQ组件、MongoDB组件和前端Nginx组件按照要求进行容器化。

  1. 编写Dockerfile制作Redis镜像,生成镜像名为mall-redis:v1.1,并推送其到私有仓库。具体要求如下:

    • 基于centos:centos7.5.1804基础镜像;
    • 指定作者为Chinaskill;
    • 修改配置文件中的bind 127.0.0.1为bind 0.0.0.0;
    • 设置Redis免密,并关闭保护模式;
    • 开放端口:6379;
    • 设置服务开机自启
FROM centos:centos7.5.1804
MAINTAINER Chinaskill
RUN rm -rf /etc/yum.repos.d/*
ADD ftp.repo /etc/yum.repos.d/
RUN yum -y install redis*
RUN sed -i 's/bind 127.0.0.1/bind 0.0.0.0/g' /etc/redis.conf && sed -i 's/protected-mode yes/protected-mode no/g' /etc/redis.conf
EXPOSE 6379
CMD ["redis-server","/etc/redis.conf"] 

docker build -t mall-redis:v1.1 .

  1. 编写Dockerfile制作RabbitMQ镜像,生成镜像名为mall-rabbitmq:v1.1,并推送其到私有仓库。具体要求如下:

    • 基于centos:7.5.1804基础镜像;
    • 指定作者为Chinaskill;
    • 开放端口:5672、15672;
    • 设置服务开机自启。
vi rabbitmq-user.sh

#!/bin/bash 
## 创建RabbitMQ用户 
/usr/lib/rabbitmq/bin/rabbitmq-server -detached 
sleep 3 
/usr/lib/rabbitmq/bin/rabbitmqctl add_vhost mall 
/usr/lib/rabbitmq/bin/rabbitmqctl add_user mall mall 
/usr/lib/rabbitmq/bin/rabbitmqctl set_user_tags mall administrator
/usr/lib/rabbitmq/bin/rabbitmqctl set_permissions -p mall mall ‘.*’ ‘.*’ ‘.*’ 
/usr/lib/rabbitmq/bin/rabbitmq-plugins enable rabbitmq_management
FROM centos:centos7.5.1804 
MAINTAINER Chinaskill 
RUN rm -rf /etc/yum.repos.d/*
COPY local.repo /etc/yum.repos.d/
COPY rabbitmq-user.sh /opt/rabbitmq-user.sh
RUN yum -y install rabbitmq-server
EXPOSE 5672 15672
CMD [“/bin/bash”,”/opt/rabbitmq-user.sh”]
FROM centos:centos7.5.1804
MAINTAINER Chinaskill
RUN rm -rf /etc/yum.repos.d/*
ADD ftp.repo /etc/yum.repos.d/
RUN yum -y install rabbitmq-server 
EXPOSE 5672
EXPOSE 15672
ENTRYPOINT rabbitmq-plugins enable rabbitmq_management && rabbitmq-server
CMD ["rabbitmq-server"]
  1. 编写Dockerfile制作MongDB镜像,生成镜像名为mall-mongodb:v1.1,并推送其到私有仓库。具体要求如下:

    • 基于centos:centos7.5.1804基础镜像;
    • 指定作者为Chinaskill;
    • 开放端口:27017;
    • 设置服务开机自启。
FROM centos
MAINTAINER Chinaskill
COPY mongodb.repo /etc/yum.repos.d/mongodb.repo
RUN yum install -y mongodb-org
EXPOSE 27017
RUN systemctl enable mongod 

FROM centos:centos7.5.1804
MAINTAINER Chinaskill
RUN rm -rf /etc/yum.repos.d/*
COPY ftp.repo /etc/yum.repos.d/
RUN yum -y install openssh
RUN yum install -y mongodb-org
EXPOSE 27017
RUN systemctl enable mongod
  1. 编写Dockerfile制作Web应用系统Nginx镜像,生成镜像名为mall-nginx:v1.1,并推送其到私有仓库。具体要求如下: (2分)

    • 基于centos:7.5.1804基础镜像;
    • 指定作者为Chinaskill;
    • 安装Nginx服务,并配置反向代理;
    • 暴露80端口;
新建nginx文件夹:
生成前端文件:
[root@master mall-swarm]# tar -zxvf mall-admin-web.tar.gz
[root@master mall-swarm]# cd mall-admin-web
[root@master mall-admin-web]# vi config/prod.env.js
‘use strict’
module.exports = {

  NODE_ENV: ‘”production”‘,

  BASE_API: ‘”http://10.24.2.156:8201/mall-admin”‘  #修改为本机IP

}
使用命令进行打包,生成dist目录:
[root@master mall-admin-web]# cd ../
[root@master mall-swarm]# tar zxvf node-v6.17.1-linux-x64.tar.gz
[root@master mall-swarm]# mv node-v6.17.1-linux-x64 /usr/local/node
[root@master mall-swarm]# vi /etc/profile
export NODE_HOME=/usr/local/node
export PATH=$NODE_HOME/bin:$PATH
[root@master mall-swarm]# source /etc/profile
[root@master mall-swarm]# node -v
v6.17.1
[root@master mall-swarm]# npm -v
3.10.10
[root@master mall-swarm]# cd mall-admin-web
[root@master mall-admin-web]# npm run build
[root@master mall-admin-web]# mv dist/ ../
[root@master mall-admin-web]# cd ../
编写Dockerfile:
vi dockerfile

FROM centos:centos7.5.1804
MAINTAINER Chinaskill
RUN rm -rf /etc/yum.repos.d/*
COPY ftp.repo /etc/yum.repos.d/ 
RUN yum -y install nginx
COPY dist/ /usr/share/nginx/html/
EXPOSE 80
CMD [“nginx”,”-g”,”daemon off;”]

docker build -t mall-nginx:v1.1 .
  1. 创建mall.yaml文件,使用上述镜像编排部署ChinaSkillsMall应用系统。(2分)

导入镜像:

[root@master mall-swarm]# docker load -i images/mall_mall-admin_1.0-SNAPSHOT.tar

[root@master mall-swarm]# docker load -i images/mall_mall-auth_1.0-SNAPSHOT.tar

[root@master mall-swarm]# docker load -i images/mall_mall-gateway_1.0-SNAPSHOT.tar

vi docker-compose.yaml

\[ version: "3.3" services: redis.mall: container_name: mall-redis image: mall-redis:v1.1 ports: - 6379:6379 rabbitmq: container_name: mall-rabbitmq image: mall-rabbitmq:v1.1 ports: - 5672:5672 - 15672:15672 nginx.mall: container_name: mall-nginx image: mall-nginx:v1.1 ports: - 8888:80 mall-admin: image: mall/mall-admin:1.0-SNAPSHOT container_name: mall-admin ports: - 8080:8080 mall-gateway: image: mall/mall-gateway:1.0-SNAPSHOT container_name: mall-gateway ports: - 8201:8201 mall-auth: image: mall/mall-auth:1.0-SNAPSHOT container_name: mall-auth ports: - 8401:8401 \]
version: ‘3’
services:
  mysql:
    image: mall-mysql:v1.1
    container_name: mall-mysql
    restart: always
    ports:
      – 3306:3306
  redis:
    image: mall-redis:v1.1
    container_name: redis
    ports:
      – 6379:6379
  nginx:
    image: mall-nginx:v1.1
    container_name: nginx
    ports:
      – 8888:80
  rabbitmq:
    image: mall-rabbit:v1.1
    container_name: rabbitmq
    ports:
      – 5672:5672
      – 15672:15672
  nacos-registry:
    image: mall-nacos:v1.1
    container_name: nacos-registry
    ports:
      – 8848:8848
  mall-admin:
    image: mall/mall-admin:1.0-SNAPSHOT
    container_name: mall-admin
    ports:
      – 8080:8080
    links:
      – mysql:db
  mall-gateway:
    image: mall/mall-gateway:1.0-SNAPSHOT
    container_name: mall-gateway
    ports:
      – 8201:8201
    links:
      – redis:redis
      – nacos-registry:nacos-registry
  mall-auth:
    image: mall/mall-auth:1.0-SNAPSHOT
    container_name: mall-auth
    ports:
      – 8401:8401
    links:
      – nacos-registry:nacos-registry

ChinaSkillsMall-2(Mall商城)

云梦公司开发了一套基于SpringBoot+MyBatis 微服务架构的ChinaSkillsMall 电商系统, 并实现全容器化部署,ChinaSkillsMall 电商应用系统架构如图 1 所示,系统说明如表 2 所示。

img

模块 说明
mall-monitor 监控中心
mall-gateway 微服务网关
mall-auth 认证中心
mall-admin 商城后台服务
mall-portal 商城前台服务

将 MariaDB 数据库组件、Redis 消息组件、RabbitMQ 消息组件、Nacos-Registry 注册中心服务组件和前端 Nginx 组件按照要求进行容器化。

[root@master mall-swarm]# cat > ftp.repo<< EOF
[centos]
name=centos
baseurl=ftp://192.168.100.101/centos
gpgcheck=0
enable=1
[gpmall]
name=mall
baseurl=ftp://192.168.100.101/mall-swarm/mall-repo 
enabled=1
gpgcheck=0
EOF
  1. 在 master 节 点 上 编 写 /root/mall-swarm/Dockerfile-mariadb 文 件 构 建chinaskillmall-mariadb:v1.1 镜像,具体要求为

    • 基础镜像:centos:centos7.5.1804;
    • 作者:Chinaskill;
    • 安装并初始化 mariadb,密码:root;
    • 设置数据库编码为UTF-8;
    • 开放端口:3306
    • 设置 mariadb 开机自启。
    [root@master mall-swarm]# vim init.sh 
    #!/bin/bash
    mysql_install_db --user=root
    mysqld_safe --user=root &
    sleep 8
    mysqladmin -u root password 'root'
    mysql -uroot -proot -e "grant all on *.* to 'reader'@'%' identified by '123456';flush privileges;"
    mysql -uroot -proot -e "create database mall;use mall;source /opt/mall.sql;"
    
    [root@master mall-swarm]# vim Dockerfile-mariadb 
    FROM centos:centos7.5.1804
    MAINTAINER Chinaskill
    RUN rm -rf /etc/yum.repos.d/*
    ADD ftp.repo /etc/yum.repos.d/
    ADD mall.sql init.sh /opt/
    ENV LC_ALL en_US.UTF-8
    RUN yum install -y mariadb-server && bash /opt/init.sh
    EXPOSE 3306
    CMD ["mysqld_safe","--user=root"]
    
    docker build -t chinaskillmall-mariadb:v1.1 -f Dockerfile-mariadb .
    
  2. 在master 节 点 上 编 写 /root/mall-swarm/Dockerfile-redis 文 件 构 建chinaskillmall-redis:v1.1 镜像,具体要求为

    • 基础镜像:centos:centos7.5.1804;
    • 作者:Chinaskill;
    • 安装 redis 服务;
    • 修改配置文件中的bind 127.0.0.1 为 bind 0.0.0.0;
    • 设置 redis 免密,并关闭保护模式;
    • 开放端口:6379;
    • 设置服务开机自启。
    [root@master mall-swarm]# vim Dockerfile-redis 
    FROM centos:centos7.5.1804
    MAINTAINER Chinaskill
    RUN rm -rf /etc/yum.repos.d/*
    ADD ftp.repo /etc/yum.repos.d/
    RUN yum install -y install redis
    RUN sed -i 's/127.0.0.1/0.0.0.0/g' /etc/redis.conf && \
        sed -i 's/protected-mode yes/protected-mode no/g' /etc/redis.conf
    EXPOSE 6379
    CMD ["/usr/bin/redis-server","/etc/redis.conf"]
    
    docker build -t chinaskillmall-redis:v1.1 -f Dockerfile-redis .
    
  3. 在 master节点上编 写 /root/mall-swarm/Dockerfile-nacos 文 件构 建chinaskillmall-nacos:v1.1 镜像,具体要求为

    • 基础镜像:centos:centos7.5.1804;
    • 作者:Chinaskill;
    • 安装 jdk 工具和 nacos-server 工具;
    • 设置nacos 服务开机自启。
    [root@master mall-swarm]# vim nacos-start.sh 
    #!/bin/bash
    /usr/local/bin/nacos/bin/startup.sh -m standalone
    tail -f /usr/local/bin/nacos/logs/start.out
    
    [root@master mall-swarm]# vim Dockerfile-nacos 
    FROM centos:centos7.5.1804
    MAINTAINER Chinaskill
    ADD nacos-start.sh /opt/
    ADD jdk-8u121-linux-x64.tar.gz nacos-server-1.1.0.tar.gz /usr/local/bin/
    ENV JAVA_HOME /usr/local/bin/jdk1.8.0_121
    EXPOSE 8848
    CMD ["/bin/bash","/opt/nacos-start.sh"]
    
    docker build -t chinaskillmall-nacos:v1.1 -f Dockerfile-nacos .
    
  4. 在 master 节点上安装 node 工具,对 mall-admin-web 项目进行打包,然后编写/root/mall-swarm/Dockerfile-nginx 文件构建 chinaskillmall-nginx:v1.1 镜像,具体要求为

    • 基础镜像:centos:centos7.5.1804;
    • 作者:Chinaskill;
    • 安装nginx 服务;
    • 将 mall-admin-web 项目打包后的文件拷贝到/usr/share/nginx/html 目录下;
    • 设置nginx 服务开机自启。
    [root@master mall-swarm]# tar -zxvf mall-admin-web.tar.gz 
    [root@master mall-swarm]# vim mall-admin-web/config/prod.env.js 
    'use strict'
    module.exports = {
      NODE_ENV: '"production"',
      BASE_API: '"http://10.0.0.10:8201/mall-admin"'
    }
    [root@master mall-swarm]# tar -zxvf node-v6.17.1-linux-x64.tar.gz -C /usr/local/
    mv /usr/local/node-v6.17.1-linux-x64 /usr/local/node
    [root@master mall-swarm]# vim /etc/profile
    export NODE_HOME=/usr/local/node 
    export PATH=$NODE_HOME/bin:$PATH
    [root@master mall-swarm]# source /etc/profile
    [root@master mall-swarm]# node -v;npm -v
    [root@master mall-swarm]# cd mall-admin-web
    [root@master mall-admin-web]# npm run build
    [root@master mall-admin-web]# mv dist/ ../;cd ..
    
    [root@master mall-swarm]# vim Dockerfile-nginx
    FROM centos:centos7.5.1804
    MAINTAINER Chinaskill
    RUN rm -rf /etc/yum.repos.d/*
    ADD ftp.repo /etc/yum.repos.d/
    RUN yum -y install nginx
    ADD dist/ /usr/share/nginx/html/
    EXPOSE 80
    CMD ["nginx","-g","daemon off;"]
    
    docker build -t chinaskillmall-nginx:v1.1  -f Dockerfile-nginx  .
    
  5. 在 master 节点上编写/root/mall-swarm/docker-compose.yaml 文件,具体要求为

    • 容器 1 名称:chinaskillmall-admin;镜像:mall/mall-admin:1.0-SNAPSHOT;端口映射:8080:8080;
    • 容器 2 名称: chinaskillmall-auth;镜像:mall/mall-auth:1.0-SNAPSHOT;端口映射:8401:8401;
    • 容器 3 名称:chinaskillmall-gateway;镜像:mall/mall-gateway:1.0-SNAPSHOT;端口映射:8201:8201;
    • 容器 4 名称:chinaskillmall-mysql;镜像:chinaskillmall-mariadb:v1.1;端口映射:3306:3306;
    • 容器 5 名称:chinaskillmall-nacos;镜像:chinaskillmall-nacos:v1.1;端口映射:8848:8848;
    • 容器 6 名称:chinaskillmall-nginx;镜像:chinaskillmall-nginx:v1.1;端口映射:8888:80;
    • 容器 7 名称:chinaskillmall-redis;镜像:chinaskillmall-redis:v1.1;端口映射:6379:6379。
    [root@master mall-swarm]# 
    docker load -i images/mall_mall-admin_1.0-SNAPSHOT.tar &&
    docker load -i images/mall_mall-auth_1.0-SNAPSHOT.tar &&
    docker load -i images/mall_mall-gateway_1.0-SNAPSHOT.tar 
    
    [root@master mall-swarm]# vim docker-compose.yaml
    version: "3"
    services:
      mysql:
        container_name: mysql
        image: chinaskillmall-mariadb:v1.1
        restart: always
        ports:
        - 3306:3306
      redis:
        container_name: mall-redis
        image: chinaskillmall-redis:v1.1
        ports:
        - 6379:6379
      nginx:
        container_name: mall-nginx
        image: chinaskillmall-nginx:v1.1
        ports:
        - 8888:80
      nacos-registry:
        container_name: nacos-registry
        image: chinaskillmall-nacos:v1.1
        ports:
        - 8848:8848
      mall-admin:
        container_name: mall-admin
        image: mall/mall-admin:1.0-SNAPSHOT
        ports:
        - 8080:8080
        links:
        - mysql:db
      mall-gateway:
        container_name: mall-gateway
        image: mall/mall-gateway:1.0-SNAPSHOT
        ports:
        - 8201:8201
        links:
        - redis:redis
        - nacos-registry:nacos-registry
      mall-auth:
        container_name: mall-auth
        image: mall/mall-auth:1.0-SNAPSHOT
        ports:
        - 8401:8401
        links:
        - nacos-registry:nacos-registry
    

admin密码是 macro123

Creating network "docker_default" with the default driver
ERROR: Failed to Setup IP tables: Unable to enable SKIP DNAT rule:  (iptables failed: iptables --wait -t nat -I DOCKER -i br-d0136fb5e044 -j RETURN: iptables: No chain/target/match by that name.
 (exit status 1))

解决方案:https://github.com/wodby/docker4drupal/issues/211#issuecomment-451085587

将docker重新启动即可

systemctl restart docker

ChinaSkillsMall-3(GZ-2021040/4.5)

将云梦公司开发的基于微服务架构的web应用系统ChinaSkillsMall重新实现全容器化部署,原微服务架构的Web应用系统各模块功能及系统架构如下:

模块 使用技术 备注
mall.sql MySQL 网站的数据库
dist目录 Nginx 网站的前端项目
mall-shopping web项目 8081端口,商品/购物车/首页渲染等交互
mall-user 8082端口,提供用户相关的交互,如登录、注册、个人中心等
user-provider 后端服务 提供用户相关服务
shopping-provider 提供购物车、推荐商品、商品等服务

img

请将MySQL数据库组件、Redis组件、Kafka组件、Zookeeper组件按照要求进行容器化。

  1. 编写Dockerfile制作数据库MySQL镜像,生成镜像名为mall-mysql:v1.1,并推送其到私有仓库。具体要求如下: (2分)

    • 基于centos:7.5.1804基础镜像;

    • 指定作者为Chinaskill;

    • 安装mariadb数据库,并使用root用户进行数据库初始化;设置数据库支持UTF-8编码;设定root用户的密码为123456,并给root用户赋予远程访问的权限;

    • 创建数据库mall并使用mall数据库,导入malldb.sql;

    • 设置服务自启动。

  2. 编写Dockerfile制作Redis镜像,生成镜像名为mall-redis:v1.1,并推送其到私有仓库。具体要求如下:(2分)

    • 基于centos:centos7.5.1804基础镜像;

    • 指定作者为Chinaskill;

    • 修改配置文件中的bind 127.0.0.1为bind 0.0.0.0;

    • 设置Redis免密,并关闭保护模式;

    • 开放端口:6379;

    • 设置服务开机自启。

  3. 编写Dockerfile制作Kafka镜像,生成镜像名为mall-kafka:v1.1,并推送其到私有仓库。具体要求如下:(2分)

    • 基于centos:centos7.5.1804基础镜像;

    • 指定作者为Chinaskill;

    • 开放端口:9092;

    • 设置服务开机自启。

  4. 编写Dockerfile制作ZooKeeper镜像,生成镜像名为mall-zookeeper:v1.1,并推送其到私有仓库。具体要求如下: (2分)

    • 基于centos:7.5.1804基础镜像;

    • 指定作者为Chinaskill;

    • 开放端口:2181;

    • 设置服务开机自启。

  5. 创建mall.yaml文件,使用上述镜像编排部署ChinaSkillsMall应用系统。(2分)

ChinaSkillsMall-4(GZ-2021040/5.4)

4.5+读写分离

将云梦公司开发的基于微服务架构的web应用系统ChinaSkillsMall实现全容器化部署,原微服务架构的Web应用系统各模块功能及系统架构如下:

模块 使用技术 备注
mall.sql Mysql 网站的数据库
dist目录 Nginx 网站的前端项目
mall-shopping web项目 8081端口,商品/购物车/首页渲染等交互
mall-user 8082端口,提供用户相关的交互,如登录、注册、个人中心等
user-provider 后端服务 提供用户相关服务
shopping-provider 提供购物车、推荐商品、商品等服务

img

请将MySQL数据库组件、Redis组件、Kafka组件、Zookeeper组件按照要求进行容器化。

  1. 编写Dockerfile制作数据库MySQL镜像,生成镜像名为mall-mysql:v1.1,并基于该镜像编排部署MySQL + MyCat集群实现数据库读写分离。 (2分)

  2. 编写Dockerfile制作Redis镜像,生成镜像名为mall-redis:v1.1,并推送其到私有仓库。具体要求如下:(2分)

    • 基于centos7.5.1804基础镜像;

    • 指定作者为Chinaskill;

    • 修改配置文件中的bind 127.0.0.1为bind 0.0.0.0;

    • 设置Redis免密,并关闭保护模式;

    • 开放端口:6379;

    • 设置服务开机自启。

  3. 编写Dockerfile制作Kafka镜像,生成镜像名为mall-kafka:v1.1,并推送其到私有仓库。具体要求如下:(2分)

    • 基于centos7.5.1804基础镜像;

    • 指定作者为Chinaskill;

    • 开放端口:9092;

    • 设置服务开机自启。

  4. 编写Dockerfile制作ZooKeeper镜像,生成镜像名为mall-zookeeper:v1.1,并推送其到私有仓库。具体要求如下: (2分)

    • 基于centos:7.5.1804基础镜像;

    • 指定作者为Chinaskill;

    • 开放端口:2181;

    • 设置服务开机自启。

  5. 创建mall.yaml文件,使用上述镜像编排部署ChinaSkillsMall应集群应用商城。(2分)

ChinaskillsMall-5(GZ-2021040/6T)

将该公司开发的基于微服务架构的web应用系统Chinaskillmall实现全容器化部署,Chinaskillmall应用系统架构图如下:

img

模块 使用技术 备注
gpmall.sql MySQL 网站的数据库
dist目录 Nginx 网站的前端项目
gpmall-shopping web项目 8081端口,商品/购物车/首页渲染等交互
gpmall-user 8082端口,提供用户相关的交互,如登录、注册、个人中心等
user-provider 后端服务 提供用户相关服务
shopping-provider 提供购物车、推荐商品、商品等服务

请将MySQL数据库组件、Kafka组件和Chinaskillmall前端Nginx组件按照要求进行容器化,其它组件已经实现容器化,直接从仓库中拉取镜像运行容器即可(chinaskillmall-redis:v1.1、chinaskillmall-zookeeper:v1.1)。

  1. 编写Dockerfile制作数据库MySQL镜像,生成镜像名为chinaskillmall-mysql:v1.1,并推送其到私有仓库。具体要求如下:

    • 基于centos:7.5.1804基础镜像;

    • 指定作者为Chinaskill;

    • 安装mariadb数据库,并使用root用户进行数据库初始化;设置数据库支持UTF-8编码;设定root用户的密码为123456,并给root用户赋予远程访问的权限;

    • 创建数据库chinaskillmall并使用chinaskillmall数据库,导入chinaskillmalldb.sql;

    • 设置服务自启动。

  2. 编写Dockerfile制作Kafka镜像,生成镜像名为chinaskillmall-kafka:v1.1,并推送其到私有仓库。具体要求如下:

    • 基于centos:centos7.5.1804基础镜像;

    • 指定作者为Chinaskill;

    • 开放端口:9092;

    • 设置服务开机自启。

  3. 编写Dockerfile制作Web应用系统Nginx镜像,生成镜像名为chinaskillmall-nginx:v1.1,并推送其到私有仓库。具体要求如下:

    • 基于centos:7.5.1804基础镜像;

    • 指定作者为Chinaskill;

    • 安装Nginx服务,将提供的dist目录传到镜像内,并将dist目录内的前端文件复制到nginx的工作目录;

    • 暴露80端口;

    • 设置服务自启动。

  4. 创建chinaskillmall.yaml文件,使用上述镜像编排部署Chinaskillmall应用系统。

ChinaSkillsMall-6(GZ-2021040/7T)

将该公司开发的基于微服务架构的web应用系统Chinaskillmall实现全容器化部署,Chinaskillmall应用系统架构图如下:

img

模块 使用技术 备注
gpmall.sql Mysql 网站的数据库
dist目录 Nginx 网站的前端项目
gpmall-shopping web项目 8081端口,商品/购物车/首页渲染等交互
gpmall-user 8082端口,提供用户相关的交互,如登录、注册、个人中心等
user-provider 后端服务 提供用户相关服务
shopping-provider 提供购物车、推荐商品、商品等服务

请将MySQL数据库组件、Redis组件和Zookeeper组件按照要求进行容器化,其它组件已经实现容器化,直接从仓库中拉取镜像运行容器即可(chinaskillmall-kafka:v1.1、chinaskillmall-nginx:v1.1)。

  1. 编写Dockerfile制作数据库MySQL镜像,生成镜像名为chinaskillmall-mysql:v1.1,并推送其到私有仓库。具体要求如下:

    • 基于centos:7.5.1804基础镜像;

    • 指定作者为Chinaskill;

    • 安装mariadb数据库,并使用root用户进行数据库初始化;设置数据库支持UTF-8编码;设定root用户的密码为123456,并给root用户赋予远程访问的权限;

    • 创建数据库chinaskillmall并使用chinaskillmall数据库,导入chinaskillmalldb.sql;

    • 开放3306端口;

    • 设置服务自启动。

  2. 编写Dockerfile制作Redis镜像,生成镜像名为chinaskillmall-redis:v1.1,并推送其到私有仓库。具体要求如下:

    • 基于centos:centos7.5.1804基础镜像;

    • 指定作者为Chinaskill;

    • 修改配置文件中的bind 127.0.0.1为bind 0.0.0.0;

    • 设置Redis免密,并关闭保护模式;

    • 开放端口:6379;

    • 设置服务开机自启。

  3. 编写Dockerfile制作ZooKeeper镜像,生成镜像名为chinaskillmall-zookeeper:v1.1,并推送其到私有仓库。具体要求如下:

    • 基于centos:7.5.1804基础镜像;

    • 指定作者为Chinaskill;

    • 开放端口:2181;

    • 设置服务开机自启。

  4. 创建chinaskillmall.yaml文件,使用上述镜像编排部署Chinaskillmall应用系统。

ChinaSkillsMall-7(GZ-2021040/8T)

将该公司开发的基于微服务架构的web应用系统Chinaskillmall实现全容器化部署,Chinaskillmall应用系统架构图如下:

img

模块 使用技术 备注
gpmall.sql Mysql 网站的数据库
dist目录 Nginx 网站的前端项目
gpmall-shopping web项目 8081端口,商品/购物车/首页渲染等交互
gpmall-user 8082端口,提供用户相关的交互,如登录、注册、个人中心等
user-provider 后端服务 提供用户相关服务
shopping-provider 提供购物车、推荐商品、商品等服务

请将Redis组件、ZooKeeper组件和Kafka组件按照要求进行容器化,其它组件已经实现容器化,直接从仓库中拉取镜像运行容器即可(chinaskillmall-mysql:v1.1、chinaskillmall-nginx:v1.1)。

  1. 编写Dockerfile制作Redis镜像,生成镜像名为chinaskillmall-redis:v1.1,并推送其到私有仓库。具体要求如下:

    • 基于centos:centos7.5.1804基础镜像;

    • 指定作者为Chinaskill;

    • 修改配置文件中的bind 127.0.0.1为bind 0.0.0.0;

    • 设置Redis免密,并关闭保护模式;

    • 开放端口:6379;

    • 设置服务开机自启。

  2. 编写Dockerfile制作ZooKeeper镜像,生成镜像名为chinaskillmall-zookeeper:v1.1,并推送其到私有仓库。具体要求如下:

    • 基于centos:7.5.1804基础镜像;

    • 指定作者为Chinaskill;

    • 开放端口:2181;

    • 设置服务开机自启。

  3. 编写Dockerfile制作Kafka镜像,生成镜像名为chinaskillmall-kafka:v1.1,并推送其到私有仓库。具体要求如下:

    • 基于centos:centos7.5.1804基础镜像;

    • 指定作者为Chinaskill;

    • 开放端口:9092;

    • 设置服务开机自启。

  4. 创建chinaskillmall.yaml文件,使用上述镜像编排部署Chinaskillmall应用系统。

ChinaSkillsMall-8(GZ-2021040/9T)

将该公司开发的基于微服务架构的web应用系统Chinaskillmall实现全容器化部署,Chinaskillmall应用系统架构图如下:

img

模块 使用技术 备注
gpmall.sql Mysql 网站的数据库
dist目录 Nginx 网站的前端项目
gpmall-shopping web项目 8081端口,商品/购物车/首页渲染等交互
gpmall-user 8082端口,提供用户相关的交互,如登录、注册、个人中心等
user-provider 后端服务 提供用户相关服务
shopping-provider 提供购物车、推荐商品、商品等服务

请将MySQL数据库组件、Kafka组件和ZooKeeper组件按照要求进行容器化,其它组件已经实现容器化,直接从仓库中拉取镜像运行容器即可(chinaskillmall-redis:v1.1、chinaskillmall-nginx:v1.1)。

  1. 编写Dockerfile制作数据库MySQL镜像,生成镜像名为chinaskillmall-mysql:v1.1,并推送其到私有仓库。具体要求如下:

    • 基于centos:7.5.1804基础镜像;

    • 指定作者为Chinaskill;

    • 安装mariadb数据库,并使用root用户进行数据库初始化;设置数据库支持UTF-8编码;设定root用户的密码为123456,并给root用户赋予远程访问的权限;

    • 创建数据库chinaskillmall并使用chinaskillmall数据库,导入chinaskillmalldb.sql;

    • 开放3306端口;

    • 设置服务自启动。

  2. 编写Dockerfile制作ZooKeeper镜像,生成镜像名为chinaskillmall-zookeeper:v1.1,并推送其到私有仓库。具体要求如下:

    • 基于centos:7.5.1804基础镜像;

    • 指定作者为Chinaskill;

    • 开放端口:2181;

    • 设置服务开机自启。

  3. 编写Dockerfile制作Kafka镜像,生成镜像名为chinaskillmall-kafka:v1.1,并推送其到私有仓库。具体要求如下:

    • 基于centos:centos7.5.1804基础镜像;

    • 指定作者为Chinaskill;

    • 开放端口:9092;

    • 设置服务开机自启。

  4. 创建chinaskillmall.yaml文件,使用上述镜像编排部署Chinaskillmall应用系统。

ChinaSkillsSA 情绪分析(GZ-2021040/3)

将云梦公司开发的基于微服务架构的ChinaSkillsSA智能文本的情绪分析(Sentiment Analysis)的系统实现全容器化部署,ChinaSkillsSA智能分析系统应用系统架构如图1所示,ChinaSkillsSA智能分析系统说明如表2所示。

img

图1 ChinaSkillsSA智能分析系统架构图

表2 ChinaSkillsSA智能分析系统说明

模块 使用技术 说明
sa-frontend Node.js 前端项目,使用 Vue.js 开发。
sa-logic Python Flask 输入文本句子的情绪分析微服务,使用 Python 开发。
sa-webapp Spring Cloud Web服务,处理 sa-frontend 请求,调用 sa-logic 微服务,使用Java语言开发。

将sa-frontend组件、sa-logic组件和sa-webapp组件按照要求进行容器化。

准备工作 tar -xf Sentiment-Analyzer.tar.gz -C /opt

vi ftp.repo

\[ cat > ftp.repo << EOF [centos] name=centos baseurl=ftp://10.1.46.185/centos gpgcheck=0 enable=1 [gpmall] name=gpmall baseurl=ftp://10.1.46.185/sentiment-analyzer/sa-repo enabled=1 gpgcheck=0 EOF \]
[centos]
name=centos
baseurl=ftp://192.168.100.101/centos
gpgcheck=0
enable=1
[gpmall]
name=gpmall
baseurl=ftp://192.168.100.101/sentiment-analyzer/sa-repo
enabled=1
gpgcheck=0

1.在master节点上编写/root/sentiment-analyzer/Dockerfile-logic文件构建chinaskillsa-logic:v1.0镜像,具体要求为

(1)基础镜像:centos:centos7.5.1804;

(2)作者:Chinaskill;

(3)安装Pyhton3;

(4)使用pip安装提供的离线模块包。

完成后构建镜像,并提交master节点的用户名、密码和IP到答题框。

mkdir sentiment-analyzer && cd sentiment-analyzer && vi Dockerfile-logic

FROM centos:centos7.5.1804
MAINTAINER Chinaskill
RUN rm -rf /etc/yum.repos.d/*
ADD ftp.repo /etc/yum.repos.d/
WORKDIR /app
ADD python-packages.tar.gz .
COPY app.py .
COPY requirements.txt .
RUN yum -y install python3* && pip3 install -r requirements.txt --no-index --find-links=python-packages
EXPOSE 5000
CMD ["python3","app.py"]

cp  -frv /opt/sentiment-analyzer/sa-logic/* /root/sentiment-analyzer/ 
docker build -t chinaskillsa-logic:v1.0 -f  Dockerfile-logic .

2.在master节点上编写/root/sentiment-analyzer/Dockerfile-webapp文件构建chinaskillsa-webapp:v1.1镜像,具体要求为

(1)基础镜像:centos:centos7.5.1804;

(2)作者:Chinaskill;

(3)安装go工具;

(4)使用go构建webapp项目;

(5)开放8080端口。

完成后构建镜像,并提交master节点的用户名、密码和IP到答题框。

vi Dockerfile-webapp

FROM centos:centos7.5.1804
MAINTAINER Chinaskill
RUN rm -rf /etc/yum.repos.d/*
ADD ftp.repo /etc/yum.repos.d/
WORKDIR /app
ADD go-packages.tar.gz .
RUN yum -y install go && mv go /root/ && go mod download && go build -o webapp .
EXPOSE 8080
CMD ["./webapp"]

cp  /opt/sentiment-analyzer/sa-webapp/go-packages.tar.gz /root/sentiment-analyzer/ 

docker  build  -t    chinaskillsa-webapp:v1.1 -f Dockerfile-webapp .

3.在master节点上编写/root/sentiment-analyzer/Dockerfile-frontend文件构建chinaskillsa-frontend:v1.1镜像,具体要求为

(1)基础镜像:centos:centos7.5.1804;

(2)作者:Chinaskill;

(3)安装nodejs工具及nginx;

(4)开放端口:80;

(5)设置nginx开机自启。

完成后构建镜像,并提交master节点的用户名、密码和IP到答题框。

vi Dockerfile-frontend

FROM centos:centos7.5.1804
MAINTAINER Chinaskill
RUN rm -rf /etc/yum.repos.d/*
ADD ftp.repo /etc/yum.repos.d/
ENV VUE_APP_API_HOST http://192.168.100.101:9002
WORKDIR /app
ADD sa-frontend.tar.gz .
RUN  yum -y install nginx nodejs && rm -rf /usr/share/nginx/html/* \
&&   npm run build && mv dist/* /usr/share/nginx/html/
EXPOSE 80
CMD ["nginx","-g","daemon off;"]

cp /opt/sentiment-analyzer/sa-frontend/sa-frontend.tar.gz /root/sentiment-analyzer/
docker build -t chinaskillsa-frontend:v1.1 -f Dockerfile-frontend .

4.在master节点上编写/root/sentiment-analyzer/docker-compose.yaml文件,具体要求为

(1)容器1名称:sa-logic;镜像:chinaskillsa-logic:v1.1;端口映射:9001:5000;

(2)容器2名称:sa-webapp;镜像:chinaskillsa-webapp:v1.1;端口映射:9002:8080;

(3)容器3名称:sa-frontend;镜像:chinaskill-frontend:v1.1;端口映射:9003:80。

完成后编排部署情感分析系统,并能对输入的语句进行情感分析。然后提交master节点的用户名、密码和IP到答题框。

vi docker-compose.yaml

version: "3"
services:
  logic:
    container_name: sa-logic
    image: chinaskillsa-logic:v1.0
    ports:
    - "9001:5000" 
  webapp:
    depends_on:
    - logic
    container_name: sa-webapp
    image: chinaskillsa-webapp:v1.1
    ports:
    - "9002:8080"
    environment: 
      API_HOST: http://sa-logic:5000
  frontend:
    container_name: sa-frontend
    image: chinaskillsa-frontend:v1.1
    ports:
    - "9003:80"

docker-compose up -d

ChinaSkillsActionApp(GZ-2021040/2)

将云梦公司开发的基于微服务架构的ChinaSkillsActionApp活动管理微信小程序平台实现全容器化部署,ChinaSkillsActionApp应用系统架构图如下:

模块 使用技术 说明
action_frontend Node.js 活动管理的前端项目微服务,使用 uni-app 开发。
action_management Spring Cloud 活动管理的主要逻辑,基于Java实现的Spring Cloud微服务。
action_admin Spring Cloud 活动管理的后台管理,基于Java实现的Spring Cloud微服务。

image-20220113232036759

请将MySQL数据库组件、Redis组件和Zookeeper组件按照要求进行容器化。

  1. 编写Dockerfile制作数据库MySQL镜像,生成镜像名为action-app-mysql:v1.1,并推送其到私有仓库。具体要求如下: (2分)

    • 基于centos:7.5.1804基础镜像;
    • 指定作者为Chinaskill;
    • 安装mariadb数据库,并使用root用户进行数据库初始化;设置数据库支持UTF-8编码;设定root用户的密码为123456,并给root用户赋予远程访问的权限;
    • 创建数据库action-app并使用applet数据库,导入action-appdb.sql;
    • 开放3306端口;
    • 设置服务自启动。
cat > init.sh <<EOF
#!/bin/bash
mysql_install_db --user=root
mysqld_safe --user=root &
sleep 8
mysqladmin -u root password 'root'
mysql -uroot -proot -e "grant all on *.* to 'reader'@'%' identified by '123456';flush privileges;"
mysql -uroot -proot -e "create database action-app;use action-app;source /opt/action-appdb.sql;"
EOF

cat > dockerfile-mysql <<EOF
FROM centos:centos7.5.1804
MAINTAINER chinaskill
RUN rm -rf /etc/yum.repos.d/*
ADD ftp.repo /etc/yum.repos.d/
ADD action-appdb.sql init.sh /opt 
ENV LC_ALL en_US.UTF-8
RUN yum install -y mariadb-server && bash /opt/init.sh
EXPOSE 3306
CMD ["mysqld_safe","--user=root"]
EOF
 docker build -t action-app-mysql:v1.1 -f dockerfile-mysql .
 docker tag action-app-mysql:v1.1 192.168.100.101/library/action-app-mysql:v1.1 
 docker push 192.168.100.101/library/action-app-mysql:v1.1
  1. 编写Dockerfile制作Redis镜像,生成镜像名为action-app-redis:v1.1,并推送其到私有仓库。具体要求如下:(2分)

    • 基于centos:centos7.5.1804基础镜像;
    • 指定作者为Chinaskill;
    • 修改配置文件中的bind 127.0.0.1为bind 0.0.0.0;
    • 设置Redis免密,并关闭保护模式;
    • 开放端口:6379;
    • 设置服务开机自启。
cat > dockerfile-redis <<EOF
FROM centos:centos7.5.1804
MAINTAINER chinaskill
RUN rm -rf /etc/yum.repos.d/*
ADD ftp.repo /etc/yum.repos.d/
RUN yum install -y redis*
RUN sed -i "s/bind 127.0.0.1/bind 0.0.0.0/g" /etc/redis.conf && sed -i "s/protected-mode yes/protected-mode no/g" /etc/redis.conf
EXPOSE 6379
CMD ["redis-server","/etc/redis.conf"]
EOF

docker build -t action-app-redis:v1.1 -f dockerfile-redis .
docker tag action-app-redis:v1.1 192.168.100.101/library/action-app-redis:v1.1 
docker push 192.168.100.101/library/action-app-redis:v1.1
  1. 编写Dockerfile制作ZooKeeper镜像,生成镜像名为action-app-zookeeper:v1.1,并推送其到私有仓库。具体要求如下: (2分)

    • 基于centos:7.5.1804基础镜像;
    • 指定作者为Chinaskill;
    • 开放端口:2181;
    • 设置服务开机自启。
cat > dockerfile-zookeeper <<EOF
FROM centos:centos7.5.1804
MAINTAINER Chinaskill 
RUN rm -rf /etc/yum.repos.d/*
COPY ftp.repo /etc/yum.repos.d/ftp.repo
EXPOSE 2181
ADD zookeeper-3.4.14.tar.gz /opt
RUN yum -y install java-1.8.0-openjdk java-1.8.0-openjdk-devel \
 && mv /opt/zookeeper-3.4.14/conf/zoo_sample.cfg /opt/zookeeper-3.4.14/conf/zoo.cfg
CMD ["sh","-c","/opt/zookeeper-3.4.14/bin/zkServer.sh start && tail -f /etc/shadow"] 
EOF

docker build -t action-app-zookeeper:v1.1 -f dockerfile-zookeeper  .
docker tag action-app-zookeeper:v1.1 192.168.100.101/library/action-app-zookeeper:v1.1 
docker push 192.168.100.101/library/action-app-zookeeper:v1.1
  1. 创建action_app.yaml文件,使用上述镜像编排部署ChinaSkillsActionApp应用系统。(4分)
version: "3.3"
services:
  mysql.mall:
    container_name: mall-mysql
    image: action-app-mysql:v1.1
    ports:
    - 13306:3306
  redis.mall:
    container_name: mall-redis
    image: action-app-redis:v1.1
    ports:
    - 16379:6379
  zookeeper.mall:
    container_name: mall-zookeeper
    image: action-app-zookeeper:v1.1
    ports:
    - 12181:2181
  kafka.mall:
    container_name: mall-kafka
    image: chinaskill-kafka:v1.1
    ports:
    - 19092:9092
  nginx-mall:
    depends_on:
      - mysql.mall
      - redis.mall
      - zookeeper.mall
      - kafka.mall
    container_name: mall-nginx
    image: chinaskill-nginx:v1.1
    ports:
    - 83:80
    - 443:443
    command: ["sh","-c","/root/setup.sh && nginx && tail -f /etc/shadow"]  

GPMall商城(GZ-2021040/10)

模块 使用技术 备注
gpmall.sql Mysql 网站的数据库
dist目录 Nginx 网站的前端项目
gpmall-shopping web项目 8081端口,商品/购物车/首页渲染等交互
gpmall-user 8082端口,提供用户相关的交互,如登录、注册、个人中心等
user-provider 后端服务 提供用户相关服务
shopping-provider 提供购物车、推荐商品、商品等服务

image-20220323103513284

准备工作 将gpmall-single.tar.gz上传至服务器,将文件解压到/opt

tar -zxvf gpmall-single.tar.gz
rm -rf gpmall-single.tar.gz && mv gpmall-single /opt
配置yum源
vi ftp.repo 
[centos]
name=centos
baseurl=ftp://192.168.100.101/centos
gpgcheck=0
enable=1
[gpmall]
name=gpmall
baseurl=ftp://192.168.100.101/gpmall-single/gpmall-repo
enabled=1
gpgcheck=0

【题目1】容器化部署Redis

在master节点上编写/root/redis/Dockerfile文件,基于提供的软件包gpmall-single.tar构建chinaskill-redis:v1.1镜像,具体要求如下:

(1)基础镜像:centos:centos7.5.1804;

(2)作者:Chinaskill;

(3)修改配置文件中的bind 127.0.0.1为bind 0.0.0.0;

(4)设置Redis免密,并关闭保护模式;

(5)开放端口:6379;

(6)设置服务开机自启。

mkdir redis&&cp ftp.repo redis/&&cd redis/&&vi Dockerfile
 
RUN sed -i 's/bind 127.0.0.1/bind 0.0.0.0/g' /etc/redis.conf
RUN sed -i 's/protected-mode yes/protected-mode no/g' /etc/redis.conf 
ENTRYPOINT ["/usr/bin/redis-server", "/etc/redis.conf"]
***********************use****************************
FROM centos:centos7.5.1804
MAINTAINER Chinaskill
RUN rm -rf /etc/yum.repos.d/*
ADD ftp.repo /etc/yum.repos.d/
RUN yum -y install redis*
RUN sed -i 's/bind 127.0.0.1/bind 0.0.0.0/g' /etc/redis.conf && sed -i 's/protected-mode yes/protected-mode no/g' /etc/redis.conf
EXPOSE 6379
CMD ["redis-server","/etc/redis.conf"] 

 docker build -t chinaskill-redis:v1.1 .

【题目2】容器化部署MariaDB

在master节点上编写/root/mariadb/Dockerfile文件,基于提供的软件包gpmall-single.tar构建chinaskill-mariadb:v1.1镜像,具体要求如下:

(1)基础镜像:centos:centos7.5.1804;

(2)作者:Chinaskill;

(3)设置数据库密码:123456;

(4)创建数据库gpmall并导入数据库文件gpmall.sql;

(5)设置字符编码:UTF-8;

(6)开放端口:3306;

(7)设置服务开机自启

mkdir mariadb
cp ftp.repo /opt/gpmall-single/gpmall.sql mariadb/ 
cd mariadb/
vi Dockerfile 

**************************************use******************************
FROM centos:centos7.5.1804
MAINTAINER chinaskill
RUN rm -rf /etc/yum.repos.d/*
ADD ftp.repo /etc/yum.repos.d/
ADD gpmall.sql /opt/
ADD init.sh /opt/
RUN yum -y install mariadb-server
RUN bash /opt/init.sh
ENV LC_ALL en_US.UTF-8
EXPOSE 3306
CMD ["mysqld_safe","--user=root"]

vi init.sh 
#!/bin/bash
mysql_install_db --user=root
mysqld_safe --user=root &
sleep 3
mysqladmin -u root password '123456'
mysql -uroot -p123456 -e "grant all privileges on *.* to root@'%' identified by '123456';"
mysql -uroot -p123456 -e "set names utf8;create database gpmall character set utf8;use gpmall;source /opt/gpmall.sql;"

docker build -t chinaskill-mariadb:v1.1 .
\[ FROM centos:centos7.5.1804 MAINTAINER Chinaskill RUN rm -f /etc/yum.repos.d/* ADD ftp.repo /etc/yum.repos.d/ ADD gpmall.sql /opt ENV LC_ALL en_US.UTF-8 RUN yum -y install mariadb mariadb-server RUN echo -e "[mysqld]\nport = 8066" >> /etc/my.cnf RUN mysql_install_db --user=mysql && sleep 3 && (mysqld_safe &) && sleep 3 && mysqladmin -uroot password 123456 && mysql -uroot -p123456 -e "grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;create database gpmall;use gpmall;source /opt/gpmall.sql;flush privileges;" EXPOSE 3306 8066 ENTRYPOINT ["mysqld_safe"] **************************************use FROM centos:centos7.5.1804 MAINTAINER chinaskill RUN rm -rf /etc/yum.repos.d/* ADD ftp.repo /etc/yum.repos.d/ ADD gpmall.sql /opt/ ADD start.sh /opt/ RUN yum -y install mariadb-server \ && chmod +x /opt/start.sh \ && /opt/start.sh EXPOSE 3306 ENV LC_ALL en_US.UTF-8 CMD mysqld_safe vi start.sh #!/bin/bash mysql_install_db --user=mysql mysqld_safe & sleep 3 mysqladmin -u root password '123456' mysql -uroot -p123456 -e "grant all privileges on *.* to 'root'@'%' identified by '123456';" mysql -uroot -p123456 -e "create database gpmall;use gpmall;source /opt/gpmall.sql;" \]

【题目3】容器化部署Zookeeper

在master节点上编写/root/zookeeper/Dockerfile文件,基于提供的软件包gpmall-single.tar构建chinaskill-zookeeper:v1.1镜像,具体要求如下:

(1)基础镜像:centos:centos7.5.1804;

(2)作者:Chinaskill;

(3)开放端口:2181;

(4)设置服务开机自启。

mkdir zookeeper
cp ftp.repo   /opt/gpmall-single/zookeeper-3.4.14.tar.gz zookeeper/ 
cd zookeeper/
vi Dockerfile
      
RUN mv /opt/zookeeper-3.4.14/conf/zoo_sample.cfg /opt/zookeeper-3.4.14/conf/zoo.cfg 
ENTRYPOINT ["/opt/zookeeper-3.4.14/bin/zkServer.sh", "start-foreground"]
****************************************************************use
FROM centos:centos7.5.1804
MAINTAINER Chinaskill 
RUN rm -rf /etc/yum.repos.d/*
COPY ftp.repo /etc/yum.repos.d/ftp.repo
EXPOSE 2181
ADD zookeeper-3.4.14.tar.gz /opt
RUN yum -y install java-1.8.0-openjdk java-1.8.0-openjdk-devel \
 && mv /opt/zookeeper-3.4.14/conf/zoo_sample.cfg /opt/zookeeper-3.4.14/conf/zoo.cfg
CMD ["sh","-c","/opt/zookeeper-3.4.14/bin/zkServer.sh start && tail -f /etc/shadow"] 

 docker build -t chinaskill-zookeeper:v1.1 .

【题目4】容器化部署Kafka

在master节点上编写/root/kafka/Dockerfile文件,基于提供的软件包gpmall-single.tar构建chinaskill-kafka:v1.1镜像,具体要求如下:

(1)基础镜像:centos:centos7.5.1804;

(2)作者:Chinaskill;

(3)开放端口:9092;

(4)设置服务开机自启。

mkdir kafka
cp ftp.repo  kafka/  
cp /opt/gpmall-single/zookeeper-3.4.14.tar.gz /opt/gpmall-single/kafka_2.11-1.1.1.tgz  kafka/
cd kafka/
vi Dockerfile
 
*************************************************use
FROM centos:centos7.5.1804
MAINTAINER chinaskill
RUN rm -rf /etc/yum.repos.d/*
ADD ftp.repo /etc/yum.repos.d/
ADD zookeeper-3.4.14.tar.gz /opt/
ADD kafka_2.11-1.1.1.tgz /opt/
EXPOSE 9092
RUN yum -y install java-1.8.0-openjdk java-1.8.0-openjdk-devel \
 && mv /opt/zookeeper-3.4.14/conf/zoo_sample.cfg /opt/zookeeper-3.4.14/conf/zoo.cfg
CMD ["sh","-c","/opt/zookeeper-3.4.14/bin/zkServer.sh start && /opt/kafka_2.11-1.1.1/bin/kafka-server-start.sh /opt/kafka_2.11-1.1.1/config/server.properties"]  

docker build -t chinaskill-kafka:v1.1 .
\[ RUN yum -y install java-1.8.0-openjdk java-1.8.0-openjdk-devel \ && mv /opt/zookeeper-3.4.14/conf/zoo_sample.cfg /opt/zookeeper-3.4.14/conf/zoo.cfg RUN sed -i 's/num.partitions.*$/num.partitions=3/g;s/zookeeper.connect=.*$/zookeeper.connect=zookeeper:2181/g' /opt/kafka_2.11-1.1.1/config/server.properties ENTRYPOINT ["sh", "/opt/kafka/kafka_2.11-1.1.1/bin/kafka-server-start.sh config/server.properties"] \]

【题目5】容器化部署Nginx

在master节点上编写/root/nginx/Dockerfile文件,基于提供的软件包gpmall-single.tar构建chinaskill-nginx:v1.1镜像,具体要求如下:

(1)基础镜像:centos:centos7.5.1804;

(2)作者:Chinaskill;

(3)编写/etc/nginx/conf.d/default.conf文件,配置反向代理,将80端口请求转发到8081、8082和8083;

(4)将dist.tar解压并复制到/usr/share/nginx/html/目录下;

(5)开放端口:80、443、8081、8082、8083;

(6)设置服务开机自启。

mkdir nginx
cp -frv ftp.repo  /opt/gpmall-single/dist /opt/gpmall-single/*.jar nginx/  
cd nginx/
vi Dockerfile
**********************************use********************
FROM centos:centos7.5.1804
MAINTAINER chinaskill
RUN rm -rf /etc/yum.repos.d/*
ADD ftp.repo /etc/yum.repos.d/
ADD *.jar /root/
ADD setup.sh /root/
RUN yum -y install nginx java-1.8.0-openjdk java-1.8.0-openjdk-devel \
 && sed -i '1a location /shopping { proxy_pass http://127.0.0.1:8081 ;}' /etc/nginx/conf.d/default.conf \
 && sed -i '2a location /user { proxy_pass http://127.0.0.1:8082 ;}' /etc/nginx/conf.d/default.conf \
 && sed -i '3a location /cashier { proxy_pass http://127.0.0.1:8083 ;}' /etc/nginx/conf.d/default.conf \
 && chmod +x /root/setup.sh \
 && rm -rf /usr/share/nginx/html/ 
EXPOSE 80 443 8081 8082 8083
ADD dist/ /usr/share/nginx/html/
CMD ["nginx","-g","daemon off;"] 


cat > setup.sh <<EOF
#!/bin/bash
nohup java -jar /root/shopping-provider-0.0.1-SNAPSHOT.jar &
sleep 5
nohup java -jar /root/user-provider-0.0.1-SNAPSHOT.jar &
sleep 5
nohup java -jar /root/gpmall-shopping-0.0.1-SNAPSHOT.jar &
sleep 5
nohup java -jar /root/gpmall-user-0.0.1-SNAPSHOT.jar &
sleep 5
EOF
docker build -t chinaskill-nginx:v1.1 .
\[ #####cp /etc/nginx/conf.d/default.conf . FROM centos:centos7.5.1804 MAINTAINER Chinaskill RUN rm -f /etc/yum.repos.d/* ADD ftp.repo /etc/yum.repos.d/ RUN rm -rf /etc/nginx/conf.d/default.conf /usr/share/nginx/html/* ADD setup.sh /root/ ADD dist/ /usr/share/nginx/html/ ADD default.conf /etc/nginx/conf.d/default.conf COPY *.jar /root/ RUN chmod 775 /root/setup.sh /usr/share/nginx/html/* RUN yum -y install nginx java-1.8.0-openjdk java-1.8.0-openjdk-devel EXPOSE 80 443 8081 8082 8083 ENTRYPOINT ["nginx", "-g", "daemon off;"] vi setup.sh #!/bin/bash nohup java -jar shopping-provider-0.0.1-SNAPSHOT.jar & sleep 5 nohup java -jar user-provider-0.0.1-SNAPSHOT.jar & sleep 5 nohup java -jar gpmall-shopping-0.0.1-SNAPSHOT.jar & sleep 5 nohup java -jar gpmall-user-0.0.1-SNAPSHOT.jar & sleep 5 vi default.conf server { listen 80; server_name localhost; #charset koi8-r; #access_log /var/log/nginx/host.access.log main; location / { root /usr/share/nginx/html; index index.html index.htm; } location /shopping { proxy_pass http://127.0.0.1:8081; } location /user { proxy_pass http://127.0.0.1:8082; } location /cashier { proxy_pass http://127.0.0.1:8083; } #error_page 404 /404.html; } \]

【题目6】编排部署GPMall商城

在master节点上编写/root/chinaskillmall/docker-compose.yaml文件,具体要求如下:

(1)容器1名称:mysql;镜像:chinaskill-mariadb:v1.1;端口映射:3306:3306;

(2)容器2名称:redis;镜像:chinaskill-redis:v1.1;端口映射:6379:6379;

(3)容器3名称:kafka;镜像:chinaskill-kafka:v1.1;端口映射:9092:9092;

(4)容器4名称:zookeeper;镜像:chinaskill-zookeeper:v1.1;端口映射:2181:2181;

(5)容器5名称:nginx;镜像:chinaskill-nginx:v1.1;端口映射:80:80,443:443。

mkdir chinaskillmall
cd chinaskillmall/
vi docker-compose.yaml
version: "3.3"
services:
  mysql.mall:
    container_name: mall-mysql
    image: chinaskill-mariadb:v1.1
    ports:
    - 13306:3306
  redis.mall:
    container_name: mall-redis
    image: chinaskill-redis:v1.1
    ports:
    - 16379:6379
  zookeeper.mall:
    container_name: mall-zookeeper
    image: chinaskill-zookeeper:v1.1
    ports:
    - 12181:2181
  kafka.mall:
    container_name: mall-kafka
    image: chinaskill-kafka:v1.1
    ports:
    - 19092:9092
  nginx-mall:
    depends_on:
      - mysql.mall
      - redis.mall
      - zookeeper.mall
      - kafka.mall
    container_name: mall-nginx
    image: chinaskill-nginx:v1.1
    ports:
    - 83:80
    - 443:443
    command: ["sh","-c","/root/setup.sh && nginx && tail -f /etc/shadow"]

docker-compose up -d

当用命令jobs查看jar包运行状态或访问网站只显示个标题的时候(如图3-1),那就是4个jar包没起来,没运行成功

执行docker-compose up -d时出现ERROR: Failed to Setup IP tables: Unable to enable SKIP DNAT rule原因是因为防火墙关闭之后需要重启docker服务。

执行:

service docker restart
systemctl restart docker
\[ version: "3" services: mysql.mall: container_name: mysql image: chinaskill-mariadb:v1.1 ports: - "3306:3306" restart: always redis.mall: depends_on: - mysql.mall container_name: redis1 image: chinaskill-redis:v1.1 ports: - "6379:6379" restart: always zookeeper.mall: depends_on: - mysql.mall - redis.mall container_name: zookeeper image: chinaskill-zookeeper:v1.1 ports: - "2181:2181" restart: always kafka.mall: links: - zookeeper.mall depends_on: - mysql.mall - redis.mall - zookeeper.mall container_name: kafka image: chinaskill-kafka:v1.1 ports: - "9092:9092" restart: always mall: container_name: nginx1 image: chinaskill-nginx:v1.1 links: - mysql.mall - redis.mall - zookeeper.mall - kafka.mall depends_on: - mysql.mall - redis.mall - zookeeper.mall - kafka.mall ports: - "88:80" - "443:443" privileged: true command: /root/run.sh ====================================user==================================== version: '3.3' services: mall-mysql: image: chinaskill-mariadb:v1.1 ports: - 13306:3306 mall-redis: image: chinaskill-redis:v1.1 ports: - 16379:6379 mall-kafka: image: chinaskill-kafka:v1.1 ports: - 19092:9092 mall-zookeeper: image: chinaskill-zookeeper:v1.1 ports: - 12181:2181 mall-nginx: image: chinaskill-nginx:v1.1 depends_on: - mall-mysql - mall-redis - mall-zookeeper - mall-kafka links: - mall-mysql:mysql.mall - mall-redis:redis.mall - mall-zookeeper:zookeeper.mall - mall-kafka:kafka.mall ports: - 83:80 - 1443:443 command: ["sh","-c","/root/setup.sh && nginx && tail -f /etc/shadow"] \]
\[ zookeeper mall-zookeeper | ZooKeeper JMX enabled by default mall-zookeeper | Using config: /opt/zookeeper-3.4.14/bin/../conf/zoo.cfg mall-zookeeper | Starting zookeeper ... STARTED mall-zookeeper | sync:*:17632:0:99999:7::: mall-zookeeper | shutdown:*:17632:0:99999:7::: mall-zookeeper | halt:*:17632:0:99999:7::: mall-zookeeper | mail:*:17632:0:99999:7::: mall-zookeeper | operator:*:17632:0:99999:7::: mall-zookeeper | games:*:17632:0:99999:7::: mall-zookeeper | ftp:*:17632:0:99999:7::: mall-zookeeper | nobody:*:17632:0:99999:7::: mall-zookeeper | systemd-network:!!:17682:::::: mall-zookeeper | dbus:!!:17682:::::: nginx mall-nginx | at sun.nio.ch.Net.checkAddress(Net.java:101) ~[na:1.8.0_222] mall-nginx | at sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:622) ~[na:1.8.0_222] mall-nginx | at org.apache.zookeeper.ClientCnxnSocketNIO.registerAndConnect(ClientCnxnSocketNIO.java:277) ~[zookeeper-3.4.13.jar!/:3.4.13-2d71af4dbe22557fda74f9a9b4309b15a7487f03] mall-nginx | at org.apache.zookeeper.ClientCnxnSocketNIO.connect(ClientCnxnSocketNIO.java:287) ~[zookeeper-3.4.13.jar!/:3.4.13-2d71af4dbe22557fda74f9a9b4309b15a7487f03] mall-nginx | at org.apache.zookeeper.ClientCnxn$SendThread.startConnect(ClientCnxn.java:1021) ~[zookeeper-3.4.13.jar!/:3.4.13-2d71af4dbe22557fda74f9a9b4309b15a7487f03] mall-nginx | at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1064) ~[zookeeper-3.4.13.jar!/:3.4.13-2d71af4dbe22557fda74f9a9b4309b15a7487f03] kafka mall-kafka | [2022-03-22 03:36:04,184] INFO [TransactionCoordinator id=0] Starting up. (kafka.coordinator.transaction.TransactionCoordinator) mall-kafka | [2022-03-22 03:36:04,190] INFO [TransactionCoordinator id=0] Startup complete. (kafka.coordinator.transaction.TransactionCoordinator) mall-kafka | [2022-03-22 03:36:04,191] INFO [Transaction Marker Channel Manager 0]: Starting (kafka.coordinator.transaction.TransactionMarkerChannelManager) mall-kafka | [2022-03-22 03:36:04,235] INFO [/config/changes-event-process-thread]: Starting (kafka.common.ZkNodeChangeNotificationListener$ChangeEventProcessThread) mall-kafka | [2022-03-22 03:36:04,287] INFO [SocketServer brokerId=0] Started processors for 1 acceptors (kafka.network.SocketServer) mall-kafka | [2022-03-22 03:36:04,289] INFO Kafka version : 1.1.1 (org.apache.kafka.common.utils.AppInfoParser) mall-kafka | [2022-03-22 03:36:04,289] INFO Kafka commitId : 8e07427ffb493498 (org.apache.kafka.common.utils.AppInfoParser) mall-kafka | [2022-03-22 03:36:04,292] INFO [KafkaServer id=0] started (kafka.server.KafkaServer) \]

Pig

云梦公司基于Spring Cloud微服务应用程序框架开发了一套快速开发平台,平台设计灵活可扩展、可移植、可应对高并发需求,并实现了全容器化部署,该平台架构图如下:

基础架构

主要的技术栈如下表所示:

模块 说明
MySQL 读写分离数据库
Redis 分布式缓存服务
Register 注册中心、配置中心
Gateway 动态路由定义
Auth 授权服务提供
Upms 通用用户权限管理模块
UI 前端页面

试将MySQL组件、Redis组件、Register组件和nginx组件按照要求进行容器化,其它组件GatewayAuthUpms已经实现容器化,直接从仓库中拉取镜像运行容器即可。

\1. 编写Dockerfile文件制作MySQL镜像,生成镜像名micro-mysql:v1.0,基于centos:7.9.2009基础镜像,要求安装MySQL服务,设置初始密码为123456,并设置服务自启动。

\2. 编写Dockerfile文件制作Redis镜像,生成镜像名micro-redis:v1.0,基于centos:7.9.2009基础镜像,安装Redis服务,关闭保护模式,并设置服务自启动。

\3. 编写Dockerfile文件制作Register镜像,生成镜像名micro-register:v1.0,基于centos:7.9.2009基础镜像,安装JDK环境和Register服务,暴露8848端口,并设置服务自启动。

\4. 编写Dockerfile文件制作UI镜像,生成镜像名micro-nginxl:v1.0,基于centos:7.9.2009基础镜像,安装nginx服务,暴露80端口,并设置服务自启动。

\5. 编写docker-compose.yaml文件,使用上面构建的镜像编排部署该快速开发平台。

阶段三:构建并推送镜像

Pig 默认由 7 个微服务,以及 Redis、MySql 等组件构成, 我们可以利用并发任务同时构建所有服务镜像。

服务名称 Dockerfile 路径 说明
pig-mysql ./db 基于官方镜像,并包含初始化db脚本
pig-redis 官方镜像,无需构建
pig-job ./pig-visual/pig-xxl-job-admin XXL jobadmin 非必须
pig-register ./pig-register 基于 Nacos 的服务发现与配置管理
pig-gateway ./pig-gateway Spring Cloud 网关
pig-auth ./pig-auth 用于用户认证的 Oauth 服务
pig-upms ./pig-upms/pig-upms-biz 后台管理 API 服务
pig-monitor ./pig-visual/pig-monitor 监控
pig-sentinel ./pig-visual/pig-sentinel-dashboard Sentinel Dashboard
pig-codegen ./pig-visual/pig-codegen 代码生成器API

vi docker-compose.yaml

\[ version: '3' services: pig-mysql: build: context: ./db environment: MYSQL_ROOT_PASSWORD: root restart: always container_name: pig-mysql image: pig-mysql ports: - 3306:3306 pig-redis: image: redis:6.2.6 ports: - 6379:6379 restart: always container_name: pig-redis hostname: pig-redis pig-register: build: context: ./pig-register restart: always ports: - 8848:8848 container_name: pig-register hostname: pig-register image: pig-register pig-gateway: build: context: ./pig-gateway restart: always ports: - 9999:9999 container_name: pig-gateway hostname: pig-gateway image: pig-gateway pig-auth: build: context: ./pig-auth restart: always container_name: pig-auth hostname: pig-auth image: pig-auth pig-upms: build: context: ./pig-upms/pig-upms-biz restart: always container_name: pig-upms hostname: pig-upms image: pig-upms pig-monitor: build: context: ./pig-visual/pig-monitor restart: always ports: - 5001:5001 container_name: pig-monitor hostname: pig-monitor image: pig-monitor pig-sentinel: build: context: ./pig-visual/pig-sentinel-dashboard restart: always image: pig-sentinel container_name: pig-sentinel ports: - 5003:5003 pig-codegen: build: context: ./pig-visual/pig-codegen restart: always container_name: pig-codegen hostname: pig-codegen image: pig-codegen pig-job: build: context: ./pig-visual/pig-xxl-job-admin restart: always container_name: pig-job hostname: pig-job image: pig-job ports: - 5004:5004 \]