首页 > 数据库 >.net core 及 pgsql 在 Docker 中部署运行

.net core 及 pgsql 在 Docker 中部署运行

时间:2023-06-02 11:33:53浏览次数:46  
标签:5182 core 容器 pgsql 镜像 net docker

 

.net core 及 pgsql 在 Docker 中部署运行

  当前运行linux 系统为 : CentOS Stream release 8

  .net sdk 7.0、pgsql 12.0 、nginx 1.14.1、docker 24.0.1

  在安装前,建议更新系统中依赖包:

sudo yum update

本次所用到的工具主要有:

  1、docker:学习;

  2 、postgresql 数据库;

  3、dotnetcore:SDK环境;

  4、.net core 7.0  连接pgsql 的小项目;

  5、nginx:服务器代理;

一、docker 学习

  Docker 安装运行基础指令:

//按装指令
sudo yum install -y docker-ce docker-ce-cli containerd.io

//启动 docker
sudo systemctl start docker  或  service docker start

//重启 docker
sudo systemctl restart docker  或  service docker restart

//停止 docker
sudo systemctl stop docker  或  service docker stop

//卸载 docker-ce
sudo yum remove docker-ce
//设置开机docker 自启
systemctl enable docker

//查看 docker 版本
docker --version  或  docker -v

//删除安装包
yum remove docker-ce

//删除所有镜像,容器、docker 配置等
rm -rf /var/lib/docker

  docker 验证

// 拉取镜像    hello-world 默认已经存在
sudo docker pull hello-world

// 执行hello-world
sudo docker run hello-world

//如果执行之后,控制台显示如下信息,则说明Docker安装和启动成功:
[root@user]# docker run hello-world

Hello from Docker!
This message shows that your installation appears to be working correctly.
........

   

  docker 常用指令

//查看容器的挂载配置
docker inspect 容器名称/ID

//拉取镜像
docker pull 镜像名

//查看正在运行的容器  -a 查看所有容器:
docker ps

//进入容器,然后输入 ls 查看所有文件,cd <dir> 可进入子目录 
docker exec -it [容器Id/名称] /bin/bash  

//将容器中的 /wwwroot 目录拷贝到主机  /home/docker/carnieHtml
docker cp carnie:/wwwroot  /home/docker/carnieHtml

//实时查看容器运行日志
docker logs -f [容器Id/名称]

 

  liunx 常用指令

// 防护墙增加开放端口
sudo iptables -A INPUT -p tcp --dport [端口号] -j ACCEPT 

// 防火墙禁用端口
sudo iptables -A INPUT -p tcp --dport [端口号] -j DROP 

// 重启防火墙
sudo systemctl restart firewalld

// 查看所有进程及端口
netstat -tulpn

//Linux查看版本当前操作系统发行版信息
cat /etc/issue 
cat /etc/redhat-release

 

二、docker 下安装 pgsql

//拉取pgsql 12.0版本的镜像
sudo docker pull postgres:12

//运行 postgres:12
docker run --name pgsql -p 127.0.0.1:5432:5432 -e POSTGRES_PASSWORD=123456 -v /home/pgdata:/var/lib/postgresql/data -d postgres:12

-d 将以分离模式运行此容器,以便它在后台运行。
 
--name 是我们用来创建容器的名称。
-p 会将 PostgreSQL 容器端口 5432 绑定到主机上 5432 端口。127.0.0.1:5432 主机对外访问地址。 
-v 选项将容器卷 ( /var/lib/postgresql/data ) 内的数据文件夹绑定到 (/home/pgdata) 
-e 设置环境变量。在这种情况下,PostgreSQL 根密码。
//启动 pgsql
docker start pgsql

 

2.1 重置 pgsql 管理密码

//进入pgsql 容器
docker exec -it pgsql /bin/sh

//登录 pgsql
psql -U postgres

//修改postgres 登录密码为  654321, 注意需要 ; 结束
ALTER USER postgres WITH PASSWORD '654321';

//通过navicat 修改管理员密码,运行sql ALTER USER postgres WITH PASSWORD '654321'

 

三、.net core  程序 docker 运行

   测试用的 .net core 项目使用的是.net 7.0 + pgsql,请自行准备一个小项目进行发布,可在项目下创建 build.cmd,然后双击执行编译打包

