IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 将.NetCore3.1程序部署到Docker上 -> 正文阅读

[系统运维]将.NetCore3.1程序部署到Docker上

关于Docker的基本操作,请参考:Docker学习
本文使用的Linux系统是Centos8
使用的VS是VS2022
使用的数据库是Mysql

为C#程序添加Dockerfile

右键单击启动项目,添加Docker支持:
在这里插入图片描述
选择Linux:
在这里插入图片描述
可以看到,自动添加了Dockerfile文件:
在这里插入图片描述
需要注意的是,自动生成的Dockerfile是需要将源码拷贝到Linux下进行打包构建镜像的。在构建镜像的时候,会编译源代码。自动生成的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:3.1 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/sdk:3.1 AS build
WORKDIR /src
COPY ["Langtian.ServerAPI/Langtian.ServerAPI.csproj", "Langtian.ServerAPI/"]
COPY ["Langtian.ServerAPI.Model/Langtian.ServerAPI.Model.csproj", "Langtian.ServerAPI.Model/"]
COPY ["../../Langtian.DataBaseModel/Langtian.DatabaseModel/Langtian.DatabaseModel.csproj", "../../Langtian.DataBaseModel/Langtian.DatabaseModel/"]
COPY ["Langtian.ServerAPI.Dao/Langtian.ServerAPI.Dao.csproj", "Langtian.ServerAPI.Dao/"]
RUN dotnet restore "Langtian.ServerAPI/Langtian.ServerAPI.csproj"
COPY . .
WORKDIR "/src/Langtian.ServerAPI"
RUN dotnet build "Langtian.ServerAPI.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "Langtian.ServerAPI.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Langtian.ServerAPI.dll"]

关于Dockerfile的指令意思,后面再写一篇文章单独介绍。
自动生成的Dockerfile文件分为多个镜像构建步骤。步骤如下:

  • 基础镜像->设置工作目录-开放端口
  • 设置工作目录->指定要复制的代码文件夹->还原Nuget包->复制所有指定的文件夹到镜像构建上下文->运行dotnet build编译项目,并设定输出到上下文的/app/build目录->运行dotnet publish发布项目文件到/app/pblish文件夹。
  • 从/app/publish文件夹,将全部文件复制到构建上下文。
  • 设置镜像启动的入口命令是 dotnet Langtian.ServerAPI.dll

由于我不想使用源代码构建,仅仅想发布后的文件拷贝到Linux上进行构建Docker镜像,所以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:3.1 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
EXPOSE 10000

FROM mcr.microsoft.com/dotnet/sdk:3.1 AS build
WORKDIR /app
COPY . .
ENTRYPOINT ["dotnet", "Langtian.ServerAPI.dll"]

记得将Dockerfile设置为始终复制到输出目录:
在这里插入图片描述

发布C#程序到指定文件夹

在这里插入图片描述
选择发布后的文件夹:
在这里插入图片描述
选择部署模式和目标运行时:
在这里插入图片描述
选择好之后点击发布按钮:

在这里插入图片描述
发布成功之后,会看到文件夹中有了很多文件,其中包含Dockerfile:
在这里插入图片描述

将发布文件夹传递到Linux目录

本文使用FinalShell进行传递文件
在这里插入图片描述

使用Docker拉取Mysql镜像并运行

由于本程序依赖于Mysql,所以必须先运行Mysql。

拉取Mysql镜像

docker pull mysql:latest
latest: Pulling from library/mysql
ffbb094f4f9e: Pull complete 
df186527fc46: Pull complete 
fa362a6aa7bd: Pull complete 
5af7cb1a200e: Pull complete 
949da226cc6d: Pull complete 
bce007079ee9: Pull complete 
eab9f076e5a3: Pull complete 
8a57a7529e8d: Pull complete 
b1ccc6ed6fc7: Pull complete 
b4af75e64169: Pull complete 
23390142f76f: Pull complete 
Digest: sha256:ff9a288d1ecf4397967989b5d1ec269f7d9042a46fc8bc2c3ae35458c1a26727
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest
[root@TONY ~]# 

查看下载的镜像:
在这里插入图片描述

创建容器并后台启动Mysql容器

docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:latest

