• Centos7系统Docker环境下部署企业项目


    1.简介

    项目介绍:
    系统:Centos7
    环境:Docker
    项目: Netcore2.1
    数据库:Mysql

    在部署前需要拉取三个官方镜像:
    mysql,nginx,microsoft/dotnet

    [root@localhost NETCore]# docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    mysql               latest              d72169616e20        3 days ago          443MB
    nginx               latest              27a188018e18        11 days ago         109MB
    microsoft/dotnet    latest              e268893be733        2 weeks ago         1.74GB
    

    2.项目部署配置

    项目路径:/root/Documents/NETCore
    项目结构:
    只显示主要配置的文件

    ├── database
       └── jhgdsm.sql (数据库配置)
    ├── data.dll.config (数据库连接字符串)
    ├── Dockerfile (docker配置)
    ├── proxy.conf (nginx配置)
    ├── docker-compose.yml(compose配置)
    

    各个配置文件说明如下:

    1.jhgdsm.sql :

    文件内容如下:

    USE mysql;
    ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
    
    DROP DATABASE IF EXISTS `jhgdsm`;
    CREATE DATABASE jhgdsm;
    USE jhgdsm;
    
    SET NAMES utf8mb4;
    SET FOREIGN_KEY_CHECKS = 0;
    
    DROP TABLE IF EXISTS `jh_user`;
    CREATE TABLE `jh_user`  (
      `id` varchar(36) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
      `account` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
      `password` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
      `mtype` varchar(2) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '2',
      `nickname` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
      `sex` varchar(2) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '1',
      `mstatus` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT 'normal',
      `company` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
      `email` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
      `mobile` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
      `img` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
      `createtime` datetime(0) NULL DEFAULT NULL,
      `createuser_id` varchar(36) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
      `updatetime` datetime(0) NULL DEFAULT NULL,
      `updateuser_id` varchar(36) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
      `logintime` datetime(0) NULL DEFAULT NULL,
      `limitdevcount` int(11) NULL DEFAULT NULL,
      PRIMARY KEY (`id`) USING BTREE
    ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
    
    -- ----------------------------
    -- Records of jh_user
    -- ----------------------------
    INSERT INTO `jh_user` VALUES ('effd9698-01ab-49c8-9399-5f4ac7fd8d1b', 'admin', 'F5AAE2AA35E781EE3E1C03957B54F6F3', '1', '管理员11', '', 'normal', 'Giada', '', '', '', '2018-11-15 10:36:55', '', '2019-02-19 15:21:16', 'effd9698-01ab-49c8-9399-5f4ac7fd8d1b', '2019-04-10 17:09:36', 10);
    #后面都是一些表的创建,忽略了
    

    该文件是数据库的数据表结构和数据,用于创建镜像的时候初始化数据库。数据库名为:jhgdsm,密码123456。

    2.data.dll.config

    文件内容如下:

    <?xml version="1.0" encoding="utf-8" ?>
    <BaseSetting>
      <MySqlConnection value="server=db;User ID=root;Password=123456;Database=jhgdsm;Allow User Variables=True;"></MySqlConnection>
    </BaseSetting>
    

    该文件就是mysql的连接字符串。注意“server=db”,后面会配置到。

    3.Dockerfile

    内容如下:

    FROM microsoft/dotnet:latest
    WORKDIR /app
    COPY . /app
    EXPOSE 5000
    ENV ASPNETCORE_URLS http://*:5000
    ENTRYPOINT ["dotnet","GDSMPlateForm.dll"]
    

    FROM指定容器需要的镜像,GDSMPlateForm.dll是运行项目的dll文件,端口号是5000

    4.proxy.conf

    内容如下:

    server {
        listen 8080;
    
        location / {
          proxy_pass http://gdsm:5000;
        }
    }
    

    监听docker下的8080端口,转发路径为gdsm:5000,注意“gdsm”,后面会配置到。

    5.docker-compose.yml

    内容如下:

    version: '2'
    services:
      db:
        container_name: gdsm.db
        image: mysql
        restart: always
        environment:
          MYSQL_ROOT_PASSWORD: 123456
        volumes:
          - ./mysql:/var/lib/mysql
          - ./database:/docker-entrypoint-initdb.d/
    
      gdsm:
        container_name: gdsm.web
        build: .
        depends_on:
          - db
        links:
          - db
      
      reverse-proxy:
        container_name: gdsm.proxy
        image: nginx
        depends_on:
          - gdsm
        ports:
          - "80:8080"
        volumes:
          - ./proxy.conf:/etc/nginx/conf.d/default.conf 
    
    

    以上内容部署了3个服务:
    db:数据库服务,data.dll.config文件的“server=db”相对应。
    容器命名为:gdsm.db,
    参数“MYSQL_ROOT_PASSWORD: 123456”是数据库密码。
    ./mysql:/var/lib/mysql:挂载当前项目下的mysql文件夹来持久化存储。
    ./database:/docker-entrypoint-initdb.d/:将/database目录下的文件拷贝到/docker-entrypoint-initdb.d目录下,也就是拷贝jhgdsm.sql文件。docker会遍历docker-entrypoint-initdb.d目录下所有的.sh和.sql后缀的文件并执行。


    gdsm:web项目服务
    容器命名为:gdsm.web
    build: .表示根据当前路径来创建镜像,创建过程与Dockerfile相关。
    depends_on:表示依赖于db服务。
    links:表示与db服务连接。


    reverse-proxy:nginx服务
    容器命名为:gdsm.proxy
    依赖于gdsm服务。
    本机80端口映射到8080端口
    ./proxy.conf:/etc/nginx/conf.d/default.conf :挂载了当前项目下的proxy.conf文件作为反向代理配置文件。其中该文件下的 "http://gdsm:5000"的gdsm映射的是gdsm服务。

    3.项目部署

    [root@localhost ~]# cd /root/Documents/NETCore/
    [root@localhost NETCore]# docker-compose up -d
    Building gdsm
    Step 1/6 : FROM microsoft/dotnet:latest
     ---> e268893be733
    Step 2/6 : WORKDIR /app
     ---> Running in 4fc18b3680d0
    Removing intermediate container 4fc18b3680d0
     ---> 43376cb667e1
    Step 3/6 : COPY . /app
     ---> 75f4a926b38c
    Step 4/6 : EXPOSE 5000
     ---> Running in 1e1876652a14
    Removing intermediate container 1e1876652a14
     ---> 0bd0204fac76
    Step 5/6 : ENV ASPNETCORE_URLS http://*:5000
     ---> Running in cbbb308d7100
    Removing intermediate container cbbb308d7100
     ---> ab5978301ee1
    Step 6/6 : ENTRYPOINT ["dotnet","GDSMPlateForm.dll"]
     ---> Running in 0c089e311d50
    Removing intermediate container 0c089e311d50
     ---> 600f8e56ef40
    Successfully built 600f8e56ef40
    Successfully tagged netcore_gdsm:latest
    WARNING: Image for service gdsm was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`.
    Creating gdsm.db ... done
    Creating gdsm.web ... done
    Creating gdsm.proxy ... done
    [root@localhost NETCore]# docker ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                          NAMES
    9a2b8448e42a        nginx               "nginx -g 'daemon of…"   45 seconds ago      Up 41 seconds       80/tcp, 0.0.0.0:80->8080/tcp   gdsm.proxy
    79aad0c9a764        netcore_gdsm        "dotnet GDSMPlateFor…"   46 seconds ago      Up 45 seconds       5000/tcp                       gdsm.web
    6e8659acfb21        mysql               "docker-entrypoint.s…"   47 seconds ago      Up 46 seconds       3306/tcp, 33060/tcp            gdsm.db
    [root@localhost NETCore]# 
    

    完!

  • 相关阅读:
    iOS中静态库的制作——使用创建静态库项目的方式创建静态库
    在Xcode中自定义代码块——快速代码
    在博客园的第一篇博客
    委派
    As I Began to Love Myself
    When you are old
    RESOURCE SUMMARY
    First One
    js 动态生成div显示id
    js 层的显示和隐藏
  • 原文地址:https://www.cnblogs.com/zt102545/p/13940227.html
Copyright © 2020-2023  润新知