如何使用Docker将.Net6项目部署到Linux服务器(二)

目录

二 安装Redis

2.1 基本安装

2.1.1 下载Redis

2.1.2 解压并安装Redis

2.1.3 编译Redis

2.1.3 配置config文件

2.1.4 配置redis服务

2.1.5 关闭redis服务

2.2 Docker安装

2.2.1 拉取镜像

2.2.2 查看镜像

2.2.2 创建挂载目录

2.2.3 创建配置文件

2.2.4 创建容器并启动Redis服务

2.2.5 从Docker中查看Redis服务

2.2.6 从Docker中使用redis客户端

三 发布系统

3.1 发布系统                                                                                                                    

3.1.1 DockerFile配置

​编辑

3.1.2 发布系统

3.1.3 上传文件

3.1.3 创建镜像文件

3.1.4 启动容器

3.1.5 查看docker中的文件

4.1 连接Docker中的redis

4.1.1 修改配置文件

4.1.2 Docker容器间使用bridge进行通信


二 安装Redis

2.1 基本安装

2.1.1 下载Redis

进去Redis官网 http://www.redis.io/ 

历史版本下载地址:Index of /releases/ 

Redis中文文档地址:Redis文档中心 -- Redis中国用户组(CRUG)

Redis下载地址: Download | Redis 

我们选择复制链接,创建目录,进入该目录下载Redis

cd /usr/local
wget https://github.com/redis/redis/archive/7.2.3.tar.gz

 2.1.2 解压并安装Redis

        判断是否已经安装gcc

rpm -qa|grep gcc

        如果没有安装,则我们需要安装gcc

yum -y install gcc

        解压到我们创建的自定义目录

 mkdir redis_package
tar -zvxf /usr/local/7.2.3.tar.gz -C /usr/local/redis_package

   解压后,我们可以看到这样的文件

2.1.3 编译Redis

进入解压后的目录

cd /usr/local/redis_package/redis-7.2.3
make
make PREFIX=/usr/local/redis install

 这里多了一个关键字 PREFIX=

这个关键字的作用是编译的时候用于指定程序存放的路径

比如我们现在就是指定了redis必须存放在/usr/local/redis目录。假设不添加该关键字

Linux会将可执行文件存放在/usr/local/bin目录

库文件会存放在/usr/local/lib目录

配置文件会存放在/usr/local/etc目录

其他的资源文件会存放在usr/local/share目录

这里指定好目录也方便后续的卸载,后续直接rm -rf /usr/local/redis 即可删除redis。

如上,编译完成之后,会在src目录下多出几个可执行的shell脚本,其中就有最常用的redis-serverredis-cli;此时这些脚本就可以直接对Redis进行相关的操作

...
./redis-server                                 # 启动Redis服务
...
./redis-cli                                    # 启动Redis客户端
...

但是每次操作Redis的相关命令都要进入到安装目录下的src目录,这样很繁琐,所以我们可以make之后再执行make install

就会把make命令生成在src目录下的所有二进制文件复制一份放到/usr/local/bin目录下;又因为 /usr/local/bin在系统变量 PATH中;所有在任意的目录都可以执行Redis相关的脚本。

但是多数情况下,习惯在执行 make install 命令时指定Redis的安装目录,通常安装在 /usr/local/redis 下

OK,我们现在看到的/usr/local/redis/目录中只有一个bin文件,且bin目录的结构如下

此时代表我们的Redis已经安装完成

2.1.3 配置config文件

首先,我们先从编译后的Redis目录中Copy一份文件备份,防止我们在修改Config文件时出错。我们在Redis安装包中创建一个备份文件夹,将config文件备份至该文件夹

另外我们重新Copy一份redis.conf至redis目录中

修改redis.conf文件

1 默认daemonize no 改为 daemonize yes

2 默认protected-mode yes 改为 protected-mode no

3 默认bind 127.0.0.1 改为 直接注释掉(默认bind 127.0.0.1只能本机访问)或改成本机IP地址,否则影响远程IP连接

4 添加redis密码 改为 requirepass 你自己设置的密码,(010109为我们设置的密码)

 这里有一份Redis文件配置注解信息