指令解释:
run:创建并启动一个容器
-d:容器以后台的方式运行
-p:端口映射,前面一个是宿主主机端口,后面一个是docker容器的的端口
-e:Dockerfile中规定的环境变量,用于传递参数给应用程序。MYSQL_ROOT_PASSWORD是构建Mysql是指定的环境变量
最后一个就是镜像的名称。
一个镜像可以构建多个容器。
在这里插入图片描述
运行成功,会返回容器的ID

进入容器的Mysql命令行创建用户

由于root用户一般是不允许外部主机访问的,所以创建一个用户,用于外部主机(容器和容器之间的访问)访问Mysql
启动容器之后,可以查看运行的容器:

docker ps

在这里插入图片描述
进入容器的Mysql命令行:

docker exec -it dc26afdc79c9 bash

其中dc26afdc79c9为mysql容器的ID
进入命令行后,连接mysql:

mysql -uroot -p123456

在这里插入图片描述

Mysql创建用户

create user 'test'@'%' identified by 'Test@123';

'test'@'%' :指定用户名test可以所有IP访问
Test@123:密码
授予权限给用户:

grant all on *.* to 'test'@'%';

在这里插入图片描述

使用DBeaver连接容器中的Mysql测试

在这里插入图片描述

创建程序所需要的表…

至此Mysql在Docker容器中创建完成。

修改程序的数据库连接配置

上面我们已经把发布好的文件夹拷贝到/usr/docker-test/serverapi-linux目录下了
首先将当前目录切换到这个目录:

cd /usr/docker-test/serverapi-linux/

在这里插入图片描述

修改配置文件appsettings.json:
在这里插入图片描述

镜像构建

/usr/docker-test/serverapi-linux目录下,运行

docker build -t tony/mes-api:v1 .

-t:tag的意思。为镜像添加名称描述和版本。
注意:最后的.号不能够省略,表示Dockerfile在当前目录

终端输出如下所示:

[root@TONY serverapi-linux]# docker build -t tony/mes-api:v1 .
Sending build context to Docker daemon  22.96MB
Step 1/9 : FROM mcr.microsoft.com/dotnet/aspnet:3.1 AS base
 ---> e41b25ecf8bf
Step 2/9 : WORKDIR /app
 ---> Running in 999fe0e888e6
Removing intermediate container 999fe0e888e6
 ---> 4e086f5a5f3d
Step 3/9 : EXPOSE 80
 ---> Running in 70f10b42dc56
Removing intermediate container 70f10b42dc56
 ---> 4ffbb0994640
Step 4/9 : EXPOSE 443
 ---> Running in 124a9021ac6e
Removing intermediate container 124a9021ac6e
 ---> 55dffdd77766
Step 5/9 : EXPOSE 10000
 ---> Running in 805b1407f45b
Removing intermediate container 805b1407f45b
 ---> 40947ed642d2
Step 6/9 : FROM mcr.microsoft.com/dotnet/sdk:3.1 AS build
 ---> 7ed1cf292591
Step 7/9 : WORKDIR /app
 ---> Using cache
 ---> 4b749088bd25
Step 8/9 : COPY . .
 ---> 6fee3d2c7bf8
Step 9/9 : ENTRYPOINT ["dotnet", "Langtian.ServerAPI.dll"]
 ---> Running in 2b722f14fcf6
Removing intermediate container 2b722f14fcf6
 ---> 85a682aa2c39
Successfully built 85a682aa2c39
Successfully tagged tony/mes-api:v1

在这里插入图片描述

查看构建的镜像:

[root@TONY serverapi-linux]# docker images
REPOSITORY                        TAG       IMAGE ID       CREATED         SIZE
tony/mes-api                      v1        7540b38c0667   5 minutes ago   208MB
<none>                            <none>    85ebc7de55eb   5 minutes ago   733MB
mcr.microsoft.com/dotnet/sdk      3.1       7ed1cf292591   6 days ago      710MB
mcr.microsoft.com/dotnet/aspnet   3.1       e41b25ecf8bf   6 days ago      208MB
mysql                             latest    bbf6571db497   7 days ago      516MB
[root@TONY serverapi-linux]# 

可以看到刚刚构建的tony/mes-api

使用镜像创建容器并运行

docker run -d -p 10000:10000  tony/mes-api:v1

查看容器是否在运行:

docker ps

在这里插入图片描述
使用网页访问一下服务:
在这里插入图片描述
在这里插入图片描述
本程序部署的结构图解如下:
在这里插入图片描述

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-12-10 11:27:06  更:2021-12-10 11:29:20 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 4:15:00-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码