Docker整理

FOR python 

FROM  python:3.8-slim-buster #版本 可從DOCKER DESKTOP上找到

WORKDIR /app #切換位置 若無此資料夾 會自動建立

COPY . . #第一個參數代表本地 第二個參數代表容器上

RUN pip3 install -r requirement.txt #運行shell 命令 

CMD["python3" , "app.py"] #運行CMD 執行 python


FOR C# .NET Core 8.0

FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build #版本 可從DOCKER DESKTOP上找到

WORKDIR /src #切換位置 若無此資料夾 會自動建立

COPY . . #複製所有程式碼

RUN dotnet restore *.csproj #找尋目標csproj


# 建置 Release

ARG BUILD_CONFIGURATION=Release #建立變數

RUN dotnet build -c $BUILD_CONFIGURATION -o /app/build #可以建立出bin 等資訊檔 可用來弱掃等

#後面不指定csproj 就自動去抓專案裡的 csproj 建議自己去指定 如RUN dotnet restore *.csproj 一樣

RUN dotnet test #跑測試

RUN dotnet publish -c $BUILD_CONFIGURATION-o /app/publish #Release出來


# -----------------------------------------

# 2. Runtime Stage

# -----------------------------------------

FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS final #可從 Microsoft Container Registry (MCR) 中找


WORKDIR /app

# 從 build 階段複製編譯好的成果

COPY --from=build /app/publish . #來自 build階段的/app/publish

RUN addgroup --gid 1001 appgroup && adduser --disabled-password --gecos "" --uid 1001 --gid 1001 appuser

#addgroup --gid 1001 appgroup gid 為1001 群組名稱為 appgroup
#adduser --disabled-password --gecos "" --uid 1001 --gid 1001 appuser 建立使用者 不設定密碼 忽略個人訊息 使用者id為1001 群組為 1001 appuser使用者名稱
USER 1001:1001 #UID GID 上面建立的

# 設定服務對外埠口(可自由修改,例如 8080)

EXPOSE 8080

# 執行

ENTRYPOINT ["dotnet", "YourProjectName.dll"]




創建Image

build -t myProjectName . //在目標資料夾中找dockerfile

創建完畢後 執行 run -p 80:8080 -d myProjectName //-p 我方port:docker端port -d 在後台執行

DockerDesktop 指令

列舉容器 docker ps

停止 docker stop myProjectName 

重啟 docker restart myProjectName 

刪除 docker rm myProjectName 

啟動一個遠程的shell docker exec it myProjectName  /bin/bash

Volume 數據捲 類似容器的共用參數 

docker volume create myVolumeName //建立一個Volume
run -dp 80:
8080 -v myVolumeName:etc/finanac myProjectName //指定掛載到哪一個容器的路徑上

透過一個docker-compose.yaml 中定義

version:"3"
service:

  web:

    build: .

    ports:

      -"80:8080"

  db:

    image:"mysql"

    environment:

      MYSQL_DATABASE: dbName

      MYSQL_ROOT_PASSWORD:secret

    volumes:

      -myVolumeName:/var/lib/mysql

volumes:

  myVolumeName: //永久存放文件 


docker compose up -d 啟動所有容器

docker compose down 

不過新創的數據卷需要手動 除非使用 docker compose down --volumes


參考:https://www.youtube.com/watch?v=mPquwpxyUQU

留言

這個網誌中的熱門文章

無法載入檔案或組件 'System.IO.Compression' 或其相依性的其中之一。

MongoDB 入門

javascript 更改屬性及創建標籤