我正在尝试使用mysql数据库创建自定义docker镜像。我不需要在容器运行和删除之间安装卷或保留任何数据。目标是始终以相同的状态启动容器。使用它们进行测试并将其删除。
采取的步骤:
从通用mariadb图像启动mariadb容器。
docker run --name some-mariadb -e MYSQL_ROOT_PASSWORD=root -d mariadb:10.1.24
1a657ebec5ba
使用mysql客户端连接到db以创建数据库,用户和授予权限。
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容器。
创建此类图像的正确方法是什么?
答案 0 :(得分:0)
您的命令看起来不错。你是如何连接到mysql容器的?您似乎正在使用主机mysql而不是容器中运行的mysql。添加端口映射配置:
所以,运行如下:
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
:
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&amp;运行:
docker build . -t my-mariadb
docker run -e MYSQL_ROOT_PASSWORD=root -it my-mariadb