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

时间:2018-08-13 21:39:44

标签: linux visual-studio docker .net-core

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

docker run MyApp

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

Linux已安装以下docker软件包。

$ sudo yum list installed "*docker*"
Loaded plugins: amazon-id, rhui-lb, search-disabled-repos
Installed Packages
docker-engine.x86_64                                17.05.0.ce-1.el7.centos                         @dockerrepo
docker-engine-selinux.noarch                        17.05.0.ce-1.el7.centos                         @dockerrepo

1 个答案:

答案 0 :(得分:5)

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

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

其他选择是将docker映像的push处理到容器注册表中,然后拉入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}

有了这个,我们只需要在服务器上安装最新版本即可。

值得注意的是,泊坞窗本身无法处理发布部分,因此如果您要启动,则需要手动或使用某些工具(如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 ...等的容器注册表,则相同。
  • 然后它向生产中的服务器发出发布请求,该服务器在单独的端口中运行特殊工具
  • 服务器收到发布请求并对其进行验证,为此,我们使用this tool(朋友是仓库的所有者)
  • 脚本接收请求,检查登录名,如果有效,则只需从gitlab容器注册表中进行提取,然后运行docker-compose up

注释

该工具并不完美,无论您选择哪种解决方案,无论您选择哪种解决方案,我们都可以从泊坞窗迁移到使用kubernetes,而您可以直接从计算机或某些CI集成连接到集群并直接进行部署您开始了解kubernetes如何为您提供帮助,可悲的是还需要学习另一层,但是如果您能够将任何云或金属不费力地发布到almos上,它具有后备,扩展和其他功能,那将是非常有前途的。

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