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