1、daemonize 如果需要在后台运行,把该项改为yes
2、pidfile 配置多个pid的地址 默认在/var/run/redis.pid
3、bind 绑定ip,设置后只接受来自该ip的请求
4、port 监听端口,默认是6379
5、loglevel 分为4个等级:debug verbose notice warning
6、logfile 用于配置log文件地址
7、databases 设置数据库个数,默认使用的数据库为0
8、save 设置redis进行数据库镜像的频率。
9、rdbcompression 在进行镜像备份时,是否进行压缩
10、dbfilename 镜像备份文件的文件名
11、Dir 数据库镜像备份的文件放置路径
12、Slaveof 设置数据库为其他数据库的从数据库
13、Masterauth 主数据库连接需要的密码验证
14、Requriepass 设置 登陆时需要使用密码
15、Maxclients 限制同时使用的客户数量
16、Maxmemory 设置redis能够使用的最大内存
17、Appendonly 开启append only模式
18、Appendfsync 设置对appendonly.aof文件同步的频率(对数据进行备份的第二种方式)
19、vm-enabled 是否开启虚拟内存支持 (vm开头的参数都是配置虚拟内存的)
20、vm-swap-file 设置虚拟内存的交换文件路径
21、vm-max-memory 设置redis使用的最大物理内存大小
22、vm-page-size 设置虚拟内存的页大小
23、vm-pages 设置交换文件的总的page数量
24、vm-max-threads 设置VM IO同时使用的线程数量
25、Glueoutputbuf 把小的输出缓存存放在一起
26、hash-max-zipmap-entries 设置hash的临界值
27、Activerehashing 重新hash

 5 设置redis默认配置文件为redis.conf

cd /usr/local/redis
./bin/redis-server redis.conf
 2.1.4 配置redis服务

我们查看6379端口是否已经被占用

ps -ef|grep redis|grep -v grep

出现如下提示,则表示6379端口已经被redis占用 

 

客户端启动Redis,验证Redis是否启用成功 ( ckk_0821为redis密码)

./bin/redis-cli -a ckk_0821 -p 6379

出现如下提示,则表示Redis客户端打开成功 

 测试Redis是否可以正常使用,输入ping命令,返回PONG说明测试成功!

再次测试键值对的输入输出,若输入输出正常,则表示redis安装完成

127.0.0.1:6379> set key1 ckk
OK
127.0.0.1:6379> get key1
"ckk"
  2.1.5 关闭redis服务
shutdown
quit

2.2 Docker安装

2.2.1 拉取镜像

        拉取最新版本的Redis镜像

docker pull redis

        拉取指定版本的Redis镜像

docker pull redis:6.0.8

         拉取结果如下,表示镜像拉取成功

 2.2.2 查看镜像
docker image ls

2.2.2 创建挂载目录
cd /usr/local
mkdir -p /usr/local/docker/redis/conf
mkdir -p /usr/local/docker/redis/data
mkdir -p /usr/local/docker/redis/log
2.2.3 创建配置文件

从官网中下载Redis配置文件redis.conf,并将文件放置于/usr/local/docker/redis/conf/目录中,根据需求修改config文件。

修改以下配置:

  • 1)bind 127.0.0.1 :注释掉这部分,这是限制 redis 只能本地访问

  • 2)protected-mode no :默认是yes,开启保护模式,限制为本地访问

  • 3)requirepass 123456 :配置 redis 连接密码,默认是注释的

  • 4)dir ./ :更改本地redis数据库存放文件夹(可选)

  • 5)appendonly yes :redis 持久化,开启了这个 redis 就不会每次重启时自动清空了

 创建日志文件 

touch /usr/local/docker/redis/log/redis.log

修改日志文件的操作权限(最高权限,可写可读) 

chmod 777 /usr/local/docker/redis/log/redis.log
2.2.4 创建容器并启动Redis服务
docker run -p 6380:6380 --name forumredis --privileged=true \
-v /usr/local/docker/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf \
-v /usr/local/docker/redis/data:/data \
-v /usr/local/docker/redis/log/redis.log:/log/redis.log \
redis:latest redis-server /usr/local/etc/redis/redis.conf

1)--name:给redis容器起一个名字;

2)-p:端口映射(宿主机端口:容器端口);

3)-v:挂载自定义配置(自定义配置:容器内部配置);

本命令共有两个挂载:

Linux 上自定义的 redis 配置(/docker/redis/conf/redis.conf)挂载到容器内 redis 应用的默认配置文件 /etc/redis/redis.conf;

Linux 上自定义的数据存放目录(/docker/redis/data)挂载到容器内 redis 应用的默认数据存放目录(/data)。

Linux 上自定义的日志存放目录(/docker/redis/log)挂载到容器内 redis 应用的默认日志存放目录(/log)。

