我是docker的新手,已经运行了我做过更改的生产redmine docker(主要是js,css和html来定制它)。 我对它现在的样子很满意但是,由于我在开始时缺乏知识,我错过了一些我想要添加的东西,例如邮件服务器并将我的整个应用程序指向子域而不是目前正在使用的主要内容。 以下是我的问题:
我首先用以下方式运行图像:
docker run -p 80:80 --name=redmine --rm --link=mysql-redmine:mysql /
--volume=/srv/docker/redmine/redmine:/home/redmine/data sameersbn/redmine:3.4.2
从那时起我所做的就是docker restart
看到HTML的变化,但我对重新运行没有信心,因为它不能保存这些变化,我是对的吗?
每次运行时都需要env变量,或者有一种方法可以将它们保存在我的映像中,只需在相同的端口和MySQL DB上运行映像?我看了一下正在运行的docker文件和database.yml在第一次运行期间传递了正确的配置,但我不知道它们是否被保存下次运行。
最后一个:我知道我可以将这个图像提交给自定义的图像以保存一些更改,但是,我再也不知道哪些是哪些,哪些是未保存的。 ¿运行中的envs是否已保存?
希望你能提供帮助,文档在这方面并不是很清楚,并且不是很广泛,而且变通方法通常基于非常具体的案例,而这些案例并没有真正回答我的所有问题。
另外,我了解Docker文件,但对它和运行命令也有同样的怀疑。
谢谢你们!
答案 0 :(得分:1)
您对容器所做的更改,例如:添加新的软件包,如电子邮件服务器,添加vi / nano或其他软件包将不会持久,这意味着每次停止和开始容器,您的更改将丢失,您必须重新执行此操作。
要使它们保持持久性,您必须创建Dockerfile并在其中指定 FROM 指令,例如:
FROM "sameersbn/redmine:3.4.2"
并在此Dockerfile中,您必须指定其他包,例如:
RUN apt-get update && apt-get install xyz
将安装所需的软件包
然后你必须建立图像:
docker build -t my_new_image:1.0.0 .
这将创建一个安装了所需软件包的新图像,因此您不会丢失它们。
此外,您可以使用 COPY 或 ADD 命令添加HTML文件,或者正在使用 VOLUMES
最后,每次好的解决方案使用docker-compose file时,必须始终传递ENV变量,https://jsfiddle.net/sr1qj1pc/将包含运行容器的所有内容。
希望这有帮助。
答案 1 :(得分:0)
如果要保留对HTML文件和环境变量的更改,最好使用Dockerfile创建新图像。
FROM sameersbn/redmine:3.4.2
COPY modified.html /path/to/original.html
ENV SOME_VARIABLE=value
然后构建图片docker build -t local/redmine:3.4.2 .
并运行docker run ... local/redmine:3.4.2
。
另一个解决方案是运行原始图像并使用卷覆盖html文件:docker run ... -v /path/to/modified.html:/path/to/original.html sameersbn/redmine:3.4.2
。
在我看来,后者是更好的解决方案,除非您需要使用已编辑的html内容分发图像。如果您发现编写长命令很麻烦,可以将其放到简单的脚本中,或者最好写一个docker-compose.yml
文件并运行docker-compose up
。