用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)了