手動創建Docker鏡像
(嫌麻煩的話,直接去看各種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 -c | SHELL "/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 的步驟如下:
- 創建 Docker Hub 賬戶
如果你還沒有 Docker Hub 賬戶,請前往 Docker Hub 註冊一個免費賬戶。
- 登錄 Docker Hub
在終端中使用以下命令登錄到你的 Docker Hub 賬戶:
docker login
輸入你的 Docker Hub 用戶名和密碼進行驗證。
- 爲你的鏡像打標籤
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
- 推送鏡像到 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
- 驗證推送成功
你可以通過訪問 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
