将docker容器的当前状态保存到新的docker镜像中

问题描述 投票:0回答:1

我有一个简单的项目,在 docker 容器中有一个 Cassandra 数据库。数据库仅包含一个键空间和一张表。我想在创建键空间和表后将容器保存为图像。因此,在新的 docker 镜像中,它将包含两者。这背后的主要思想是在测试应用程序的功能期间使用这个新镜像来创建TestContainers。另外,我不需要每次都生成表,因为新容器无论如何都会有它,并且在测试类中我只能专注于实际的功能测试。

该项目包含一个学生服务,该服务具有用于添加、更新、获取和删除学生数据的 CRUD 操作。我使用以下 docker-compose 文件创建了第一个容器

docker-compose.yml

version: '3'

services:
  cassandra:
    image: cassandra:latest
    container_name: test-container-student
    ports:
      - 9042:9042
    volumes:
      - C:/Users/{username}/Documents/backup/student:/var/lib/cassandra

学生班

public class Student
{
    public Guid StudentId { get; set; }
    public string? FirstName { get; set; }
    public string? LastName { get; set; }
    public int Age { get; set; }
}

然后我运行这个 Program.cs 来生成键空间和学生表。

using Cassandra;

namespace TestProject;

class Program
{
    static void Main(string[] args)
    {
        // Define the Cassandra cluster
        var cluster = Cluster.Builder()
            .AddContactPoint("127.0.0.1") 
            .Build();

        // Create a session
        var session = cluster.Connect();

        // Create the keyspace if it doesn't exist
        session.Execute(@"
            CREATE KEYSPACE IF NOT EXISTS StudentDetails
            WITH replication = {
                'class': 'SimpleStrategy',
                'replication_factor': 1
            }");


        session.Execute(@"
        CREATE TABLE IF NOT EXISTS StudentDetails.students (
            student_id UUID PRIMARY KEY,
            first_name TEXT,
            last_name TEXT,
            age INT
        )");
    }
}

运行项目后,它成功创建了键空间和表。我使用

docker commit
保存了 docker 镜像。然后我使用这个新的 docker 镜像生成了一个新的 docker 容器。但是当检查新容器中的表时,我意识到我之前创建的表不在那里。有什么办法可以成功地将图像与表格一起保存吗?谢谢你。

docker docker-compose cassandra cql
1个回答
0
投票

我为

superset
做了同样的事情并且工作了。以下是我遵循的步骤。

  1. 使用
    cassandra:latest
     运行 
    sudo docker ps
  2. ID
  3. sudo docker commit new-cassandra
  4. 转到您的
    docker-compose.yml
    文件位置
    sudo docker-compose down
  5. 使用新的 cassandra 图像编辑
    docker-compose.yml
version: '3'

services:
  cassandra:
    image: new-cassandra
    container_name: new-container-student # <- change name here
    ports:
      - 9042:9042
    volumes:
      - C:/Users/{username}/Documents/backup/student:/var/lib/cassandra
  1. sudo docker-compose up -d
© www.soinside.com 2019 - 2024. All rights reserved.