这样 docker 容器内的 redis 应用会使用 Linux 上自定义的配置文件,docker 容器内的 redis 应用的数据会放到 Linux 上自定义的数据存放目录。

4)-d:后台运行;

5)redis-server --appendonly yes: 在容器执行 redis-server 启动命令,并打开 redis 持久化配置;

 2.2.5 从Docker中查看Redis服务
docker ps

 进入到启动的redis容器 

docker exec -it forumredis /bin/bash

 退出启动的redis容器

exit
    2.2.6 从Docker中使用redis客户端
docker exec -it forumredis redis-cli
# 可以指定端口
docker exec -it forumredis redis-cli -p 6380

  进入客户端之后,输入我们的密码

[root@iZ2ze6on3jy8afby5yaj0bZ ~]# docker exec -it forumredis redis-cli -p 6380
127.0.0.1:6380> auth 密码

   测试redis是否安装成功

127.0.0.1:6380> ping
PONG

  至此,在docker中的redis就安装完成了。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             

三 发布系统

3.1 发布系统                                                                                                                     

3.1.1 DockerFile配置

添加DockerFile

目前.NET6支持添加DockerFile。我们先将Dockerfile文件属性复制到输出目录的方式调整为** 如果较新则复制**,方便我们部署。

我们来解析以下Dockerfile文件里面的内容与流程

 编辑DockerFile文件

dockerfile文件可以由系统自动生成,但是手动发布需要修改系统生成的dockerfile文件,因为手动发布已经生成了dll文件,不需要调用build命令再次生成。所以我们需要修改DockerFile,只需要保留程序入口以及运行端口指定就可以了。

具体文件如下 

#See https://aka.ms/customizecontainer to learn how to customize your debug container and 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


#如果用system.sqlclient.dll访问数据库,需要加这一句
RUN sed -i 's/TLSv1.2/TLSv1.0/g' /etc/ssl/openssl.cnf

COPY ./ ./

#FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
#WORKDIR /src
#COPY ["FYSY.Demo/FYSY.Demo.csproj", "FYSY.Demo/"]
#COPY ["FYSY.Comm/FYSY.Comm.csproj", "FYSY.Comm/"]
#COPY ["FYSY.Domain/FYSY.Domain.csproj", "FYSY.Domain/"]
#COPY ["FYSY.Model/FYSY.Model.csproj", "FYSY.Model/"]
#RUN dotnet restore "FYSY.Demo/FYSY.Demo.csproj"
#COPY . .
#WORKDIR "/src/FYSY.Demo"
#RUN dotnet build "FYSY.Demo.csproj" -c Release -o /app/build
#
#FROM build AS publish
#RUN dotnet publish "FYSY.Demo.csproj" -c Release -o /app/publish /p:UseAppHost=false
#
#FROM base AS final
#WORKDIR /app
#COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "FYSY.Demo.dll"]
 3.1.2 发布系统

在发布系统之前,我们需要对项目中的一些文件进行修改

在Startup里面,Configure下面需要做修改:

swagger默认是写在 if (env.IsDevelopment())判断语句里面的,代表使用编译器启动,才会进来。我们把swagger有关的写到外面去,不然发布以后,可能会看不到swagger的页面:

 切记,在发布系统时,目标运行时,一定要选择 可移植,不要选择liunx-64,否则会报错,报错内容为:

System.InvalidOperationException: Unable to resolve service for type '***.***.***' while attempting to activate '***.***.***'

  3.1.3 上传文件

首先我们需要新建一个目录

mkdir forum_manage

然后我们将已经发布后的文件上传到服务器该目录下。我这里使用的工具是xftp

打开发布后的目录后,选择发布后的文件进行上传。

3.1.3 创建镜像文件

创建镜像文件,文件上传后,进行文件所在目录,cd  文件目录 。然后使用以下命令 创建镜像文件  注意后面的 . 不能少

cd /root/forum_manage

创建一个asp.net core的镜像 , 命令 docker build -t aspnettest .  ,不要漏掉  “ . ”  这个 . 表示当前目录 

docker build -t 镜像名称:版本号 .

输出文件如下: 

3.1.4 启动容器

使用下面的命令启动容器

docker run -d -p 8030:80 --name 容器名称 --privileged=true --restart=always -e TZ=Asia/Shanghai -d 镜像名称:版本号

  其中8001是系统的端口号,80是容器 

 --restart=always 表示容器停止后自动重启(比如服务器重启了),如果运行容器时没有加这个参数,可以使用docker container update --restart=always 容器名字  来修改, 

