英文:
Docker: How to keep consistent versions of softwares
问题
我正在使用基于Python的图像,通常我会执行以下操作:
FROM python:3.10.10-buster
###########################################
升级软件包
###########################################
下载最新的可用软件包列表:
RUN apt-get -y update
升级已安装的软件包:
RUN apt-get -y upgrade
我正在安装一个软件包
RUN apt install s3fs
我担心每次构建图像时都会安装s3fs的新版本,可以如何将s3fs固定在特定版本的Docker图像中?
因为最近我们有一个2年前的Docker图像,当时的s3fs软件包和现在的版本不同。在最新版本中,s3fs软件包的工作方式不如旧版本时那样预期。
所以,如何锁定版本?
英文:
I am using a python based image and generally I do the below
FROM python:3.10.10-buster
###########################################
# Upgrade the packages
###########################################
# Download latest listing of available packages:
RUN apt-get -y update
# Upgrade already installed packages:
RUN apt-get -y upgrade
I am installing a package
RUN apt install s3fs
I am worried by doing the below a newer version of s3fs will get installed every time i build the image
RUN apt-get -y update
RUN apt-get -y upgrade
How can i pin s3fs to a particular version in my docker image
because recently we had a docker image which i 2yrs old and the s3fs package at that time and now have different versions. And in the recent version the s3fs package is not working as intended as it was working with old version.
So how to pip the versions
答案1
得分: 0
有两个主要的选项供您选择:
- 您可以直接在
apt
命令中针对特定版本进行固定。可以通过在本地添加一个文件,然后将其复制到容器中来实现这一点。该文件将如下所示:
Package: s3fs
Pin: version 2.1.1*
Pin-Priority: 1000
您需要根据您想要的版本进行调整。
然后修改您的Dockerfile如下:
FROM python:3.10.10-buster
# 安装s3fs
RUN apt install s3fs=<your version>
# 复制您创建的文件
COPY pinningfile /etc/apt/preferences.d/s3fs
###########################################
# 升级软件包
###########################################
# 下载最新的可用软件包列表:
RUN apt-get -y update
# 升级已安装的软件包:
RUN apt-get -y upgrade
- 您可以自己创建一个基础镜像。这样,您可以创建一个包含所有软件包的特定版本的基础镜像,然后相应地用于您的软件。
然后您将拥有两个Dockerfile:
FROM python:3.10.10-buster
###########################################
# 升级软件包
###########################################
# 下载最新的可用软件包列表:
RUN apt-get -y update
# 升级已安装的软件包:
RUN apt-get -y upgrade
# 现在安装s3fs
RUN apt-get -y install s3fs=<fixed Version>
构建镜像,标记它并推送它:
docker build -t my-s3fs-base:latest .
docker push my-s3fs-base:latest
现在您可以将其用作您的软件的基础镜像:
FROM my-s3fs-base:latest
RUN <do whatever you need>
英文:
There are two main options for you:
- You pin directly to a version in the
apt
command. This can be achieved by adding a file locally, that you then copy into the container. The file will look like this:
Package: s3fs
Pin: version 2.1.1*
Pin-Priority: 1000
You need to adjust to the version that you want.
Then modify your dockerfile like follows:
FROM python:3.10.10-buster
# Install s3fs
RUN apt install s3fs=<your version>
# copy the file you created
COPY pinningfile /etc/apt/preferences.d/s3fs
###########################################
# Upgrade the packages
###########################################
# Download latest listing of available packages:
RUN apt-get -y update
# Upgrade already installed packages:
RUN apt-get -y upgrade
- You can create a base image yourself. This way you would create a base image with all the packages installed to a specific version and then use that respectively for your software.
You would then have two Dockerfiles:
FROM python:3.10.10-buster
###########################################
# Upgrade the packages
###########################################
# Download latest listing of available packages:
RUN apt-get -y update
# Upgrade already installed packages:
RUN apt-get -y upgrade
# Now install s3fs
RUN apt-get -y install s3fs=<fixed Version>
Build the image, tag it and push it:
docker build -t my-s3fs-base:latest .`
docker push my-s3fs-base:latest
Now you can use that as base image for your software:
FROM my-s3fs-base:latest
RUN <do whatever you need>
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论