保存当前正在运行的redmine docker更改为重用

我是新来的docker,已经运行一个生产redminedocker,我已经做了改变(主要是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更改,但是我对重新运行没有信心,因为它不会保存这些更改,对吗?

每次我运行它时都需要envvariables,还是有一种方法可以将它们保存在我的映像中,以便始终在相同的端口和MySQL DB上运行映像? 我看了一下正在运行的docker文件,并且database.yml在第一次运行期间传递了正确的configuration,但是我不确定是否保存了下一次运行。

最后一个:我知道我可以将这个图像转换成一个自定义的图像来保存一些变化,但是我不知道哪个是哪个,哪些没有保存。 ¿运行时的envs是否保存在提交?

希望你能帮忙,文档不是很清楚,也不是很广泛,解决方法通常是基于非常具体的案例,并不能真正回答我所有的问题。

另外,我也知道Docker文件,但是也怀疑它和run命令。

多谢你们!

你对一个容器做出的改变,例如:添加新的软件包如电子邮件服务器,添加vi / nano或其他软件包不会持久 ,这意味着每次你停止启动容器,你的改变将会丢失 ,你将不得不重新 – 做到这一点。

为了使它们持久化,你将不得不创build一个Dockerfile ,在那里你可以指定FROM指令,例如:

 FROM "sameersbn/redmine:3.4.2" 

而在这个Dockerfile里面,你必须指定你的附加包,例如:

 RUN apt-get update && apt-get install xyz 

哪个将安装所需的软件包

那么你将不得不build立图像:

 docker build -t my_new_image:1.0.0 . 

这将创build一个新的形象与所需的软件包安装,所以你不会失去它们。

另外,您可以使用COPYADD命令或者正在使用VOLUMES来添加HTML文件

最后,必须始终传递ENVvariables,每次使用docker-compose文件时 ,都会包含所有运行容器的文件。

希望这可以帮助。

如果要保留对HTML文件和环境variables的更改,最好使用Dockerfile创build一个新映像。

 FROM sameersbn/redmine:3.4.2 COPY modified.html /path/to/original.html ENV SOME_VARIABLE=value 

然后构build镜像docker build -t local/redmine:3.4.2 . 并运行docker run ... local/redmine:3.4.2

另一个解决scheme是运行原始图像并使用卷覆盖html文件: docker run ... -v /path/to/modified.html:/path/to/original.html sameersbn/redmine:3.4.2

在我看来,后者是更好的解决scheme,除非你需要分发带有编辑的html内容的图像。 如果你发现编写冗长的命令很麻烦,你可以把它写到简单的脚本中,或者最好编写一个docker-compose.yml文件并运行docker-compose.yml docker-compose up