我想为我的科学计算项目创建一个Docker容器。对于这个项目,我需要尝试一些依赖项,所以如果我访问容器的shell并安装各种包,然后选择其中的一些包,这将是非常有效的。此外,我希望不同的人复制我的工作,并了解我是如何设置环境的。所以,如果可能的话,我想创建一个类似于复制同一容器的配方的文件。我是否应该手写一个文本文件,列出我在最后选择的依赖项,或者Docker中是否有一个工具可以在创建容器后自动记录在容器中安装了哪些包?
发布于 2021-03-05 12:26:01
我不知道有任何Docker工具可以保存您自动安装的依赖项列表。为了更容易地重现您的容器,您应该遵循@lastr2d2的建议:记录您安装的包,并将其转换为Dockerfile文件中的RUN apt-get install -y package1 package2 ...行。您还可以使用apt list --installed列出已安装的包,尽管您还会获得许多其他未手动安装的包。
另一种方法是使用docker commit保存正在运行的容器的状态,并将图像推送到Docker Hub。commit命令将创建容器当前状态的Docker镜像。These docs提供了有关此命令的详细信息。
重要说明:如果您选择这样做,请阅读有关使用
docker commit的警告。在this answer中,作者指出你根本不应该使用docker commit ,因为容器不是完全可重现的。
如果您已经阅读了此警告,但仍希望使用docker commit,下面是一个示例:
# run the container to install packages
$ docker run -it --name container-to-commit ubuntu:20.04 /bin/bash
## inside Docker terminal session
# install packages here
$ apt-get update
$ apt-get install gcc ...要保存容器,您需要让它保持运行,并在另一个终端中运行docker commit CONTAINER_ID。例如:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a26092c038ab ubuntu:20.04 "/bin/bash" 56 seconds ago Up 55 seconds container-to-commit
# commit the image with the label "username/container-name"
# username should be your Docker Hub username if you choose to distribute on Docker Hub
$ docker commit a26092c038ab username/container-name:v1
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
username/container-name v1 4752ae644acf 5 seconds ago 523MBhttps://stackoverflow.com/questions/66486163
复制相似问题