-e TZ=Asia/Shanghai  表示指定容器的时区,以免.net core获取的时间不正确 

-v 是指定挂载目录/home/OnlineBusiness/dotnet_docker_test宿主机目录,

:后面的是docker应用内目录

docker Access to the path '/proc/1/map_files' is denied.问题原因及解决办法

原因是CentOS7中的安全模块selinux把权限禁掉了,至少有以下三种方式解决挂载的目录没有权限的问题:

  • 1.在运行容器的时候,给容器加特权,及加上 --privileged=true 参数:

docker run -i -t -v /soft:/soft --privileged=true 686672a1d0cc /bin/bash

  • 2.临时关闭selinux:

setenforce 0

  • 3.添加selinux规则,改变要挂载的目录的安全性文本

执行命令

docker ps

我们再查看一下日志文件:

docker logs forumapicontainer
 3.1.5 查看docker中的文件

要查看容器中的文件列表,可以使用 docker exec 命令。该命令用于在正在运行的容器中执行命令。

 docker exec forumapicontainer ls

要查看名为 forumapicontainer 的容器中 目录下的文件列表,可以执行以下命令:

docker  exec forumapicontainer  ls  /app

4.1 连接Docker中的redis

 4.1.1 修改配置文件

首先,如果连接Docker中的redis,我们需要先修改配置文件,配置文件中不可以再使用Ip地址而要使用Docker中redis中的dockerName

我们需要将此处的Ip地址修改为:

 4.1.2 Docker容器间使用bridge进行通信

创建 bridge

docker network create forumbridge

查看目前已经存在的network

docker network ls

使用bridge将redis跟我们的.Net程序通讯

docker network connect forumbridge forumapi
docker network connect forumbridge forumredis 

查看bridge详情信息

 docker network inspect forumbridge

 

在containers中我们可以看到forumapi以及forumredis已经加入同一个bridge;

重启我们的redis容器以及我们的Net容器

docker stop forumapi

我们停止之前已经创建的NetDocker

然后我们重新启动该ApiDocker

docker run -d -p 8030:80 --name forumapi --privileged=true --network=forumbridge -e TZ=Asia/Shanghai -d forumcontainer

切记,在这里启动Docker时,一定要指定NetWork,不然的话将会提示Redis连接不上 

docker restart forumredis

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/269760.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

微信商家费率0.2怎么申请

不管是微信还是支付宝,商户最低的收款手续费率可以达到0.2%费率。一般我们普通商户的收款费率一般在0.6左右,当然也有使用0.3的,也就是1万元的费率是30-60块钱,对于一些流水比较大的商家来说,确实很有必要把这个手续费…

ThunderSearch(闪电搜索器)_网络空间搜索引擎工具_信息收集

