【问题标题】:docker-compose save/load images to another hostdocker-compose 将图像保存/加载到另一台主机
【发布时间】:2022-03-09 00:13:27
【问题描述】:

我找到了this,但它对我不起作用。

我的(真的)简单的docker-compose.yml

version: '3.1'

services:

  wordpress:
    image: wordpress
    restart: always
    ports:
      - 8080:80
    environment:
      WORDPRESS_DB_PASSWORD: example

  mysql:
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: example

开始:

docker-compose up

对容器进行了一些更改(在 wordpress 上安装插件和主题)。

docker-compose stop
docker commit main_mysql_1 test-mysql
docker commit main_wordpress_1 test-wordpress
docker save test-mysql > test-mysql.tar
docker save test-wordpress > test-wordpress.tar

将这两个 tar 文件保存在另一台机器上并加载它们:

docker load -i ./test-mysql.tar
docker load -i ./test-wordpress.tar

现在将docker-compose.yml 更改为:

version: '3.1'

services:

  wordpress:
    image: test-wordpress
    restart: always
    ports:
      - 8080:80
    environment:
      WORDPRESS_DB_PASSWORD: example

  mysql:
    image: test-mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: example

但启动的容器是从头开始的 wordpress。所做的任何工作(插件、主题等)都没有保留。

我的错误是什么?我不想将在线存储库用于这些私人目的。您能否建议一个更简单、更强大的程序来在两台主机之间传递容器?


使用卷的解决方法:

version: '3.1'

services:

  wordpress:
    container_name: GREB_wordpress      
    image: wordpress
    restart: always
    ports:
      - 8080:80
    environment:
      WORDPRESS_DB_PASSWORD: example
    volumes:
      - ./www:/var/www/html  

  mysql:
    container_name: GREB_mysql
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: example
    volumes:
      - ./mysql_data:/var/lib/mysql  

【问题讨论】:

标签: docker docker-compose


【解决方案1】:

首先,docker 卷不是图像和/或容器的一部分。所以这些应该被进一步保存在 docker 镜像中 (docker save)。

为了更好地了解 docker 文件系统、卷、ro/rw 层, 可以阅读 http://container-solutions.com/understanding-volumes-docker/.

确定我们的图像是否使用卷(寻找“卷”键):

docker inspect image_name

使用卷具有不同的优势(请参阅 docker documentation 以获得更好的理解),例如 I/O 性能。

结束,用于备份卷:

  • 仅备份卷文件夹,例如tar -cvzPf volume_name_backup.tar.gz /var/lib/docker/volumes/VOLUME_NAME...并在同一个地方恢复它们
  • Backup, restore, or migrate data volumes 通过另一个 docker 容器
  • 如果是数据库映像(例如我的 mysql 情况),您还可以转储数据库:docker exec mysql_container /usr/bin/mysqldump -u root --password=root --all-databases > mysql_dump_backup.sql

【讨论】:

    猜你喜欢
    • 2017-04-30
    • 1970-01-01
    • 1970-01-01
    • 2014-12-08
    • 1970-01-01
    • 2014-07-19
    相关资源
    最近更新 更多