第 8 節

手動創建Docker鏡像

0瀏覽次數0訪問次數--跳出率--平均停留

(嫌麻煩的話,直接去看各種docker容器部署的章節)(有別人給你創建好的,就別自己折騰啦)

DockerFile

指令說明示例
FROM指定基礎鏡像,是 Dockerfile 的起點FROM ubuntu:22.04
LABEL添加元數據(如作者、版本等)LABEL maintainer="you@example.com"
ENV設置環境變量ENV PORT=8080
ARG構建參數,只在構建期間可用ARG VERSION=1.0
RUN構建鏡像時運行命令RUN apt-get update && apt-get install -y curl
COPY複製文件到鏡像中COPY . /app
ADD類似 COPY,額外支持解壓 .tar 文件或遠程 URL(不推薦用於 URL)ADD archive.tar.gz /data/
WORKDIR設置工作目錄WORKDIR /opt
CMD設置容器啟動時默認命令(可被 docker run 覆蓋)CMD "node", "index.js"
ENTRYPOINT設置容器啟動時固定命令(通常用於 CLI 工具等)ENTRYPOINT "python3"
EXPOSE聲明鏡像內服務監聽的端口(不會自動映射)EXPOSE 80
VOLUME聲明數據卷掛載點VOLUME "/data"
USER設置後續命令執行的用戶USER appuser
ONBUILD當鏡像作為其他鏡像基礎鏡像時觸發的構建指令ONBUILD COPY . /src
SHELL更改默認 shell,比如將 sh -c 改為 bash -cSHELL "/bin/bash", "-c"
HEALTHCHECK定義容器運行時的健康檢查命令HEALTHCHECK CMD curl --fail http://localhost:8080
STOPSIGNAL容器停止時發送的信號STOPSIGNAL SIGKILL

自己創建容器

手動創建

https://github.com/tungchiahui/ros-docker


# DockerFile内容请看Github仓库中的DockerFile

在x86電腦上編譯x86的:

docker build -t ros-melodic-cuda118-cudnn8-bionic:latest .

docker build -t ros-noetic-focal:latest .

docker build -t ros-humble-jammy:latest .

docker build -t ros-jazzy-noble:latest .

docker build -t ros-humble-opencv411-cuda128-cudnn970-jammy:latest .

docker build -t ros-jazzy-opencv411-cuda128-cudnn970-noble:latest .

鏡像大小5GB(壓縮後的大小詳見DockerHub)

將 Docker 鏡像推送到 Docker Hub 的步驟如下:

  1. 創建 Docker Hub 賬戶

如果你還沒有 Docker Hub 賬戶,請前往 Docker Hub 註冊一個免費賬戶。

  1. 登錄 Docker Hub

在終端中使用以下命令登錄到你的 Docker Hub 賬戶:

docker login

輸入你的 Docker Hub 用戶名和密碼進行驗證。

  1. 為你的鏡像打標籤

Docker Hub 使用 <用户名>/<镜像名>:<标签> 的格式來標識鏡像。你需要為你的鏡像打上標籤,以便能夠推送到 Docker Hub。使用以下命令:

docker tag ros-jazzy-noble:latest <你的用户>/ros-jazzy-noble:latest

例如,如果你的 Docker Hub 用戶名是 tungchiahui,你應該執行:

docker tag ros-noetic-focal:latest tungchiahui/ros-noetic-focal:latest

docker tag ros-humble-jammy:latest tungchiahui/ros-humble-jammy:latest

docker tag ros-jazzy-noble:latest tungchiahui/ros-jazzy-noble:latest

docker tag ros-humble-opencv411-cuda128-cudnn970-jammy:latest tungchiahui/ros-humble-opencv411-cuda128-cudnn970-jammy:latest

docker tag ros-jazzy-opencv411-cuda128-cudnn970-noble:latest tungchiahui/ros-jazzy-opencv411-cuda128-cudnn970-noble:latest
  1. 推送鏡像到 Docker Hub

使用以下命令將鏡像推送到 Docker Hub:

docker push <你的用户>/ros-noetic-jazzy-noble:latest

例如:

docker push tungchiahui/ros-noetic-focal:latest

docker push tungchiahui/ros-humble-jammy:latest

docker push tungchiahui/ros-jazzy-noble:latest

docker push tungchiahui/ros-humble-opencv411-cuda128-cudnn970-jammy:latest

docker push tungchiahui/ros-jazzy-opencv411-cuda128-cudnn970-noble:latest

docker push tungchiahui/ros-noetic-focal-arm64:latest
  1. 驗證推送成功

你可以通過訪問 Docker Hub 的個人頁面來驗證你的鏡像是否已成功推送。

注意事項

  • 確保你的鏡像大小在 Docker Hub 的限制範圍內(一般為 10GB)。
  • 如果你打算將鏡像公開,可以設置為公共倉庫;如果希望只有你自己可以訪問,可以設置為私有倉庫。

手動創建(跨平臺多架構構建)

如果您想在 x86/x64 電腦上即為本機x86設備構建鏡像,又想為樹莓派、Jetson等ARM64 設備構建 Docker 鏡像 ,需要使用 Docker 的跨平臺構建功能 。以下是完整解決方案:


1. 啟用 Docker 跨平臺構建

在 x86 主機上模擬 ARM64 環境需要以下工具:

第一步:啟用 buildx(只需執行一次)

docker buildx create --name multiarch_builder --use

這會創建並啟用一個支持多架構構建的 builder,電腦重啟後也依然存在,所以只用運行一次。

第二步:安裝 QEMU 支持(一般新版 Docker Desktop 已自帶,但是Linux必須要安裝) 如果你用的是服務器或Linux發行版,確保有 qemu 模擬器:

docker run --rm --privileged multiarch/qemu-user-static --reset -p yes

電腦重啟後,就會消失,所以需要你每次電腦重啟後,在buildx命令前,運行一次該命令即可。

第三步:構建多架構鏡像 用下面的命令構建 amd64 和 arm64:

docker buildx build --platform linux/amd64,linux/arm64 -t <你的镜像>:<> --push .

# 例子:
docker buildx build \
--platform linux/amd64,linux/arm64 \
 -t tungchiahui/ros:noetic-focal \
 --push \
 .

docker buildx build \
--platform linux/amd64,linux/arm64 \
 -t tungchiahui/ros:humble-jammy \
 --push \
 .

docker buildx build \
--platform linux/amd64,linux/arm64 \
 -t tungchiahui/ros:jazzy-noble \
 --push \
 .

 docker buildx build \
--platform linux/amd64,linux/arm64 \
 -t tungchiahui/opencv:411-cuda128-cudnn970-focal \
 --push \
 .

docker buildx build \
--platform linux/amd64,linux/arm64 \
 -t tungchiahui/opencv:411-cuda128-cudnn971-jammy \
 --push \
 .

 docker buildx build \
--platform linux/amd64,linux/arm64 \
 -t tungchiahui/opencv:411-cuda128-cudnn971-noble \
 --push \
 .

docker buildx build \
--platform linux/amd64,linux/arm64 \
 -t tungchiahui/ros-opencv:noetic-411-cuda128-cudnn970-focal \
 --push \
 .

docker buildx build \
--platform linux/amd64,linux/arm64 \
 -t tungchiahui/ros-opencv:humble-411-cuda128-cudnn970-jammy \
 --push \
 .

 docker buildx build \
--platform linux/amd64,linux/arm64 \
 -t tungchiahui/ros-opencv:jazzy-411-cuda128-cudnn970-noble \
 --push \
 .

  docker buildx build \
--platform linux/amd64,linux/arm64 \
 -t sdutvincirobot/ros-opencv:humble-411-cuda128-cudnn970-jammy \
 --push \
 .

說明: --platform 指定多架構。 --push 是必須的,因為 buildx 的多平臺構建默認是不能本地加載的(除非加 --load,但那隻能支持單一架構)。

清除構建緩存


# 清理BuildKit构建缓存
docker builder prune -f

音乐页