在過去的幾年里,Docker 席卷了軟件行業。Docker 為嵌入式開發人員提供了一個“用于開發、發布和運行應用程序的開放平臺”。docker提供的主要優勢是,它可以通過在容器中構建環境來將應用程序與其運行的基礎設施分開,然后可以在幾乎任何開發平臺上執行容器,為開發人員提供相同的環境。
在這篇文章中,我們將探討 Docker 以及嵌入式軟件開發人員如何使用它來改進他們的開發環境。
Docker 在嵌入式軟件開發中的使用
開發人員可以將 Docker 用于多種用途,但嵌入式軟件開發人員最感興趣的有兩個。
首先,開發人員可以使用他們的構建環境構建一個可移植的容器。這可確保每個開發人員都使用相同的工具和開發環境。新開發人員可以通過為他們提供對源代碼和用于構建 Docker 映像的相關 Docker 文件的訪問權限,幾乎立即啟動并運行。這可以緩解所有關于軟件未構建、擁有正確的庫、路徑等的問題和討論。
其次,開發人員可以構建一個 DevOps 管道,利用他們的容器來自動化構建、測試、分析和部署。自動化 DevOps 是一個非常強大的概念,對于成功使用它們的任何企業都非常有價值。大多數管道開發需要一些安裝了構建和測試環境的虛擬機或容器。嵌入式開發人員可以利用 Docker 創建這個環境,并使用 Jenkins 和 Gitlab 等工具來構建他們的 DevOps 系統。
Dockerfile 基礎知識
Docker 容器由 Docker 文件構建,通常稱為 Dockerfile,它是一個文本文件,包含構建 Docker 容器所需的所有命令。 例如,許多 Dockerfile 將以 FROM 命令開始,該命令指定構建 Dockerfile 的現有 docker 映像。有不同的選項,例如:
它使用最新的 Ubuntu 映像作為基礎,使用 gcc 的人可能會使用類似的東西:
FROM gcc:11.2.0
它使用特定版本的 gcc。(也可以使用 FROM gcc:latest)。
另一個常用命令是 WORKDIR。 這指定了可能出現的任何命令(如 RUN、CMD、ADD、COPY、ENTRYPOINT)的工作目錄。
一個 Docker 文件將包含設置開發環境所需的盡可能多的命令。但是,文件本身并不是 Docker 容器。要使用容器,我們需要先構建它。
構建 Docker 容器
一旦 Docker 文件包含構建映像所需的所有命令,就可以通過發出如下構建命令來構建映像:
## 構建docker映像
image:
docker build -t beningo/gcc-arm .
在上述命令中,調用 docker 來構建當前目錄中存在的 Dockerfile。 -t 是標簽參數。 在這種情況下,我將新創建的圖像標記為 beningo/gcc-arm。 例如,如果我運行命令:
docker images
我應該會收到我創建的所有 Docker 映像的列表:
標簽幫助我們識別映像。如您所見,我有一張我沒有標記的映像。了解映像是什么很有幫助。由于映像很容易達到 2 GB,因此如果有人不小心,它們會很快占用大量硬盤空間!
運行 Docker 映像
構建 Docker 容器后,我們要運行映像。 我們可以使用 docker run 命令在映像中運行命令,也可以使用 -it 以交互方式與映像交互,這將允許我們通過終端界面訪問我們正在運行的映像。運行 docker 映像的常用命令如下所示:
docker run –rm -it beningo/gcc-arm
–rm 告訴 Docker 我們要在退出卷時刪除它。如果我想訪問本地目錄中的源代碼,我還可以使用如下命令:
docker run –rm -it -v “$(PWD):/home/app” beningo/gcc-arm
如果我運行此命令然后導航到 /home/app 文件夾,我們可以看到我可以訪問我的代碼存儲庫:
然后我可以通過在終端中輸入 EXIT 來退出我的容器。 如果我不想退出,我可以繼續構建我的源代碼或執行我的容器可能具有的任何其他功能。
結論
對于希望簡化構建環境和構建 DevOps 流程的嵌入式團隊來說,Docker 是一個有用的工具,Docker 在概念上很簡單,很容易上手。某些細節可能很棘手,但可以很容易地解決它們,從而為嵌入式開發人員提供更大的靈活性并幫助他們改進流程。