如何将更改后的数据提交到一个新的映像

我想创build一个自定义的泊坞窗图像与MySQL数据库中。 我不需要在容器运行和清除之间挂载卷或保留任何数据。 目标是始终以相同的状态启动容器。 使用它们进行testing并将其删除。

采取的步骤:

从通用mariadb图像启动mariadb容器。

docker run --name some-mariadb -e MYSQL_ROOT_PASSWORD=root -d mariadb:10.1.24 1a657ebec5ba 

使用mysql客户端连接到数据库,以创build一个数据库,用户和授予权限。

 mysql -uroot -proot -h 0.0.0.0 mysql> CREATE DATABASE store mysql> CREATE USER 'store'@'%' IDENTIFIED BY 'store'; mysql> GRANT ALL ON store.* TO 'store'@'%'; mysql> exit 

导入数据。

mysql -ustore -pstore -h 0.0.0.0 store < ~/mysqldumps/store-2017-06-22-13-55.sql

此时容器具有所需的用户,权限,数据和数据库。

承诺新形象。

docker commit 1a657ebec5ba my-registry/store-test-db:2017-06-30-15-26

现在,当我从另一个主机上的这个图像启动一个容器。 它只是一个普通的mysql容器,没有我的用户或数据库。

什么是创build这样的图像的正确方法?

你的命令看起来不错。 你如何连接到MySQL容器? 看来你是在你的主机mysql而不是在容器中运行的mysql工作。 添加端口映射configuration:

所以,这样运行:

 docker run -p 3307:3306 --name some-mariadb -e MYSQL_ROOT_PASSWORD=root -d mariadb:10.1.24 

然后连接到这个容器mysql:

 mysql -P 3307 -h 127.0.0.1 -uroot -proot 

或者,您可以使用docker exec访问mysqlterminal:

 docker exec -it <container-id> mysql -uroot -proot mysql> 

编辑

正如@raitisd所调查的,这是由于已经在mysql / mariadb基础映像中定义的VOLUME。

你可以用这个来解决这个问题:

Dockerfile:

 FROM mariadb:10.1.24 RUN cp -r /var/lib/mysql /var/lib/mysql-no-volume CMD ["--datadir", "/var/lib/mysql-no-volume"] 

构build和运行:

 docker build . -t my-mariadb docker run -e MYSQL_ROOT_PASSWORD=root -it my-mariadb