文章目录 ThunderSearch简介1 项目地址2 使用方式2.1 配置文件config.json说明2.2 构建和运行 3 使用式例 ThunderSearch简介 ThunderSearch(闪电搜索器)是一款使用多个(【支持Fofa、Shodan、Hunter、Zoomeye、360Quake网络空间搜索引擎】网络空间搜索引…

Vue爱好者必看!九款常用UI组件库,助力项目快速搭建!

Vue通常用于构建用户界面和单页应用程序。产品开发者可以从简单的组件开始创建,并逐渐衍生出更复杂的前端平台。通过合理应用UI组件库,设计师可以快速提高整体设计效率,更好地优化产品从外观结构到交互体验。本节将盘点9个常用的VueUI组件库。…

Linux与Bash 编程——Linux文件处理命令-L1

目录: linux系统与shell环境准备 Linux系统简介操作系统简史Linux的发行版:Linux与Windows比较:Linux安装安装包下载Linux的访问方式远程登录方式远程登录软件:mobaxterm的使用:使用电脑命令行连接:sshd的…

(1)(1.11) SiK Radio v2(一)

文章目录 前言 1 概述 2 特点 3 状态LED灯 前言 SiK 遥测无线电是在自动驾驶仪和地面站之间建立遥测连接的最简单方法之一。本文提供了如何连接和配置无线电的基本用户指南。 3DR Radio v2(SiKRadio 的消费者版本) !Note 本页面以前的…

网站配置域名实例

目录 网站配置 网站备案 如果希望你的网站对外提供互联网信息服务还有非常关键的两个动作,那就是:为网站配置、为网站备案。 由于IP地址不方便记忆并且不能显示地址组织的名称和性质,人们设计出了域名,并通过域名系统&#xff…

redis主从扩容案例

redis3主3从,请参见:https://blog.csdn.net/weixin_49456013/article/details/134930716?spm1001.2014.3001.5501 现在需要进行扩容,变成4主4从,主要步骤如下: 1.新建6387、6388两个节点并启动 docker run -d --na…

“双十一、二” 业务高峰如何扛住?韵达快递选择 TDengine

小 T 导读: 为了有效处理每日亿级的数据量,早在 2021 年,韵达就选择用 TDengine 替代了 MySQL,并在三台服务器上成功部署和上线了 TDengine 2.0 集群。如今,随着 TDengine 3.0 版本的逐渐成熟,韵达决定将现…

如何实现https密钥对登录方式

先安装docker yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo systemctl start docker.service systemctl enable docker.service yum install -y docker…

三叠云食堂管理系统:打造智慧食堂,提升运营效率与服务质量

今天,人们越来越注重生活品质和食品安全。特别是在学校食堂这样的公共场所,如何确保食品的安全、营养和健康成为了重中之重。食堂,作为学校和各类企业的重要部分,也迫切需求升级改革。三叠云食堂管理系统,就是为满足食…

猫头虎分享2023年12月17日博客之星候选--领域赛道博主文章数据

猫头虎分享2023年12月17日博客之星候选–领域赛道博主文章数据 博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开…

华为数通方向HCIP-DataCom H12-831题库(多选题:241-249)

第241题 (NEW) 以下哪些操作可能会影响客户网络的正常运行? A、从设备上下载日志 B、软件升级 C、路由协议配置变更 D、debug核心交换机上转发的所有IP报文 答案:ABCD 解析: 第242题 对于防火墙的默认安全区 Trust 和 Untrust 的说法,正确的有 A、从 Trust 区域访问 Untr…

ES5语法数组遍历、字符串、对象新增方法

ES5数组遍历forEach\filter\some\every\map、字符串trim、对象keys\defineProperty新增方法   Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例。作为 Elastic Stack 的核心,它集中存储您的数据&#xff…

德勤中国合伙人姚承懿:只是“线上化”的数字化转型不会成功

投资者们都期待超出预期的增长,倾向规避未知风险。当下的宏观经济形势复杂,外部条件多变,那些善于驾驭风险,给市场以确定性的企业,能够得到投资者更多的青睐。 合规与增长是支撑上市公司市值的关键要素。有统计数据显…

GrayLog日志平台的基本使用-docker容器日志接入

1、/etc/docker/daemon.json中加入如下配置并重启服务 [rootlocalhost src]# cat /etc/docker/daemon.json { "registry-mirrors": ["https://dhq9bx4f.mirror.aliyuncs.com"], "log-driver": "gelf", "log-opts":…

vscode中使用GitHub Copilot Chat

文章目录 一、什么是Github Copilot Chat二、安装使用三、如何使用1. 聊天功能2. 内联功能 一、什么是Github Copilot Chat GitHub Copilot Chat 由 OpenAI 的 GPT-4 大型多模态模型提供支持,能带来更准确的代码建议、解释和指导。GitHub Copilot Chat 的内联功能可…

售前工程师宝典:整理服务器最全知识点

如何保证服务器可以支持百万用户访问?服务器品牌有哪些?如何选购服务器?对于这些问题,今天我们就一起来看下关于服务器的相关知识。 假如你开发了一个网站或者一个app把他放到服务器上,之后你把它发布到了网上&#x…

ES6学习(五):async和await的使用

async和await是promise的一种语法糖,也就是更简单易懂的写法。 在很多项目中,你会经常看到async和await的配合使用,看到原始的promise写法反而不多,就是因为async-await这种写法是用同步的语法去实现异步的逻辑。 基础使用 原生promise写法 let value nulllet proFn new P…

“关爱长者 托起夕阳无限美好”清峰公益开展寒冬暖心慰问活动

2023年12月23日,陆丰市清峰公益服务中心在陆丰市潭西镇党群服务中心开展爱老敬老寒冬暖心慰问活动。此次活动是陆丰市清峰公益服务中心自11月中下旬“清峰公益 凝聚慈善力量 共创美好生活”项目启动仪式后开展的首次暖心慰问活动,活动还特意为老人们准备…

地图导航测试点总结

地图导航是我们经常使用的工具,能帮助我们指引前进的方向。 接下来,会从功能测试、UI测试、兼容测试、安全测试、网络测试、性能测试、易用性测试、文档和国际化语言测试8个方面来编写地图导航测试用例。 一、功能测试 1. 输入起点和终点,…