.net core 2.2 (API) + файл реакции (ui) Docker - PullRequest
0 голосов
/ 05 ноября 2019

Я совершенно новичок в докере и пытаюсь выяснить, как использовать докер в случае, когда у меня есть решение с 7 проектами, в моем случае это API. И для пользовательского интерфейса я использую activJS.

Я попробовал этот Dockerfile. Front работает на порту 3000 и работает, но у меня нет подключения к API внутри контейнера.

FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build-env
WORKDIR /app

COPY /admin.api/DeployOutput/ ./
ENTRYPOINT ["dotnet", "Admin.Api.dll"]

FROM node:12 as react-build
WORKDIR /app
COPY /admin.ui/ ./

RUN npm install
CMD [ "npm", "start" ]

В package.json я ввожу URL для подключения к API

  "proxy": "https://localhost:5001",
  "eslintConfig": {
    "extends": "react-app"
  },

если я запускаю его локально (не используя Docker) - проект работает

API работает на портах 5000 и 5001.

Мне нужно написать Dockerfile, который создаст образ с UI + API

1 Ответ

0 голосов
/ 05 ноября 2019

Поэтому мой рекомендуемый подход - использовать два отдельных контейнера, один для API и другой для внешнего интерфейса.

#1 API

# Step 1 - build
FROM microsoft/dotnet:2.2-sdk AS build
WORKDIR /build

COPY . . # copy everything from where the dockerfile is, to current workdir inside the container (sloppy but it works)
RUN dotnet publish -o out # compile the dll's and put them in an "out" directory

# Step 2 - runtime (compiled dll:s)
FROM microsoft/dotnet:2.2-aspnetcore-runtime
WORKDIR /app
COPY --from=build /build/out . # copy your compiled dll's from your BUILD CONTAINER and place them inside your runtime container

EXPOSE 5000/tcp # this is only to document what port is in use
ENTRYPOINT [ "dotnet", "API.dll", "--urls", "http://*:5000"] # the name of your DLL to run

Одна вещь, которую я считаю полезной для«Отладка» сборок в Dockerfiles заключается в добавлении RUN ls -al для вывода текущего каталога, чтобы вы могли видеть, где вы находитесь, какие файлы создаются. Не стесняйтесь добавлять их.

#2 Frontend - angular example, but is probably very simular to react

# build
FROM node:10.9.0-alpine as node
WORKDIR /app

COPY . .

# npm install
RUN npm i -g @angular/cli@8.3.2
RUN npm install
RUN ng build --prod

# runtime
FROM nginx:1.13.12-alpine
COPY --from=node /app/out /usr/share/nginx/html

# RUN rm -r /etc/nginx/conf.d/default.conf # replace with your own server config if you like
COPY --from=node /app/default.conf /etc/nginx/conf.d/

Хорошо, давайте представим, что вы уже создали свои док-контейнеры, интерфейс и API. Только для запуска одного контейнера используйте docker run <image name> - но это не сопоставило порты с host machine. Для этого добавьте аргументы для сопоставления портов - что-то вроде этого docker run -p 3999:5000 <image name>. Чтобы убедиться, что он работает, откройте браузер и перейдите к localhost:3999/your/api/endpoint.

Первый аргумент -p 3999:5000 сопоставляет порт хост-машины :3999 с портом изолированного контейнера :5000, вы можете поменять его по желанию.

См. docker --help для получения дополнительных опций.

Еще один полезный совет - ввести командную оболочку с хост-машины в работающий контейнер, для этого выполните docker exec -it <container_id> bash или docker exec -it <container_id> sh. Чтобы просмотреть список запущенных контейнеров, сделайте docker ps или docker ps -a.

Не стесняйтесь задавать вопросы, если вы хотите, чтобы я обновил этот пост. Ура!

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