AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1297571
Accepted
DarkTrick
DarkTrick
Asked: 2020-12-05 14:25:16 +0800 CST2020-12-05 14:25:16 +0800 CST 2020-12-05 14:25:16 +0800 CST

Docker & Ubuntu:如何永久安装软件?

  • 772
  • 背景:我使用docker run -it ubuntu.
  • 我想做什么:我想在该容器内持久地安装来自 repos 的任何软件(gjiten例如)。
  • 问题:在exiting 容器后,安装的软件消失了。
  • 问题:如何gjiten在我的容器中持续安装软件(例如 )?

杂项

  • Afaik 卷不起作用,因为我不知道apt在哪里安装软件包。(如果apt允许指定目标目录,这将是最好的解决方案。)
  • 我知道我可以在 docker 卷中使用 appimages,但是我不能使用apt并且更新软件变得很痛苦。
  • 我知道我可以在 docker 卷上创建一个 chroot,但事实证明这非常痛苦。

编辑:答案:

退出的 docker 容器仍然存在,并且容器内部的更改不会丢失。我为此创建了一个答案。

software-installation docker
  • 4 4 个回答
  • 2403 Views

4 个回答

  • Voted
  1. s1mmel
    2020-12-05T17:47:34+08:002020-12-05T17:47:34+08:00

    您需要创建一个 Dockerfile 并从现有映像编写您自己的容器脚本。语法是这样的。

    FROM UBUNTU:LATEST
    RUN <some command like apt install>
    

    您将需要 RTFM 才能完全理解它,因为除此之外还有更多内容。最好的学习方式是查看 dockerhub 和 github 上的任何项目。这样您就可以看到“成品”以及容器的制造方式。

    HTH 一点点,s1mmel

    这是一个活生生的例子。这是我不久前构建的唯一存储库中的 Dockerfile。一个 Minecraft papermc 服务器。这不会让你一路走好,但对于初学者来说,我认为它已经足够好了。

    看一看

    • 3
  2. Best Answer
    DarkTrick
    2020-12-06T18:21:03+08:002020-12-06T18:21:03+08:00

    我想,我对 docker 环境的看法是不正确的,因此产生了这个问题。

    重要的

    来自已退出容器的信息不会丢失!已安装的程序即使在退出后仍然存在 *。因此,这个问题基本上已经过时了。

    在下文中,我试图阐明 docker 在这方面的工作方式。

    *这与 Kulfy 的评论“当您退出实例或终止 docker 服务时,除非在使用映像时提交更改,否则更改和文件将丢失。”的评论相反。

    Docker 的一般工作原理

    • docker run ubuntu从图像创建一个容器ubuntu。
    • 只要主进程运行,容器就会运行。
    • 由于 ubuntu 映像中的主进程将立即完成,容器将立即退出(因此 call immediate 在 shell 中返回)。
    • 退出容器就像系统关闭一样。容器没有丢失。数据/系统更改仍然是持久的。
      • 您可以验证这一点,docker ps -a这将显示您甚至退出的容器。

    问题相关

    • docker run -it ubuntu从图像创建一个容器ubuntu并在 shell 中启动交互模式。
    • 您现在可以在该容器中执行任何操作。(例如运行touch aaa或安装gjiten)
    • 如果您exit在容器内键入,您将退出该容器内的终端 (TTY)。由于该终端是该容器的主要进程,现在退出,容器将退出(=关闭容器内的操作系统)。
    • 您的数据现在没有丢失。系统刚刚关闭。
    • 如果你docker ps -a现在运行,你仍然可以在那里看到你的容器。所有更改仍然有效;它只是暂时没有运行。
    • 您现在可以使用docker container start -i [containerID](-i用于交互) 重新启动容器(如“重新启动系统”)。
    • 您现在应该在容器内。
    • 键入ls以查看您的文件aaa是否仍然存在。
    • 您可以从另一个终端运行docker ps,它会向您显示当前正在运行的容器。

    顺便说一句:请注意,您需要创建一个容器-it才能-i使用docker container start -i [containerID]

    • 2
  3. DarkTrick
    2020-12-06T04:14:06+08:002020-12-06T04:14:06+08:00

    一种解决方案

    如果可以访问主机,则一种解决方案可能是commit更改。不过,这将创建一个全新的图像。

    来自这里的说明:

    • 启动一个容器
    • 改变容器内的东西
    • 找出容器 ID
      • root@9a20cddf27c0例如容器内的右侧部分
    • 在主机上,运行docker commit [container ID] [new image name]

    道具:来自评论的@Kulfy。

    • 1
  4. JulioHM
    2020-12-16T07:04:19+08:002020-12-16T07:04:19+08:00

    我认为您需要掌握容器图像的概念。容器和容器映像之间有明显的区别。

    每个容器都从静态图像运行。映像本身是一个压缩包,包含运行给定软件所需的一切(二进制文件、直接依赖项、第 3 方依赖项、配置文件、用户、文件权限等等)。

    容器运行后,它创建的所有内容都是短暂的,并且用户数据会持久保存在容器外部的卷中。

    如果您需要永久安装特定的库或包,则需要修改映像。在实践中,这意味着创建您自己的Dockerfile并继承FROM您希望修改的基本映像。创建映像后,您可以运行基于它的容器。

    这些天官方文档很清楚:https ://docs.docker.com/get-started/part2/

    • 1

相关问题

  • 如何在没有 root 访问权限的情况下安装软件包?

  • 设置 LAMP 堆栈的最简单方法是什么?

  • 我应该在哪里安装 sagemath?

  • How do I install Adobe Flash player?对于 11.10 及更高版本明确修复 11.10 上的 64 位 Flash

  • 如何设置软件中心为非 root 用户安装软件?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve