热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何从Windows向Linux机器发布.Net核心docker应用程序?

如何解决《如何从Windows向Linux机器发布.Net核心docker应用程序?》经验,为你挑选了1个好方法。

我在安装了Windows Docker的Windows 10 PC上使用Visual Studio 2017创建了具有Linux docker支持的.Net核心应用程序。我可以使用以下命令来运行它(控制台应用程序)

docker run MyApp

我有一台装有Docker的Linux机器。如何将.Net核心应用程序发布到Linux计算机?我需要在Linux机器上发布并运行dockerized应用程序。

Linux已安装以下Docker软件包。

$ sudo yum列表已安装“ * docker *”
加载的插件:amazon-id,rhui-lb,search-disabled-repos
已安装的套件
docker-engine.x86_64 17.05.0.ce-1.el7.centos @dockerrepo
docker-engine-selinux.noarch 17.05.0.ce-1.el7.centos @dockerrepo

rekiem87.. 5

有很多方法可以做到这一点,只需搜索CI / CD的任何工具即可。

最简单的方法是手动操作,连接到Linux服务器,git pull编写代码,然后运行与本地运行相同的命令。

另一个选择是将docker映像推送到容器注册表,然后拉入docker服务器,您就可以开始了

编辑:

您应该真正看一下一些CI服务,例如,在我们的环境中,我们使用GitLab,当我们进行推送以掌握项目时,有一个gitlab.yml构建项目,然后进行推送:

image: docker:latest
services:
- docker:dind

stages:
- build

api:
  variables:
    IMAGE_NAME: git.lagersoft.com:4567/gumbo/vtae/api:${CI_BUILD_REF}
  stage: build
  only:
    - master
  script:
    - docker build -t ${IMAGE_NAME} -f vtae.api/Dockerfile .
    - docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN ${IMAGE_NAME}
    - docker push ${IMAGE_NAME}

这样,我们只需要使用最新版本来拉入我们的服务器即可。

值得注意的是,docker本身并不处理发布部分,因此如果您要开始学习,您需要手动或使用某种工具(如gitlab,jenkins,circleci,亚马逊代码管道等任何CI工具)来完成。建议手动启动,然后集成一些CI工具。

编辑2

关于Visual Studio工具,我不建议将其用于本地开发以外的其他任何用途,因为是的,它只能在Windows中运行,并且只能在Visual Studio中使用(Rider最近才集成了它),因此请进行部署在Linux环境中,我们使用自己的docker和docker compose文件,无论如何它们都是基于默认值的,它们是这样的:

FROM microsoft/aspnetcore:2.0 AS base
WORKDIR /app
EXPOSE 80

FROM microsoft/aspnetcore-build:2.0 AS build
WORKDIR /src
COPY lagersoft.common/lagersoft.common.csproj lagersoft.common/
COPY vtae.redirect/vtae.redirect.csproj vtae.redirect/
COPY vtae.data/vtae.data.csproj vtae.data/
COPY vtae.common/vtae.common.csproj vtae.common/
RUN dotnet restore vtae.redirect/vtae.redirect.csproj
COPY . .
WORKDIR /src/vtae.redirect
RUN dotnet build vtae.redirect.csproj -c Release -o /app

FROM build AS publish
RUN dotnet publish vtae.redirect.csproj -c Release -o /app

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

该docker文件复制所有相关项目(我讨厌复制部分,但与Microsoft的默认文件相同),执行构建并发布应用程序,另一方面,我们有一个docker-compose来添加一些服务(此文件必须位于解决方案文件夹中才能访问所有相关项目):

version: '3.4'

services:  
  vtae.redirect.redis:
    image: redis
    volumes:
      - "./volumes/redirect/redis/data:/data"
    container_name: vtae.redirect.redis

  vtae.redirect:
    image: vtae.redirect
    depends_on:
      - vtae.redirect.redis
    build:
      context: .
      dockerfile: vtae.redirect/Dockerfile
    ports: 
      - "8080:80"
    volumes:
      - "./volumes/redirect/data:/data"
    container_name: vtae.redirect
    entrypoint: dotnet /app/vtae.redirect.dll

