gpt4 book ai didi

docker - 将补丁应用于修改后的 docker 容器的最佳实践?

转载 作者:行者123 更新时间:2023-12-01 14:41:11 25 4
gpt4 key购买 nike

假设我们刚刚启动了一个 docker 容器,并允许用户 SSH 通过映射端口 22:22 进入容器。

然后用户安装了一些软件,如 git 或任何他们想要的软件。所以那个容器现在被污染

稍后,假设我想对容器应用一些补丁,最好的方法是什么?

请记住,用户已经修改了容器中的内容,包括一些系统级目录,如/usr/bin。所以我不能简单地用另一个图像替换正在运行的容器。

所以给你一些现实生活中的用例。取Nitrous.io举个例子。我看到他们正在使用 docker 容器作为用户的虚拟机。因此用户可以安装像 Node.js 全局包这样的包。那么他们如何像专家一样更新/应用补丁到容器呢?类似的平台如 Codeanywhere可能以相同的方式工作。

我尝试用谷歌搜索,但失败了。不过,我不能 100% 确定这是否重复。

最佳答案

User then installed some software like git or whatever they want ... I want to apply some patch to the container, what is the best way to do so ?

推荐的方法是通过 Dockerfile 计划您的更新。但是,如果您无法做到这一点,则应在退出之前提交容器中安装的任何其他更改或新包。

例如:下面是创建的简单容器,它没有安装 vim

$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
pingimg 1.5 1e29ac7353d1 4 minutes ago 209.6 MB

启动容器并检查是否安装了vim

 $ docker run -it pingimg:1.5 /bin/bash
root@f63accdae2ab:/#
root@f63accdae2ab:/# vim
bash: vim: command not found

在容器内安装所需的包:

 root@f63accdae2ab:/# sudo apt-get update && install -y vim

回到主机上,在停止或退出容器之前使用新标签提交容器。

$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f63accdae2ab pingimg:1.5 "/bin/bash" About a minute ago Up About a minute modest_lovelace

$ docker commit f63accdae2ab pingimg:1.6
378e0359eedfe902640ff71df4395c3fe9590254c8c667ea3efb54e033f24cbe

$ docker stop f63accdae2ab
f63accdae2ab

现在 docker 图像应该显示给容器的标签或版本。请注意,更新后的容器显示更大的尺寸。

$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
pingimg 1.6 378e0359eedf 43 seconds ago 252.8 MB
pingimg 1.5 1e29ac7353d1 4 minutes ago 209.6 MB

重新启动最近提交的容器,可以看到安装了vim

$ docker run -it pingimg:1.6 /bin/bash
root@63dbbb8a9355:/# which vim
/usr/bin/vim

验证旧版本容器的内容,应该注意到 vim 仍然缺失。

$ docker run -it pingimg:1.5 /bin/bash
root@99955058ea0b:/# which vim
root@99955058ea0b:/# vim
bash: vim: command not found

希望这对您有所帮助!

关于docker - 将补丁应用于修改后的 docker 容器的最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32961150/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com