使用容器快速配置C/C++開發(fā)調(diào)試環(huán)境
對于很多新人來說,學習一門編程語言最難的部分可能就是環(huán)境的搭建,因為不同操作系統(tǒng)還有網(wǎng)絡的原因,很多時候一個環(huán)境搭建就勸退了很多新人,但是隨著容器化的出現(xiàn),現(xiàn)在這種問題完全不存在了,因為環(huán)境的搭建可以通過容器分分鐘完成,我們需要做的就是把配置文件復制過來,然后運行 docker 容器即可。
Docker 鏡像的優(yōu)點
過去我們開發(fā)應用都是在本地搭建各種環(huán)境,然后進行開發(fā),最后部署到到服務器上,但是因為環(huán)境的不同,往往導致出現(xiàn)各種問題,并且調(diào)試起來也是相當?shù)穆闊?/p>
現(xiàn)在我們可以通過創(chuàng)建一個帶有預安裝依賴項和工具(如編譯器、調(diào)試器等)的 docker 鏡像,然后在鏡像容器中進行開發(fā)調(diào)試,最后直接部署構建容器即可。
這個鏡像將成為開發(fā)人員本地的服務器和 CI/CD 服務器,也就是說,將不會出現(xiàn)“它在我的機器上工作,但在 CI 上失敗!”的問題。
由于構建在容器內(nèi)運行,它不受任何單個開發(fā)人員本地環(huán)境的環(huán)境變量、工具或設置的影響,這意味著環(huán)境變得孤立。任何開發(fā)人員使用的環(huán)境都是一樣的。
理想情況下,Docker 鏡像會被正確地標記一些有意義的版本名稱;它允許用戶通過從注冊表中提取正確的映像來在環(huán)境之間跳轉(zhuǎn)。即使鏡像已經(jīng)從注冊中心移除,但是因為 docker 鏡像是從 Dockerfiles 建立的,因此,我們總是可以從舊的 Dockerfile 重新構建映像。此外,因為我們隨時通過 git 進行版本管理 Dockerfile,所以對于環(huán)境的構建永遠都會非常的輕松。
Dockerfile 文件
c/c++的鏡像配置非常簡單,我們只需要從基礎鏡像 ubuntu 來進行配置即可,通過 apt-get install 安裝 c 開發(fā)環(huán)境即可。如果需要一些數(shù)據(jù)庫文件,我們可以添加到 dockerfile 文件中,當然,我們也可以通過 docker-compose 進行編排,添加一個 redis 的容器,然后網(wǎng)絡關聯(lián)彼此。
此外,我們還可以通過 gcc 這個鏡像直接進行構建,可以不需要在安裝 c 的開發(fā)環(huán)境。
當然,我們可以將編譯構建命令寫入到 Dockerfile 文件中,這樣我們直接運行容器就可以編譯生成可執(zhí)行文件。
下面是具體的 Dockerfile 文件內(nèi)容。
安裝調(diào)試工具
目前的鏡像只是包含編譯工具,但是并沒有調(diào)試工具,我們需要安裝 gdb 工具來進行代碼的調(diào)試,因此我們需要修改 Dockerfile 來引入 gdb 工具。
總結(jié)
因為容器的出現(xiàn),讓我們的環(huán)境搭建變得非常容易,而且我們再也不用擔心因為某種原因?qū)е颅h(huán)境破壞了,如果容器受損了,我們只需要重新啟動一個新的容器即可。
通過文件的映射,我們可以在本地編輯直接編輯文件,然后映射到容器中,當然我們也可以直接在容器中修改,但是最好添加一個映射,這樣,當我們的容器銷毀的時候,我們的代碼源文件還在本地保存。
鏡像文件除了可以從官網(wǎng)進行下載,也可以自己去定義,特別是當你需要一個特有的環(huán)境的時候,你就可以選擇構建自己的本地鏡像。
此外,我們在 Dockerfile 中是可以執(zhí)行命令的,比如一些依賴的安裝,都可以在 Dockerfile 中指定運行安裝。
另外,構建鏡像只需要第一次從網(wǎng)絡下載,之后就會運行本地緩存,并且容器運行起來非常的快,只需要幾秒鐘即可。