dotnet 基於 debian 創建一個 docker 的 sdk 鏡像
- 2020 年 3 月 12 日
- 筆記
我不能用官方的鏡像,因為我需要在小夥伴構建的 debian 鏡像上面安裝 dotnet sdk 用來做構建,其實在 docker 裏面需要找到一個個文件,然後複製代碼
這是小夥伴做的一個 jenkins 的鏡像 jenkins/slave 我需要在這個鏡像基礎上安裝 dotnet 進行構建
FROM jenkins/slave
在安裝 dotnet 之前需要通過官方 https://github.com/dotnet/dotnet-docker 找到對應的 docker 文件,這樣可以進行複製,可以看到官方是引用下面代碼 buildpack-deps:buster-scm 這個庫
FROM buildpack-deps:buster-scm
需要找到 buildpack-deps:buster-scm 的代碼
找到這個庫的代碼 https://github.com/docker-library/buildpack-deps/blob/b0fc01aa5e3aed6820d8fed6f3301e0542fbeb36/buster/curl/Dockerfile 可以複製,但是這個庫依賴 FROM buildpack-deps:buster-curl 這個庫,通過 docker hub 找到 https://github.com/docker-library/buildpack-deps/blob/b0fc01aa5e3aed6820d8fed6f3301e0542fbeb36/buster/curl/Dockerfile 也可以複製
# https://github.com/docker-library/buildpack-deps/blob/b0fc01aa5e3aed6820d8fed6f3301e0542fbeb36/buster/curl/Dockerfile # FROM debian:buster RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates curl netbase wget && rm -rf /var/lib/apt/lists/* RUN set -ex; if ! command -v gpg > /dev/null; then apt-get update; apt-get install -y --no-install-recommends gnupg dirmngr ; rm -rf /var/lib/apt/lists/*; fi # FROM buildpack-deps:buster-curl # https://github.com/docker-library/buildpack-deps/blob/99a1c33fda559272e9322b02a5d778bbd04154e7/buster/scm/Dockerfile # procps is very common in build systems, and is a reasonably small package RUN apt-get update && apt-get install -y --no-install-recommends git mercurial openssh-client subversion procps && rm -rf /var/lib/apt/lists/*
使用 dotnet 官方地址下載速度太慢了,我請了小夥伴幫我下載,然後我將 dotnet-sdk-3.1.102-linux-x64.tar.gz 和 PowerShell.Linux.x64.7.0.0-rc.2.nupkg 放在 docker 文件相同文件夾
接下來是複製 dotnet 的代碼
# https://raw.githubusercontent.com/dotnet/dotnet-docker/74c92451ecbd2876280ad51736a6eea4e98a1fb2/3.1/sdk/buster/amd64/Dockerfile # FROM buildpack-deps:buster-scm ENV # Enable detection of running in a container DOTNET_RUNNING_IN_CONTAINER=true # Enable correct mode for dotnet watch (only mode supported in a container) DOTNET_USE_POLLING_FILE_WATCHER=true # Skip extraction of XML docs - generally not useful within an image/container - helps performance NUGET_XMLDOC_MODE=skip # PowerShell telemetry for docker image usage POWERSHELL_DISTRIBUTION_CHANNEL=PSDocker-DotnetCoreSDK-Debian-10 # Install .NET CLI dependencies RUN apt-get update && apt-get install -y --no-install-recommends libc6 libgcc1 libgssapi-krb5-2 libicu63 libssl1.1 libstdc++6 zlib1g && rm -rf /var/lib/apt/lists/* # Install .NET Core SDK # 不從 https://dotnetcli.azureedge.net 下載,從本地複製 RUN dotnet_sdk_version=3.1.102 # && curl -SL --output dotnet.tar.gz https://dotnetcli.azureedge.net/dotnet/Sdk/$dotnet_sdk_version/dotnet-sdk-$dotnet_sdk_version-linux-x64.tar.gz && dotnet_sha512='9cacdc9700468a915e6fa51a3e5539b3519dd35b13e7f9d6c4dd0077e298baac0e50ad1880181df6781ef1dc64a232e9f78ad8e4494022987d12812c4ca15f29' && echo "$dotnet_sha512 dotnet.tar.gz" | sha512sum -c - && mkdir -p /usr/share/dotnet && tar -ozxf dotnet.tar.gz -C /usr/share/dotnet && rm dotnet.tar.gz && ln -s /usr/share/dotnet/dotnet /usr/bin/dotnet # Trigger first run experience by running arbitrary cmd && dotnet help # 不從 https://pwshtool.blob.core.windows.net 下載,從本地複製 # Install PowerShell global tool RUN powershell_version=7.0.0-rc.2 # && curl -SL --output PowerShell.Linux.x64.$powershell_version.nupkg https://pwshtool.blob.core.windows.net/tool/$powershell_version/PowerShell.Linux.x64.$powershell_version.nupkg # && powershell_sha512='59abcc11bd43fc8c1938a1854447c762092f03b5e2c6c354a82559eed6852e3920c5543c085fbe6fbe98871f96cd7409bb76b1537d3d8dee4e7432d578ec7603' # && echo "$powershell_sha512 PowerShell.Linux.x64.$powershell_version.nupkg" | sha512sum -c - && mkdir -p /usr/share/powershell && dotnet tool install --add-source / --tool-path /usr/share/powershell --version $powershell_version PowerShell.Linux.x64 && dotnet nuget locals all --clear && rm /PowerShell.Linux.x64.$powershell_version.nupkg && ln -s /usr/share/powershell/pwsh /usr/bin/pwsh && chmod 755 /usr/share/powershell/pwsh # To reduce image size, remove the copy nupkg that nuget keeps.
運行 docker build -t dotnet-sdk:3.0.102 .
就可以創建了
全部代碼
FROM jenkins/slave COPY dotnet-sdk-3.1.102-linux-x64.tar.gz dotnet.tar.gz COPY PowerShell.Linux.x64.7.0.0-rc.2.nupkg / # 使用國內源 RUN echo "" >> /etc/apt/sources.list && echo "deb http://ftp.cn.debian.org/debian/ buster main contrib non-free" >> /etc/apt/sources.list && echo "deb-src http://ftp.cn.debian.org/debian/ buster main contrib non-free" >> /etc/apt/sources.list && echo "deb http://ftp.cn.debian.org/debian-security/ buster/updates main contrib non-free" >> /etc/apt/sources.list && echo "deb-src http://ftp.cn.debian.org/debian-security/ buster/updates main contrib non-free" >> /etc/apt/sources.list && echo "deb http://ftp.cn.debian.org/debian/ buster-updates main contrib non-free" >> /etc/apt/sources.list && echo "deb-src http://ftp.cn.debian.org/debian/ buster-updates main contrib non-free" >> /etc/apt/sources.list && echo "deb http://ftp.cn.debian.org/debian/ buster-backports main contrib non-free" >> /etc/apt/sources.list && echo "deb-src http://ftp.cn.debian.org/debian/ buster-backports main contrib non-free" >> /etc/apt/sources.list # https://github.com/docker-library/buildpack-deps/blob/b0fc01aa5e3aed6820d8fed6f3301e0542fbeb36/buster/curl/Dockerfile # FROM debian:buster RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates curl netbase wget && rm -rf /var/lib/apt/lists/* RUN set -ex; if ! command -v gpg > /dev/null; then apt-get update; apt-get install -y --no-install-recommends gnupg dirmngr ; rm -rf /var/lib/apt/lists/*; fi # FROM buildpack-deps:buster-curl # https://github.com/docker-library/buildpack-deps/blob/99a1c33fda559272e9322b02a5d778bbd04154e7/buster/scm/Dockerfile # procps is very common in build systems, and is a reasonably small package RUN apt-get update && apt-get install -y --no-install-recommends git mercurial openssh-client subversion procps && rm -rf /var/lib/apt/lists/* # https://raw.githubusercontent.com/dotnet/dotnet-docker/74c92451ecbd2876280ad51736a6eea4e98a1fb2/3.1/sdk/buster/amd64/Dockerfile # FROM buildpack-deps:buster-scm ENV # Enable detection of running in a container DOTNET_RUNNING_IN_CONTAINER=true # Enable correct mode for dotnet watch (only mode supported in a container) DOTNET_USE_POLLING_FILE_WATCHER=true # Skip extraction of XML docs - generally not useful within an image/container - helps performance NUGET_XMLDOC_MODE=skip # PowerShell telemetry for docker image usage POWERSHELL_DISTRIBUTION_CHANNEL=PSDocker-DotnetCoreSDK-Debian-10 # Install .NET CLI dependencies RUN apt-get update && apt-get install -y --no-install-recommends libc6 libgcc1 libgssapi-krb5-2 libicu63 libssl1.1 libstdc++6 zlib1g && rm -rf /var/lib/apt/lists/* # Install .NET Core SDK # 不從 https://dotnetcli.azureedge.net 下載,從本地複製 RUN dotnet_sdk_version=3.1.102 # && curl -SL --output dotnet.tar.gz https://dotnetcli.azureedge.net/dotnet/Sdk/$dotnet_sdk_version/dotnet-sdk-$dotnet_sdk_version-linux-x64.tar.gz && dotnet_sha512='9cacdc9700468a915e6fa51a3e5539b3519dd35b13e7f9d6c4dd0077e298baac0e50ad1880181df6781ef1dc64a232e9f78ad8e4494022987d12812c4ca15f29' && echo "$dotnet_sha512 dotnet.tar.gz" | sha512sum -c - && mkdir -p /usr/share/dotnet && tar -ozxf dotnet.tar.gz -C /usr/share/dotnet && rm dotnet.tar.gz && ln -s /usr/share/dotnet/dotnet /usr/bin/dotnet # Trigger first run experience by running arbitrary cmd && dotnet help # 不從 https://pwshtool.blob.core.windows.net 下載,從本地複製 # Install PowerShell global tool RUN powershell_version=7.0.0-rc.2 # && curl -SL --output PowerShell.Linux.x64.$powershell_version.nupkg https://pwshtool.blob.core.windows.net/tool/$powershell_version/PowerShell.Linux.x64.$powershell_version.nupkg # && powershell_sha512='59abcc11bd43fc8c1938a1854447c762092f03b5e2c6c354a82559eed6852e3920c5543c085fbe6fbe98871f96cd7409bb76b1537d3d8dee4e7432d578ec7603' # && echo "$powershell_sha512 PowerShell.Linux.x64.$powershell_version.nupkg" | sha512sum -c - && mkdir -p /usr/share/powershell && dotnet tool install --add-source / --tool-path /usr/share/powershell --version $powershell_version PowerShell.Linux.x64 && dotnet nuget locals all --clear && rm /PowerShell.Linux.x64.$powershell_version.nupkg && ln -s /usr/share/powershell/pwsh /usr/bin/pwsh && chmod 755 /usr/share/powershell/pwsh # To reduce image size, remove the copy nupkg that nuget keeps.
我將本文用到兩個資源 CSDN 如果沒法下載請發我郵件
dotnet-sdk-3.1.102-linux-x64.tar.gz
PowerShell.Linux.x64.7.0.0-rc.2.nupkg
本作品採用 知識共享署名-非商業性使用-相同方式共享 4.0 國際許可協議 進行許可。歡迎轉載、使用、重新發佈,但務必保留文章署名林德熙(包含鏈接: https://blog.lindexi.com ),不得用於商業目的,基於本文修改後的作品務必以相同的許可發佈。如有任何疑問,請 與我聯繫 。