Я создал простое приложение asp. net core в Visual Studio 2019 и добавил поддержку docker. Созданы файлы
Dockerfile, .dockerignore и docker -compose.
В командной строке я перехожу к папке docker -compose.yml, а затем запускаю команду
docker-compose up
Я вижу, что создаются контейнеры и выполняется сопоставление портов, так что я могу просматривать веб-приложение в браузере.
Итак, когда я запускаю следующую команду проверки в контейнере
docker inspect --format="{{ .NetworkSettings.Ports}}" ContainerId
, я получаю что-то вроде этого
map[80/tcp:[{0.0.0.0 32782}]]
Итак, теперь я могу просматривать приложение с помощью http://localhost: 32782 / index. html
Затем, если я разорву контейнеры с помощью
docker-compose down
, контейнеры будут остановлены и удалены. Созданное изображение остается.
Теперь, когда я выполняю docker запуск с этим изображением, чтобы запустить контейнер
docker run -it --rm ae39
, создается новый контейнер, но я не могу просматривать приложение, потому что нет сопоставления портов от контейнера к хосту. Я должен явно указать это, когда использую команду run. Только тогда я могу просматривать приложение, работающее внутри контейнера, формирующего хост.
Но когда я использую docker compose, мне не нужно указывать сопоставление портов. Произошло что-то волшебное, и мне были созданы сопоставления портов. Обратите внимание, что файл docker -compose.yml является обычным файлом и не содержит сопоставлений портов. Так же и Dockerfile. Они включены ниже для справки.
Мой вопрос: docker compose автоматически создает сопоставления портов? Если да, то как? Это нужно сделать с Visual Studio 2019
version: '3.4'
services:
generator31:
image: ${DOCKER_REGISTRY-}generator31
build:
context: .
dockerfile: generator31/Dockerfile
И файл 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/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 80
FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src
COPY ["generator31/generator31.csproj", "generator31/"]
RUN dotnet restore "generator31/generator31.csproj"
COPY . .
WORKDIR "/src/generator31"
RUN dotnet build "generator31.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "generator31.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "generator31.dll"]