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
# 設定服務對外埠口(可自由修改,例如 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
留言
張貼留言