詳解如何用alpine鏡像做一個最小的鏡像并運行c++程序
需求
工作中我們?nèi)绻谱麋R像,一般都是直接pull官方鏡像,比如我們要運行一個c++程序我們可能直接pull一個gcc,或者ubuntu鏡像就可以了,但是存在一個問題,我們只是要運行一個c++程序卻要運行一個ubuntu系統(tǒng),這是非常消耗資源的,所以就去網(wǎng)上搜了搜發(fā)現(xiàn)早期的docker都是使用alpine鏡像來做基礎(chǔ)鏡像,所以就用alpile鏡像來制作鏡像
dockerfile
FROM alpine:3.7
MAINTAINER Rethink
#更新Alpine的軟件源為國內(nèi)(清華大學)的站點,因為從默認官源拉取實在太慢了。。。
RUN echo "https://mirror.tuna.tsinghua.edu.cn/alpine/v3.4/main/" > /etc/apk/repositories
RUN apk update \
&& apk upgrade \
&& apk add --no-cache bash \
bash-doc \
bash-completion \
&& rm -rf /var/cache/apk/* \
&& /bin/bash
COPY a.out /bin
CMD ["./a.out"]
問題:
a.out是我在宿主機上編譯的一個可執(zhí)行程序,但是新生成的鏡像是啟動不了的,這就讓我很奇怪
改進:
后來想了想./a.out之所以不能夠運行是因為a.out是在我自己的ubuntu系統(tǒng)上編譯出來的,而我的鏡像確實alpine鏡像,所以解決這個文件就很簡單了
方法一:
在ubuntu宿主機上下載交叉編譯工具,使用交叉工具編譯我們的源碼,生成可執(zhí)行程序
方法二:
我們可以偷個懶直接使用docker pull一個安裝了apline-gcc鏡像,在上面編譯好我們的源碼,將生成的可執(zhí)行程序放到apline鏡像就可以了
方法三:
我們可以在alpine鏡像中使用源碼進行編譯
方法三 dockerfile
FROM alpine:3.7
MAINTAINER Rethink
#更新Alpine的軟件源為國內(nèi)(清華大學)的站點,因為從默認官源拉取實在太慢了。。。
RUN echo "https://mirror.tuna.tsinghua.edu.cn/alpine/v3.4/main/" > /etc/apk/repositories
RUN apk update \
&& apk upgrade \
&& apk add --no-cache bash \
bash-doc \
bash-completion \
&& rm -rf /var/cache/apk/* \
&& /bin/bash
RUN apk add gcc
RUN mkdir /chun
COPY hello.c /chun
WORKDIR /chun/
RUN gcc hello.c
CMD ["./a.out"]
到此這篇關(guān)于詳解如何用alpine鏡像做一個最小的鏡像并運行c++程序的文章就介紹到這了,更多相關(guān)alpine鏡像c++程序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語言實現(xiàn)通用數(shù)據(jù)結(jié)構(gòu)之通用鏈表
這篇文章主要為大家詳細介紹了c語言實現(xiàn)通用數(shù)據(jù)結(jié)構(gòu)之通用鏈表,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-11-11
C語言利用goto語句設(shè)計實現(xiàn)一個關(guān)機程序
今天給大家分享一個非常有趣的知識——用goto語句編寫一個關(guān)機小程序。主要用到了shutdown命令語句、goto語句、strcmp函數(shù)等知識點,感興趣的可以了解一下2023-01-01

