我是Docker的新手,尝试拉动Wordpress泊坞窗图像,进行一些更改,提交,并将新图像上传到docker cloud。
然而,当我重新启动docker镜像时,我没有回到之前提交的状态。我做错了吗?
docker pull tutum/wordpress:latest
docker commit -m "First commit" <CONTAINER ID> foo/bar
docker login
docker push foo/bar:latest
docker pull tutum/wordpress:latest
尝试docker pull foo/bar:latest
并被告知Image is up to date for foo/bar:latest
。
答案 0 :(得分:1)
你没有做错任何事! Docker的核心租户之一是容器应该是不可变的;也就是说,一旦你构建了一个容器,你应该期望它的状态在整个生命周期中保持不变。根据您提供的信息,您似乎开始使用Tutum的Wordpress文件https://github.com/tutumcloud/wordpress
这很快就会被弃用,使用官方支持的wordpress docker图像你会有更好的运气:https://hub.docker.com/_/wordpress/
如果您希望在本地环境中破解此问题,并/或将更改保留到docker镜像,那么您将要设置类似的内容(取自我们的Dockerfiles之一) :
FROM wordpress:latest
# installs php zip extensions - used for plugins like duplicator
RUN docker-php-ext-install zip
# Copy the existing app into our wp directory
COPY . /var/www/html
RUN chown -R www-data:www-data /var/www/html/
CMD ["apache2-foreground"]
如果您想对图片进行更改(例如设置插件和主题),您需要从本地计算机创建一个挂载点到docker容器中。要创建装载点,在构建容器时,请使用-v
标记设置卷。
另一种方法是使用docker-compose
(我推荐这个,我们将其用于内部开发):
app:
build: .
volumes:
- .:/var/www/html
ports:
- "80:80"
将其保存为docker-compose.yml
,然后您可以运行docker-compose build
/ docker-compose up
以使您的应用程序停止运行。
一旦您进行了更改(使用挂载点),您就会想要继续标记此图像。通过标记图像,您应该能够将其推送到您的唯一用户下的私有docker hub注册表。
此图片将包含您的所有更改,因为您在本地环境中所做的更改将直接复制到图像中(请注意COPY
行)。
希望这有帮助!
-meoww -
答案 1 :(得分:0)
容器是无状态的,因此重新启动Docker映像实质上会创建该映像的新容器实例。除非您的Wordpress容器将其数据保存在data volume中,否则在销毁当前容器后,您所做的更改将消失。由于该图像的Dockerfile未发布,因此很难确定其数据的持久性。另一件事是docker commit
command没有提交存储在容器卷中的任何数据。
查看this Wordpress image,它允许您指定要链接到的持久性的MySQL容器。