Поведение Docker для ядра C # (тип linux) - относится к сборке образа - PullRequest
0 голосов
/ 27 января 2019

Я пишу ядро ​​C # с помощью докеров (на основе контейнеров Linux).

В каждом изображении мне нужно скомпилировать + запустить.

Как я понимаю, мне нужны два изображения, однодля компиляции и один во время выполнения.Соответственно microsoft / dotnet: 2.1-sdk и microsoft / dotnet: 2.1-runtime

Я использую docker-compose, который выглядит следующим образом:

version: '3.4'

services:

  TestDock:
    image: test_dock
    volumes:
     - c:/my_data_folder:/data:rw
    build:
      context: ./my_projects/TestDock/
      dockerfile: TestDock/Dockerfile      

Мой Dockerfile выглядит следующим образом: FROMmicrosoft / dotnet: 2.1-runtime AS base WORKDIR / app

FROM microsoft/dotnet:2.1-sdk AS build
WORKDIR /src
COPY TestDock/TestDock.csproj TestDock/

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

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

Все хорошо, но:

  1. Мне нужно включить изображения microsoft / dotnet: 2.1-runtime и microsoft/dotnet:2.1-sdk.

Для производства мне нужна только среда выполнения и без источника.Это огромный докер (более 500 МБ) - это нормально?

Уточнение: размер изображения зависит от размера файла и размера при запуске.

docker save my_image> my_image.tar

Это один размер.

docker-compose run my_image

Когда работает докер - он можетнемного места на диске и памяти - как это проверить?

Мне нужен докер минимального размера.

Могу ли я разделить докер на два докера?Также, как я могу использовать команду "docker-compose build" с определенным докером?

На некоторых компьютерах сборка занимает очень много времени (более 15 минут), но у меня много проектов, поэтому каждое исправление может занять много времени.

Почему на некоторых компьютерах это может занять слишком много времени (1 минута хороша против 15 минут плоха) - Что я могу проверить?Много ли установленных докеров может привести к низкой производительности?

Могу ли я контролировать, какой пользователь запускает каждое изображение?Что я могу сделать?

Как я могу отладить докер в отладчике (любой для ядра C #)?- Не только логи.

Спасибо.

1 Ответ

0 голосов
/ 28 января 2019

Таким образом, у вас есть несколько вопросов, и вы должны разбить их на разные SO-вопросы, я постараюсь ответить на два просто.

Вы следите за многоэтапными сборками Docker шаблон, которым вы поделились.Это означает, что вы уже сократили свой исполняемый контейнер до его наименьшего (в широком смысле) размера для приложения .NET Core.Вы можете удалить образ .NET Core SDK с рабочего сервера, но в действительности его не должно быть на вашем производственном сервере.Вы должны собирать свой образ на сервере сборки, производственному серверу просто нужно получить последний образ.

Что касается другого вашего вопроса: о пакетах Nuget.Вы должны работать с подключением к Интернету при получении последних пакетов Nuget.Если вы делаете это на производственном сервере, а интернет-соединение является уязвимым, снова используйте сервер сборки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...