首页 > 数据库 >docker-compose 编排Net6项目,redis/mysql/nlog实战

docker-compose 编排Net6项目,redis/mysql/nlog实战

时间:2022-12-20 15:23:29浏览次数:63  
标签:compose redis nlog volumes mysql home docker

十年河东,十年河西,莫欺少年穷

学无止境,精益求精

1、新建 net6 webapi项目

一个非常简单的net6项目,使用mysql数据库,redis做缓存

 

 

 关于项目的搭建,这里不做说明,本篇主要讲解docker-compose容器编排

2、项目的Dockerfile

如下

#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.

FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

COPY . .
ENTRYPOINT ["dotnet", "WebMySql.dll"]

3、将项目发布,项目文件传至linux服务器

采用scp命令传递文件

 

 

 4、拉取mysql5.7 和 redis 镜像

此步骤省略,采用docker pull 指令

 

 

 5、docker build 生成web项目镜像

此步骤省略

可参考:netcore 3.1 项目部署到docker 及遇到的各种坑 和 对应解决方案

 docker build -f Dockerfile  -t webapp:1.0 .

6、编写docker-compose.yml文件

在 /home/yaml/目录下创建该文件

version: "3.9"
services:
  webapp: #服务名称
    image: webapp:1.0 #所使用的镜像名称  
    container_name: myWebApp
    restart: always #开机启动
    ports: #端口映射
      - 8083:80   #左边为宿主机端口 右边为容器端口
      - 1433:433   #左边为宿主机端口 右边为容器端口
    networks:      #使用自定义网络
      - appNet
    volumes:       #挂载
      - /home/docker/volumes/myWebApp/appsettings.json:/app/appsettings.json  #项目配置文件
      - /home/docker/volumes/myWebApp/logs:/app/logs  #Nlog日志
    depends_on: #依赖的服务
      - Redis    #对应下面服务的名称
      - Mysql    #对应下面服务的名称
  Redis: #服务名称
    image: redis #所使用的镜像名称
    container_name: myredis
    restart: always #开机启动
    ports:         #端口映射
      - 6379:6379
    networks:      #使用自定义网络
      - appNet
    volumes:       #挂载
      - /home/docker/volumes/redis/redis.conf:/etc/redis/redis.conf
      - /home/docker/data/redis/data:/data  
    command:
      /bin/bash -c "redis-server /etc/redis/redis.conf"
  Mysql: #第二个服务名称
    restart: always
    image: mysql:5.7 #所使用的镜像名称
    container_name: mysql01
    environment:
      MYSQL_HOST: mysql
      MYSQL_ROOT_PASSWORD: chch123 
      MYSQL_USER: chenwolong
      MYSQL_PASSWORD: ch12345678
      MYSQL_DATABASE: Student
      TZ: Asia/Shanghai  #时区
    ports:         #端口映射
      - 3307:3306
    networks:      #使用自定义网络
      - appNet
    volumes:       #挂载
      - /home/docker/volumes/mysql/conf/my.cnf:/etc/my.cnf
      - /home/docker/data/mysql/data:/var/lib/mysql
    command: --default_authentication_plugin=mysql_native_password #解决外部无法访问
networks:
  appNet:

7、创建挂载的文件【不可少,否则执行docker-compose up -d 时会失败】

通过rouch 或 vim 指令创建挂载的文件,并填充配置内容

其中redis.conf 可以不填充

/home/docker/volumes/myWebApp/appsettings.json
/home/docker/volumes/redis/redis.conf
/home/docker/volumes/mysql/conf/my.cnf

appsettings.json 内容如下:【注意配置文件中的两个连接字符串】

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*",
  "ConnectionStrings": {
    "studentDbContext": "Server=mysql01;Port=3307;Database=Student;Uid=root;Pwd=chch123;"
  },
  "RedisConnectionString": "myredis:6379,allowadmin=true", // 
  "RedisDbNum": 0
}

my.cnf 内容如下:

[mysqld]
user=mysql
default-storage-engine=INNODB
character-set-server=utf8
character-set-client-handshake=FALSE
collation-server=utf8_unicode_ci
init_connect='SET NAMES utf8'
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8

8、目录定位到 docker-compose.yml 所在的目录,编排容器

 

 9、进入mysql 容器,查看容器是否创建成功

进入容器

docker exec -it d94ca7bb1f2d /bin/bash

连接mysql,需输入root庄户密码

mysql -uroot -p

执行mysql命令

show databases;

 

 10、查看挂载是否成功

在docker-compose.yml文件中,项目日志挂载到了/home/docker/volumes/myWebApp/logs 路径

 

 日志挂载成功

11、运行项目

 

 这样Net6项目就成功部署在了docker,使用了compose容器编排。

@天才卧龙的波尔卡

标签:compose,redis,nlog,volumes,mysql,home,docker
From: https://www.cnblogs.com/chenwolong/p/docker-compose.html

相关文章

  • 故障分析 | Redis Cluster 分片内存异常使用不均问题诊断
    作者:任仲禹爱可生DBA团队成员,擅长故障分析和性能优化,文章相关技术问题,欢迎大家一起讨论。背景问题发生背景为某生产Redis集群(版本Redis5.0.10,架构为30片以上),该集群......
  • 技术分享 | my2sql 与 binlog2sql 解析效率 battle
    作者:杨彩琳爱可生华东交付部DBA,主要负责MySQL日常问题处理及DMP产品支持。爱好跳舞,追剧。前言**大家在平时运维过程中应该都了解过或者使用过一些binlog解析工具,比如今天......
  • 开发- redis常用方法封装总结
    importlombok.extern.slf4j.Slf4j;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.data.redis.core.RedisTemplate;impor......
  • 【Redis系列】- Redis 为什么这么快?
      1.背景Redis现在广泛应用于大中型互联网项目中,最重要的场景就是作为分布式缓存,来应对大流量高并发的冲击,那么为什么Redis有如此高的性能,这篇文章就来分析一下R......
  • Redis的AOF持久化
    介绍AOF日志AOF持久化是通过保存Redis服务器所执行的写命令来记录数据库状态。假设AOF日志记录了自Redis实例创建以来所有的修改性命令,那么就可以通过对一个空的......
  • Redis的数据持久化
    介绍Redis的数据持久化方案Redis的数据持久化主要有两大机制,AOF日志和RDB快照。AOF持久化是通过保存Redis服务器所执行的写命令来记录数据库状态。RDB持久化......
  • Redis的数据持久化
    介绍Redis的数据持久化方案Redis的数据持久化主要有两大机制,AOF日志和RDB快照。AOF持久化是通过保存Redis服务器所执行的写命令来记录数据库状态。RDB持久化......
  • 生产环境 Redis 优化记录
    1.现状描述1.1.生产环境生产环境配置6套Redis服务。1、配置为3节点物理服务器的Redis缓存群集,通过控制应用的主、备处于不同的物理服务器实现Redis访问的高可用,按不同......
  • RedisTemplate
    SpringBoot中Jedis几个api返回值的确认 @RequestMapping("/del/{key}")publicStringdel(@PathVariable("key")Stringkey){try{//键不存在......
  • 使用Tomcat基于redis的session共享机制集群部署
    常见的session集群方案:session复制和session共享Session复制:指session信息会在集群节点之间复制,每个节点服务上都会有相同的session信息;主要是实现后端多个节点的冗余功......