del /F /S /Q app
dotnet publish -c Release -v m -o .\app

  

 3.1  .net 运行环境安装

//查看现linux 下.net 版本
dotnet --list-sdks

// 安装.net 的sdk 或 运行时,Sdk 是包含运行时
sudo yum install dotnet-sdk-6.0
sudo yum install dotnet-runtime-6.0
//由于.net 7 SDK还没提供标准镜像,需从微软官方下载安装
//参考地址:https://learn.microsoft.com/zh-cn/dotnet/core/install/linux-centos
sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
sudo yum install dotnet-sdk-7.0

 3.2  .net 项目准备

  用vs 打开 .net  项目,在项目中 右键 -> 添加 -> Docker 的支持,会生成一个Dockerfile的文件,默认的信息比较多,目前我就来个最简单的精简版

#运行低包,指定项目的运行环境,这个不要修改
FROM mcr.microsoft.com/dotnet/aspnet:7.0 AS base

#容器中运行的工作目录,会在容器中创建 app 文件夹
WORKDIR /app

#容器要开放的端口,主机访问容器的端口,可以忽略,后期运行时 通过 -p 指定 EXPOSE 5182
#COPY . . 表示将主机Dockerfile 所在文件夹的所有内容,复制到镜像(WORKDIR) /app 目录下
#copy ./app . 表示将主机 Dockerfile 所在相对目录 app 复制到镜像 WORKDIR
COPY . .

#修改 donet 程序默认运行端口为 5182
ENV ASPNETCORE_URLS=http://*:5182

#dotnet 运行程序时,指定 urls 及端口
ENTRYPOINT ["dotnet", "Taichuan.Carnie.Web.dll","--server.urls","http://*:5182"]

3.3  .net 项目打包镜像
  
首先将 .net 编译后的程序及 Dockerfile 上传到服务器,然后 cd 到对应的目录。
//在打包前建议验证一下dotnet 程序是否要运行,然后访问一下是否正常
dotnet Carnie.Web.dll --urls "http://*:5182"
//打包.net 镜像,测试用的项目
docker build -t carnie .

//查看镜像文件列表
docker images

//删除镜像
docker rmi 镜像名称/Id

 3.4  运行.net 项目镜像

//创建静态资源目录
mkdir /home/docker/carnieHtml
mkdir /home/docker/carnieHtml/logs
// -v 挂载多个目录:(挂载后容器目录下的文件不会释放拷贝到主机,相当于将目录 link) 
// 将容器中的 /app/wwwroot 挂载到主机 /home/docker/carnieHtml 目录
// 将容器中的 /app/logs 挂载到主机 /home/docker/carnieHtml/logs 目录
// --name carnie 表示创建的容器名称
// -p 127.0.0.1:5182:5182 将容器的 5182 端口,隐射到主机 127.0.0.1:5182 端口
// carnie:latest 表示 carnie 镜像名称,latest 镜像 tag
docker run --name carnie -v /home/docker/carnieHtml:/app/wwwroot -v /home/docker/carnieHtml/logs:/app/logs -p 127.0.0.1:5182:5182 carnie:latest

//启动net 项目容器
docker start carnie

//检查是否正常
curl 127.0.0.1:1582


3.5 修改已运行的容器挂载(慎用)
在特殊情况当容器运行后需要在次挂载目录,可以通过xftp 进入  /var/lib/docker/containers/容器Id.
//以下操作我暂未做过验证,有空的时候可以验证一下;

//在修改配置文件前,先停止 docker 服务:
service docker stop
//修改配置文件,请跟据内容进行修改
config.v2.json  修改 MountPoints
hostconfig.json  修改 Binds

//修改完后成后启动docker
service docker start
四、nginx 网关绑定

  这是略过nginx  的安装过程,网上有很多安装方式,配置 nginx 绑定域名访问 docker 容器中的 net 项目,端口号 5182

  xftp 进入 nginx 配置目录:/etc/nginx/conf.d/default.conf

 在配置文件中 追加以下绑定代码:
server{
        listen    80;
        server_name    carnie.mz9.net;
            location /
            {
	proxy_http_version 1.1;
	proxy_buffer_size 64k;
            	proxy_buffers   32 32k;
            	proxy_busy_buffers_size 128k;
                proxy_set_header Host $host;
                proxy_set_header X-Real-Ip $remote_addr;
                proxy_set_header X-Forwarded-For $remote_addr;
                proxy_pass http://127.0.0.1:5182;
            }
}

  配置保存后重启 nginx

