我有一个简单的项目,在 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 容器。但是当检查新容器中的表时,我意识到我之前创建的表不在那里。有什么办法可以成功地将图像与表格一起保存吗?谢谢你。
我为
superset
做了同样的事情并且工作了。以下是我遵循的步骤。
cassandra:latest
运行
sudo docker ps
docker-compose.yml
文件位置 sudo docker-compose down
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
sudo docker-compose up -d