使用docker編譯部署開(kāi)源c/c++程序(一)

用docker部署c/c++程序,首先需要一個(gè)Linux的基礎(chǔ)鏡像,可以是ubuntu、centos等。但最近docker都流行用alpine作為基礎(chǔ)鏡像,因?yàn)閍lpine最大的優(yōu)點(diǎn)是體積小。先下載一個(gè)alpine的鏡像玩玩
docker pull alpine

查看一下鏡像的大小
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
alpine latest 3f53bb00af94 2 weeks ago 4.41MB

只有4M多,作為基礎(chǔ)鏡像確實(shí)很理想。相比之下,debian要去到80幾M,ubuntu 180幾M,這么大的體積也不利于部署。

下載完鏡像,可以把這個(gè)迷你的linux啟動(dòng)起來(lái),進(jìn)去玩玩
docker run -it alpine /bin/sh

進(jìn)去玩完以后,按exit命令退出來(lái)。然后用docker ps -a查看所有容器,會(huì)看到
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
75c17acca2e9 alpine "/bin/sh" 43 seconds ago Exited (0) 13 seconds ago stoic_wozniak

隨著我們退出,容器的狀態(tài)也變成Exited。如果希望這個(gè)容器繼續(xù)運(yùn)行,可以輸入
docker start container_id

其中的container_id是docker ps -a中查看到的。要進(jìn)入這個(gè)容器,輸入
docker exec -it container_id /bin/sh

回到正題,要在這個(gè)alpine容器中編譯c/c++程序。先在容器里面編寫一個(gè)最簡(jiǎn)單的hello world

#include <stdio.h>
int main()
{
  printf("Hello world\n");
}

PS:這個(gè)alpine之中各種命令都是使用busybox的,vi之類的用起來(lái)會(huì)有點(diǎn)怪

c程序有了,我們還缺gcc編譯器。alpine的包管理命令是apk,安裝gcc
apk add gcc

不過(guò)alpine默認(rèn)的安裝源慢得要命,裝個(gè)gcc都要好久??梢允謩?dòng)修改repositories,改為國(guó)內(nèi)源
echo "https://mirror.tuna.tsinghua.edu.cn/alpine/v3.8/main" > /etc/apk/repositories
echo "https://mirror.tuna.tsinghua.edu.cn/alpine/v3.8/community" >> /etc/apk/repositories

不過(guò)一編譯就報(bào)錯(cuò)了,很無(wú)語(yǔ)

1.c:1:19: fatal error: stdio.h: No such file or directory

在alpine之中,libc是要單獨(dú)安裝的
apk add libc-dev

安裝完libc后,gcc終于可以順利編譯,hello world也順利出現(xiàn)了

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容