是否可以在 docker 容器中永久安装应用程序?

ahm*_*igh 2 linux debian docker

我正在使用 docker,但每次运行它时,我都应该为我的工作安装一些重要的应用程序,这需要付出一些努力,用 cat 编辑 source.list,然后安装 sudo 和 nano,然后每次运行 docker 时安装其他东西。

有没有办法保存docker容器并稍后重新登录?

我在 debian 10 中使用 docker 运行 ubuntu 16。

xen*_*oid 5

用一个 Dockerfile

这是“正常”的方式。基本上,您创建一个文件(通常命名为Dockerfile),其中包含:

# The image we will start with:
FROM ubuntu:16.04

# Install packages, by running a command
RUN apt update && apt install package1 package2

# You can also copy you own script/config files
COPY startup.sh /startup.sh
Run Code Online (Sandbox Code Playgroud)

然后你“编译”你的图像(假设带有 Dockerfile 的目录和脚本是当前目录):

docker build -t my_image .
Run Code Online (Sandbox Code Playgroud)

然后你使用你的形象:

docker run my_image
Run Code Online (Sandbox Code Playgroud)

Dockerfiles 的完整语法在这里

这种方法的好处:

  • Dockerfile 是您工作容器的“配方”,无需做旁注等……这就是您获得文档化和可维护容器的方式。
  • 您可以轻松升级到基础映像的新版本
  • 您只需传输 docker 文件和复制到容器的少数文件,即可共享映像或将其传输到另一台机器。

docker commit

您还可以从当前容器内容创建图像:

docker commit <containerId> <imageName>
Run Code Online (Sandbox Code Playgroud)

问题是,如果图像有效,你真的不知道里面是什么,也不容易传输(它是一个相当大的文件)

笔记:

  • 在您更改 USER 之前,您是容器中的 root,因此您通常不需要 sudo
  • 您也不需要nano,编辑容器外的文件并使用 Dockerfile 复制它们。容器是一次性的东西...
  • 使用您自己的镜像,即使没有网络,容器也会启动得更快,因为您不需要重新安装东西。
  • 容器是一次性物品,很难备份或转移。