.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