有了这部分,只剩下要做一个提交,然后拉入服务器并运行docker-compose up命令来运行我们的应用程序(您可以直接从docker文件中执行此操作,但是使用docker compose可以更轻松,更易于管理。

编辑3

为了在服务器中进行部署,我们使用了两个工具。

提交完成后,首先运行gitlab ci

它使构建在docker文件中指定,并将其推送到我们的Gitlab容器注册表,如果它是亚马逊,谷歌,azure等的容器注册表,则相同...

然后向生产中的服务器发出发布请求,该服务器在单独的端口中运行特殊工具

服务器收到发帖请求并对其进行验证,为此,我们使用此工具(朋友是仓库的所有者)

该脚本接收请求,检查登录名,如果它有效,则只需从gitlab容器注册表中进行拉取并运行docker-compose up

笔记

该工具并不完美,无论您选择哪种解决方案,无论您选择哪种解决方案,都可以直接从您的计算机或某些CI集成直接连接到群集并直接进行部署,所以我们正从docker转向使用kubernetes。要了解kubernetes如何为您提供帮助,可悲的是,还需要学习另外一层,但是如果您能够将不费吹灰之力的云或金属发布到almos上,它具有后备,扩展和其他功能,这是非常有希望的。

另外, 如果您不希望或不能使用容器注册表(强烈建议采用这种方式),则可以在执行它的.sh中使用相同的工具,先执行git pull,然后执行docker build或docker compose。最简单的方案是自己创建脚本,然后在其中将ssh传送到服务器,以zip格式上传文件,然后在服务器中运行它,请记住,Ubuntu在Microsoft商店中并且可以运行此脚本,但是其他解决方案更“独立”和可扩展,因此,请您选择!



1> rekiem87..:

有很多方法可以做到这一点,只需搜索CI / CD的任何工具即可。

最简单的方法是手动操作,连接到Linux服务器,git pull编写代码,然后运行与本地运行相同的命令。

另一个选择是将docker映像推送到容器注册表,然后拉入docker服务器,您就可以开始了

编辑:

您应该真正看一下一些CI服务,例如,在我们的环境中,我们使用GitLab,当我们进行推送以掌握项目时,有一个gitlab.yml构建项目,然后进行推送:

image: docker:latest
services:
- docker:dind

stages:
- build

api:
  variables:
    IMAGE_NAME: git.lagersoft.com:4567/gumbo/vtae/api:${CI_BUILD_REF}
  stage: build
  only:
    - master
  script:
    - docker build -t ${IMAGE_NAME} -f vtae.api/Dockerfile .
    - docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN ${IMAGE_NAME}
    - docker push ${IMAGE_NAME}

这样,我们只需要使用最新版本来拉入我们的服务器即可。

值得注意的是,docker本身并不处理发布部分,因此如果您要开始学习,您需要手动或使用某种工具(如gitlab,jenkins,circleci,亚马逊代码管道等任何CI工具)来完成。建议手动启动,然后集成一些CI工具。

编辑2

关于Visual Studio工具,我不建议将其用于本地开发以外的其他任何用途,因为是的,它只能在Windows中运行,并且只能在Visual Studio中使用(Rider最近才集成了它),因此请进行部署在Linux环境中,我们使用自己的docker和docker compose文件,无论如何它们都是基于默认值的,它们是这样的:

FROM microsoft/aspnetcore:2.0 AS base
WORKDIR /app
EXPOSE 80

FROM microsoft/aspnetcore-build:2.0 AS build
WORKDIR /src
COPY lagersoft.common/lagersoft.common.csproj lagersoft.common/
COPY vtae.redirect/vtae.redirect.csproj vtae.redirect/
COPY vtae.data/vtae.data.csproj vtae.data/
COPY vtae.common/vtae.common.csproj vtae.common/
RUN dotnet restore vtae.redirect/vtae.redirect.csproj
COPY . .
WORKDIR /src/vtae.redirect
RUN dotnet build vtae.redirect.csproj -c Release -o /app

FROM build AS publish
RUN dotnet publish vtae.redirect.csproj -c Release -o /app

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

该docker文件复制所有相关项目(我讨厌复制部分,但与Microsoft的默认文件相同),执行构建并发布应用程序,另一方面,我们有一个docker-compose来添加一些服务(此文件必须位于解决方案文件夹中才能访问所有相关项目):

version: '3.4'

services:  
  vtae.redirect.redis:
    image: redis
    volumes:
      - "./volumes/redirect/redis/data:/data"
    container_name: vtae.redirect.redis

  vtae.redirect:
    image: vtae.redirect
    depends_on:
      - vtae.redirect.redis
    build:
      context: .
      dockerfile: vtae.redirect/Dockerfile
    ports: 
      - "8080:80"
    volumes:
      - "./volumes/redirect/data:/data"
    container_name: vtae.redirect
    entrypoint: dotnet /app/vtae.redirect.dll

有了这部分,只剩下要做一个提交,然后拉入服务器并运行docker-compose up命令来运行我们的应用程序(您可以直接从docker文件中执行此操作,但是使用docker compose可以更轻松,更易于管理。

编辑3

为了在服务器中进行部署,我们使用了两个工具。

提交完成后,首先运行gitlab ci

它使构建在docker文件中指定,并将其推送到我们的Gitlab容器注册表,如果它是亚马逊,谷歌,azure等的容器注册表,则相同...

然后向生产中的服务器发出发布请求,该服务器在单独的端口中运行特殊工具

服务器收到发帖请求并对其进行验证,为此,我们使用此工具(朋友是仓库的所有者)

该脚本接收请求,检查登录名,如果它有效,则只需从gitlab容器注册表中进行拉取并运行docker-compose up

笔记

该工具并不完美,无论您选择哪种解决方案,无论您选择哪种解决方案,都可以直接从您的计算机或某些CI集成直接连接到群集并直接进行部署,所以我们正从docker转向使用kubernetes。要了解kubernetes如何为您提供帮助,可悲的是,还需要学习另外一层,但是如果您能够将不费吹灰之力的云或金属发布到almos上,它具有后备,扩展和其他功能,这是非常有希望的。

另外, 如果您不希望或不能使用容器注册表(强烈建议采用这种方式),则可以在执行它的.sh中使用相同的工具,先执行git pull,然后执行docker build或docker compose。最简单的方案是自己创建脚本,然后在其中将ssh传送到服务器,以zip格式上传文件,然后在服务器中运行它,请记住,Ubuntu在Microsoft商店中并且可以运行此脚本,但是其他解决方案更“独立”和可扩展,因此,请您选择!


推荐阅读
  • 本文介绍了NetCore WebAPI开发的探索过程,包括新建项目、运行接口获取数据、跨平台部署等。同时还提供了客户端访问代码示例,包括Post函数、服务器post地址、api参数等。详细讲解了部署模式选择、框架依赖和独立部署的区别,以及在Windows和Linux平台上的部署方法。 ... [详细]
  • OpenCV4.5.0+contrib编译流程及解决错误方法
    本文介绍了OpenCV4.5.0+contrib的编译流程,并提供了解决常见错误的方法,包括下载失败和路径修改等。同时提供了相关参考链接。 ... [详细]
  •     这里使用自己编译的hadoop-2.7.0版本部署在windows上,记得几年前,部署hadoop需要借助于cygwin,还需要开启ssh服务,最近发现,原来不需要借助cy ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 标题: ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • 如何查询zone下的表的信息
    本文介绍了如何通过TcaplusDB知识库查询zone下的表的信息。包括请求地址、GET请求参数说明、返回参数说明等内容。通过curl方法发起请求,并提供了请求示例。 ... [详细]
  • 本文介绍了OpenStack的逻辑概念以及其构成简介,包括了软件开源项目、基础设施资源管理平台、三大核心组件等内容。同时还介绍了Horizon(UI模块)等相关信息。 ... [详细]
  • 本文介绍了一种轻巧方便的工具——集算器,通过使用集算器可以将文本日志变成结构化数据,然后可以使用SQL式查询。集算器利用集算语言的优点,将日志内容结构化为数据表结构,SPL支持直接对结构化的文件进行SQL查询,不再需要安装配置第三方数据库软件。本文还详细介绍了具体的实施过程。 ... [详细]
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
  • 全面介绍Windows内存管理机制及C++内存分配实例(四):内存映射文件
    本文旨在全面介绍Windows内存管理机制及C++内存分配实例中的内存映射文件。通过对内存映射文件的使用场合和与虚拟内存的区别进行解析,帮助读者更好地理解操作系统的内存管理机制。同时,本文还提供了相关章节的链接,方便读者深入学习Windows内存管理及C++内存分配实例的其他内容。 ... [详细]
  • Mono为何能跨平台
    概念JIT编译(JITcompilation),运行时需要代码时,将Microsoft中间语言(MSIL)转换为机器码的编译。CLR(CommonLa ... [详细]
  • 场景1.IE,Firefox浏览器访问不了网站,谷歌浏览器可以,返回错误码DNS_PROBE_POSSIBLE.2.pingwww.qq.com可以ping通,ping局域 ... [详细]
  • 线程漫谈——线程基础
    本系列意在记录Windwos线程的相关知识点,包括线程基础、线程调度、线程同步、TLS、线程池等。进程与线程理解线程是至关重要的,每个进程至少有一个线程,进程是线程的容器,线程才是真正的执行体,线程必 ... [详细]
author-avatar
94爱拍就是爱拍
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有