提交Docker镜像不起作用?

时间:2016-08-02 16:26:35

标签: wordpress docker

我是Docker的新手,尝试拉动Wordpress泊坞窗图像,进行一些更改,提交,并将新图像上传到docker cloud。

然而,当我重新启动docker镜像时,我没有回到之前提交的状态。我做错了吗?

  1. docker pull tutum/wordpress:latest
  2. 设置Wordpress,添加主题,添加插件,添加一些页面
  3. docker commit -m "First commit" <CONTAINER ID> foo/bar
  4. docker login
  5. docker push foo/bar:latest
  6. 重新启动的泊坞窗容器。做docker pull tutum/wordpress:latest
  7. 后回到原来的位置

    尝试docker pull foo/bar:latest并被告知Image is up to date for foo/bar:latest

2 个答案:

答案 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容器。