Docker Ubuntu 容器安装的软件被删除

Docker Ubuntu 容器安装的软件被删除

第一次尝试 Docker,有很多问题。安装了 Docker 和 Ubuntu 容器。不知道它没有附带基本的必备工具,如 net-tools、vim、nano 等。安装了我需要的必要工具,测试它是否工作,然后就结束了。今天运行容器时,它回到了早期阶段,所有已安装的软件包都消失了。这是应该发生的吗?我如何在容器中永久安装软件包?

注:我是借助安装脚本安装的Docker-CE版本。

答案1

您把容器误认为虚拟机了。容器只是为运行特定进程而定制的网络和文件系统气泡。它附带所有软件依赖项,因此只需要 Linux 内核。

Ubuntu 等 Docker 镜像很少直接使用。您可以使用Dockerfile(参见docker build命令)根据需要进行定制。Dockerfile 用于:

  • 安装对该过程有用的特定软件(主要是运行时支持)RUN apt-get install python3 python3-pipRUN pip install requests numpy
  • 复制特定文件(通常是您自己的代码,以及应用程序和系统的配置文件(例如证书)):。COPY application.py /app/这些文件通常与 Dockerfile 保存在一起。
  • 设置容器启动时运行的命令:ENTRYPOINT ["/usr/bin/python3","/app/application.py"]

最后docker build,您将得到一个可以执行您的应用程序的可运行的docker镜像。

如果您调整容器,可以使用 将其状态保存为图像docker commit,但这被认为是不好的做法,因为它不能确保可重复性:如果您需要升级软件,通常使用 Dockerfile 重建容器,因此最好确保 Dockerfile 及其配套文件是构建最终容器所需的全部内容。这也使容器更难共享,您必须导出整个图像,而不仅仅是发送 Dockerfile 和代码/配置。

在实际使用中,Dockerfile 及其配套文件(配置……)在 Git 存储库中进行版本控制,并使用集成链生成的可执行文件。

通常,人们会尝试将容器保持尽可能小。Docker 镜像包含占用空间非常小的发行版。Ubuntu 有很多无用的包袱,而 Debian 通常也一样好用。还有一些预装了软件(Apache、nginx、MySQL……)的专用镜像。

最后,您可能想知道在容器中创建的文件会发生什么……默认情况下,它们是容器本地的,如果删除容器实例(docker rm命令),它们就会丢失。但是,在启动容器时,您可以将容器的某些文件/目录绑定到主机上的文件/目录,从而在容器外部拥有持久存储。您还可以使用“卷映像”。

容器非常有用,但必须正确使用......

答案2

是的,这是应该发生的。容器注定是短暂的,这意味着你会不断地创建和销毁容器。创建临时容器

通过创建自定义映像,您将始终可以在未来的容器中使用所需的软件包。为此,您首先需要创建一个Dockerfile如下映像:

FROM ubuntu:latest
RUN apt update -y && apt -y install vim

然后在同一目录中运行,它将通过向新文件添加新层来docker build .安装包。在构建结束时,您将看到一个唯一的图像 ID,例如:vimImage

Successfully built 895449f549db

现在,您可以从以前的 id 生成一个包含所有已安装包的新容器。

docker run -ti 895449f549db bash

这是非常基础的东西。我建议你多读一些类似的东西入门

答案3

经过一些阅读,我发现解决我的菜鸟问题的最简单的方法是使用命令run来运行现有容器,而不是start使用命令docker。我知道这是超级菜鸟,但无论如何,我正在为后人写一个基本的解决方案。

创建容器的命令:

docker run -it --name=Ubuntu <image>

分配一个合适的名称(在本例中为 Ubuntu),以便在使用大量容器时轻松发现容器。

稍后运行同一个容器:

docker start -i Ubuntu

另一种方法是将容器实例提交到镜像中,稍后再运行该镜像。它将在新镜像中保留所有已安装的软件。

docker commit container_ID  newimagename 

docker run -it newimagename

如图所示:https://stackoverflow.com/a/33956387/7787654

相关内容