2016-08-02 116 views
-1

我是新来的Docker,并试图拉动一个Wordpress泊坞窗图像,进行一些更改,提交它,并将新图像上传到docker云。对Docker镜像不能正常工作?

但是,当我重新启动泊坞窗图像时,我没有回到之前提到的状态。难道我做错了什么?

  1. docker pull tutum/wordpress:latest
  2. 安装的WordPress,添加主题,加入pluigins,添加一些网页
  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

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

+0

你想要做什么改变? – johnharris85

+0

@JHarris上传了一个主题,添加了新的页面。这个码头图像绑定了mysql,所以不应该提交码头容器也保存添加到MySQL的新数据? – Nyxynyx

回答

0

容器是无状态的,因此重新启动Docker镜像本质上会创建该镜像的新容器实例。除非您的Wordpress容器将其数据保存在data volume中,否则在您销毁当前容器后所做的更改将消失。由于该图像的Dockerfile未发布,因此很难判断其数据的持续位置。另一件事是docker commitcommand不提交存储在容器卷内的任何数据。

看看this Wordpress image,它允许你指定MySQL容器连接到持久性。

1

你没有做错什么! Docker的核心租户之一是容器应该是不可变的;也就是说,一旦你建立了一个容器,你应该期望它的状态在整个生命周期中保持不变。从您提供的信息,它看起来像你开始Tutum的WordPress的文件,https://github.com/tutumcloud/wordpress

这将在短期内过时,你将使用正式支持WordPress的码头工人形象有更好的运气:https://hub.docker.com/_/wordpress/

如果你希望在这个黑客在您的本地环境,和/或将更改保存到泊坞窗图像,你会想一些设置这样的(从我们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让你的应用程序离开地面。

一旦你做了你的改变(使用安装点),你会想要继续并标记这个图像。通过标记图像,您应该能够将其推送到您的专用用户下的专用码头中心注册表。

因为您在本地环境中所做的更改将直接复制到图像中(请注意COPY行),此图像将包含所有更改。

希望这会有所帮助!

-meoww-