docker打包一個包含python3的centos8的新鏡像過程
更新時間:2025年10月02日 16:26:01 作者:HelloFif
用戶通過下載CentOS鏡像、Python安裝包及阿里源配置,編寫Dockerfile并使用Shell腳本自動化打包,實現(xiàn)與Git的協(xié)同更新,確保鏡像便捷維護和快速部署
第一步:下載所需的centos鏡像
docker search centos docker pull centos # 默認latest
第二步:下載python.tgz安裝包
# 這邊用的python3.11,需要提前下好 wget https://www.python.org/ftp/python/3.11.2/Python-3.11.2.tgz
第三步:準備阿里源
# 1.下載阿里源 wget https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
沒有更換源遇到的問題為:
Error: Failed to download metadata for repo 'appstream': Cannot prepare internal mirrorlist: No URLs in mirrorlist
第四步:寫docker file
個人就覺得寫一個的docker 會方便后期更新,比如在git更新代碼,可以直接重新打包,不需要再寫其他的東西
# 設(shè)置基礎(chǔ)鏡像,我是把centos:latest重新打標簽給打成了centos:8
# docker tag centos:latest centos:8
FROM centos:8
# 執(zhí)行用戶設(shè)置為root
USER root
# 拷貝阿里源文件至鏡像內(nèi)部
COPY ./Centos-vault-8.5.2111.repo /home
# 拷貝python3.11包至鏡像內(nèi)部
COPY ./Python-3.11.2.tgz /home
# 拷貝python所需要安裝的依賴包文件
COPY ./requirements.txt /home
# 拷貝python文件至鏡像內(nèi)部
COPY ./app.py /home
# 將運行目錄調(diào)整為/home
WORKDIR /home
# 我這里是直接刪除鏡像內(nèi)部原有的源3
RUN rm -rf /etc/yum.repos.d/*
# 將阿里源拷貝至鏡像源內(nèi)部
RUN cp -r ./Centos-vault-8.5.2111.repo /etc/yum.repos.d/CentOS-Base.repo
# 更新一下YUM cache
RUN yum clean all
RUN yum makecache
# 安裝一下python所需依賴包
RUN yum install -y zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel libffi-devel xz-devel
RUN yum install -y gcc
RUN yum install -y make
#解壓python,并安裝python
RUN tar -zxvf Python-3.11.2.tgz -C /usr/local/
WORKDIR /usr/local/Python-3.11.2
RUN ./configure --prefix=/usr/local/python3
RUN make && make install
# 將python添加到系統(tǒng)路徑中
ENV PATH="/usr/local/python3/bin:${PATH}"
# 在安裝python的時候更換了工作目錄,現(xiàn)在更換回來
WORKDIR /home
RUN pip3 install -r requirements.txt
CMD ["python3", "app.py"]
第五步,打包鏡像
我直接寫了一個shell腳本,方便下次更新使用,也方便和git
進行配合
#!/bin/bash
function build_image() {
docker_name="*****/******/${image_name}:${MODE}_${TIMENOW}"
docker build -t ${docker_name} .
docker push ${docker_name} # 如果自己本地測試,可以刪除這一行
#check_ret $? $FUNCNAME
}
function check_ret() {
if [ $1 != 0 ]; then
echo "$2 Failure, Exit!"
exit $1
fi
}
image_name='python'
MODE="date"
TIMENOW=$(date +%y.%m.%d.%H%M)
echo "build workflow start .."
build_image
echo "build workflow end .."
第六步:驗證結(jié)果


總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
docker images,info,-d等命令報錯的解決方法
最近剛接觸Docker,所以在學(xué)習(xí)的過程中出現(xiàn)了好多的問題,百度上不好找,谷歌的話,樓主不會翻墻。后來通過各方求助和細心研究解決了一些遇到的問題,現(xiàn)在將遇到的問題和解決方法分享給大家,有需要的朋友們可以參考借鑒。2016-11-11

