1.創建一個net7 webapi 項目
配置docker-compose.yml 支持
Deploy 中放的docker-compose.yml 文件
2.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/aspnet:7.0 AS base
WORKDIR /app
EXPOSE 8001
#配置運行端口
ENV ASPNETCORE_ENVIRONMENT=Development
ENV ASPNETCORE_URLS http://+:8001
FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build
WORKDIR /src
COPY ["Dev.DockerComposeTest.csproj", "./"]
RUN dotnet restore "./Dev.DockerComposeTest.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "Dev.DockerComposeTest.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "Dev.DockerComposeTest.csproj" -c Release -o /app/publish /p:UseAppHost=false
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Dev.DockerComposeTest.dll"]
#ENTRYPOINT ["dotnet", "Dev.DockerComposeTest.dll","--urls=http://*:8001"]
docker-compose.yml 文件
----------------------續更改
version: '3.4' services: docker-compose-demo01: build: context: ../Dev.DockerComposeTest/ dockerfile: Dockerfile image: docker-compose-demo01 container_name: docker-compose-demo01 restart: always volumes: - ./Logs:/app/Logs/ #映射日誌路徑 日誌會自動映射到容器外 最好是靜態資源 environment: # 設置環境變量,相當於docker run命令中的-e TZ: Asia/Shanghai LANG: en_US.UTF-8 #ASPNETCORE_ENVIRONMENT: Development #要有空格 #ASPNETCORE_URLS: http://+:5011 #environment: # 設置環境變量,相當於docker run命令中的-e #- ASPNETCORE_ENVIRONMENT=Development #- ASPNETCORE_URLS=http://+:5009 ports: - "8001:8001" #選擇網絡 networks: - docker-compose-demo-net01 networks: docker-compose-demo-net01: #driver: "bridge" external: false #使用docker-compose批量運行鏡像爲容器,默認會新建網絡,設置爲true是不用默認新建網絡,使用自定義網絡 volumes: Logs: {}
----------------續更改
version: '3.4' services: docker-compose-demo01: build: context: ../Dev.DockerComposeTest/ dockerfile: Dockerfile image: docker-compose-demo01 container_name: docker-compose-demo01 restart: always environment: # 設置環境變量,相當於docker run命令中的-e TZ: Asia/Shanghai LANG: en_US.UTF-8 #ASPNETCORE_ENVIRONMENT: Development #要有空格 #ASPNETCORE_URLS: http://+:5011 #environment: # 設置環境變量,相當於docker run命令中的-e #- ASPNETCORE_ENVIRONMENT=Development #- ASPNETCORE_URLS=http://+:5009 ports: - "8001:8001" #選擇網絡 networks: - docker-compose-demo-net01 networks: docker-compose-demo-net01: driver: "bridge"
docker-compose.yml 裏面有多個service
docker-compose up 鏡像名稱 -d
選項說明:
-d 在後臺運行服務容器。
--no-color 不使用顏色來區分不同的服務的控制檯輸出。
--no-deps 不啓動服務所鏈接的容器。
--force-recreate 強制重新創建容器,不能與 --no-recreate 同時使用。
--no-recreate 如果容器已經存在了,則不重新創建,不能與 --force-recreate 同時使用。
--no-build 不自動構建缺失的服務鏡像。
-t, --timeout TIMEOUT 停止容器時候的超時(默認爲 10 秒)。
————————————————
version: '3.4' services: docker-compose-demo01: build: context: ../Dev.DockerComposeTest/ dockerfile: Dockerfile image: docker-compose-demo01 container_name: docker-compose-demo01 restart: always environment: # 設置環境變量,相當於docker run命令中的-e TZ: Asia/Shanghai LANG: en_US.UTF-8 #ASPNETCORE_ENVIRONMENT: Development #ASPNETCORE_URLS: http://+:5011 #environment: # 設置環境變量,相當於docker run命令中的-e #- ASPNETCORE_ENVIRONMENT=Development #- ASPNETCORE_URLS=http://+:5009 ports: - "8001:8001" #選擇網絡 networks: - docker-compose-demo-net01 docker-compose-demo02: build: context: ../Dev.DockerComposeTest/ dockerfile: Dockerfile image: docker-compose-demo02 container_name: docker-compose-demo02 restart: always environment: # 設置環境變量,相當於docker run命令中的-e TZ: Asia/Shanghai LANG: en_US.UTF-8 #ASPNETCORE_ENVIRONMENT: Development #ASPNETCORE_URLS: http://+:5012 #environment: # 設置環境變量,相當於docker run命令中的-e #- ASPNETCORE_ENVIRONMENT=Development #- ASPNETCORE_URLS=http://+:5009 ports: - "8002:8002" #選擇網絡 networks: - docker-compose-demo-net01 networks: docker-compose-demo-net01: driver: "bridge"
docker-compose.yml 操作方法
獲得一個命令的幫助 docker-compose 命令 --help 構建並啓動所有容器,如果鏡像存在就重新構建 docker-compose up -d --build 啓動所有服務 docker-compose up -d 構建啓動nignx容器 docker-compose up -d nginx -f 指定使用的Compose配置文件啓動,默認爲docker-compose.yml,可以多次指定。 docker-compose -f docker-compose.yml up -d 運行一個服務,並在服務上執行一個命令 docker-compose run 容器id或容器名 ip addr 登錄到nginx容器中 docker-compose exec nginx bash 此命令將會停止 up 命令所啓動的容器,並移除網絡 docker-compose down 列出項目中運行的所有容器 docker-compose ps 列出項目中運行及未運行的所有容器 docker-compose ps -a 列出所有運行的服務容器 docker-compose ls 列出所有服務容器(包括未運行的容器) docker-compose ls -a 重新啓動nginx容器 docker-compose restart nginx 構建鏡像 docker-compose build nginx 不帶緩存的構建 docker-compose build --no-cache nginx 查看各個服務容器內運行的進程 docker-compose top 查看nginx的實時日誌 docker-compose logs -f nginx 列出 Compose 文件包含的鏡像 docker-compose images 驗證文件配置,當配置正確時,不輸出任何內容,當文件配置錯誤,輸出錯誤信息。 docker-compose config 以json的形式輸出nginx的docker日誌 docker-compose events --json nginx 暫停nignx容器 docker-compose pause nginx 恢復ningx容器 docker-compose unpause nginx 刪除容器(刪除前必須關閉容器,執行stop) docker-compose rm nginx 強制刪除容器(不必先關閉容器) docker-compose rm -f nginx 停止nignx容器 docker-compose stop nginx 啓動nignx容器 docker-compose start nginx 重啓項目中的nignx容器 docker-compose restart nginx 下載依賴的鏡像 docker-compose pull 推送服務依的鏡像 docker-compose push 設置指定服務運行的容器個數。通過service=num的參數來設置數量 docker-compose scale web=3 db=2 查看版本信息 docker-compose version