保存当前正在运行的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一个新的形象与所需的软件包安装,所以你不会失去它们。
另外,您可以使用COPY或ADD命令或者正在使用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
。