//重启 nginx
service nginx restart

  打开浏览器访问:carnie.mz9.net


-------------------------------------------------------未完待续----------------------------------------------------------------------

如果您在阅读过程中,遇到一些问题,欢迎留言讨论。

未完待续……

 

标签:5182,core,容器,pgsql,镜像,net,docker
From: https://www.cnblogs.com/intotf/p/17449358.html

相关文章

  • Kubernetes上安装nacos
    k8s配置---apiVersion:apps/v1kind:Deploymentmetadata:name:nacosnamespace:comspec:selector:matchLabels:app:nacos-serverreplicas:1revisionHistoryLimit:1strategy:type:Recreatetemplate:metadata:labe......
  • https://blog.csdn.net/weixin_58018769/article/details/130380746
     :move="onMove" onMove(e){console.log(e);letmoveName=e.draggedContext.element.name//这个是当前拖拽的控件名//接下来判断该控件要不要拖进指定的容器if(moveName=='禁止拖拽进容器的控件名'&&e.to._prevClass=='要拖进的容器的class名......
  • Region Proposal Network (RPN) 架构详解
    动动发财的小手,点个赞吧!简介如果您正在阅读这篇文章,那么我假设您一定听说过用于目标检测的RCNN系列,如果是的话,那么您一定遇到过RPN,即区域提议网络。如果您不了解RCNN系列,那么我强烈建议您在深入研究RPN之前单击此处阅读这篇文章。因此我们知道,在目标检测算法中,目标是生......
  • net 6使用FluentValidation校验请求数据
    1,nuget增加FluentValidation.AspNetCore2.DI中添加builder.Services.AddFluentValidation(opt=>{opt.RegisterValidatorsFromAssembly(Assembly.GetEntryAssembly());});3.添加具体的校验类usingFluentValidation;namespaceEShopWebApi.Controllers;public......
  • Fortinet 方案初了解
    Fortinet解决方案初了解目录Fortinet解决方案初了解企业数字化转型Forinet解决方案介绍使用场景公司介绍Fortinet产品和方案的核心永远是以安全为核心、以安全做为驱动,在一众厂商当中比较特别!企业数字化转型我们经常会在各种场景看到“企业数字化转型”,“互联网+”这......
  • Kubernetes CKA考试之Killer Simulator(下)
    目录Question16|NamespacesandApiResourcesQuestion17|FindContainerofPodandcheckinfoQuestion18|FixKubeletQuestion19|CreateSecretandmountintoPodQuestion20|UpdateKubernetesVersionandjoinclusterQuestion21|CreateaStaticPod......
  • .Net NPOI Excel 导出
    NPOI导出Excel最终效果图   环境:Revit,WPF,NPOI2.5.6,.NetFramework4.7.2一、引用NPOI 右击项目引用,选择"管理NuGet程序包",在浏览搜索NPOI,选择版本(我这里是2.5.6),安装   安装成功后,引用里会出现这四个引用(NPOI,NPOI.OOXML,NPOI.OpenXml......
  • nethunter终端进入KALI时报错问题
    在我的设备安装Nethunter成功后,使用NetHunter内置的连接终端工具连接时报了一个这样的错误zsh:failedtoloadmodule`zsh/zle':/usr/lib/aarch64-linux-gnu/zsh/5.9/zsh/zle.so:cannotopensharedobjectfile:Nosuchfileordirectorykali#使用SSH连接也是一样的错......
  • net.sf.json-lib 下载不下来
    必须加上classifier官网:http://json-lib.sourceforge.net/Json-libcomesintwoflavors,dependingonthejdkcompatibility.json-lib-x.x-jdk13iscompatiblewithJDK1.3.1andupwards.json-lib-x.x-jdk15iscompatiblewithJDK1.5,includessupportforEnums......
  • .net core Abp定时任务实现
     publicclassUseTimeJob:Job//重点是继承Job {publicreadonlyIUserCourseJobTimeService_userCourseJobTimeService;publicreadonlyIOrganizationAppService_organizationAppService;privatereadonlyIOfflineCourseLiveRecordServic......