我想创建一个已填充数据的MySQL Docker镜像.
我想创建这样的3层:
|---------------------|---------------------|
Layer 3 | Customer 1 Database | Customer 2 Database |
|---------------------|---------------------|
Layer 2 | Database image with tables but no data |
|-------------------------------------------|
Layer 1 | mysql:5.6.26 |
|-------------------------------------------|
Run Code Online (Sandbox Code Playgroud)
我现在的问题是如何为第2层和第3层创建正确的Dockerfile?我的empty_with_tables.sql文件被加载到第2层,customer1.sql和customer2.sql被加载到第3层的两个图像中.我读了一些关于将SQL文件放入'/docker-entrypoint-initdb.d'的内容.但这会导致数据在第一次启动图像时出现.这不是我想要的.我希望数据在图像中准备就绪(例如,在测试中可以快速获得).
我可以启动mysql映像,从命令行加载数据并执行'commit'但这不可重现,需要在SQL文件中的数据更改时再次执行此操作.
如何才能做到这一点?
最好的祝福,
我不明白'docker diff'的输出.请参阅下文了解详情.这是我的Docker版本:
$ docker version
Client version: 1.7.1
Client API version: 1.19
Go version (client): go1.4.2
Git commit (client): 786b29d
OS/Arch (client): linux/amd64
Server version: 1.7.1
Server API version: 1.19
Go version (server): go1.4.2
Git commit (server): 786b29d
OS/Arch (server): linux/amd64
Run Code Online (Sandbox Code Playgroud)
我在/ var/jenkins_home中有一个带有以下内容的Jenkins图像:
$ docker run -it --rm jenkins ls /var/jenkins_home
init.groovy.d
Run Code Online (Sandbox Code Playgroud)
然后我启动Jenkins填充Jenkins数据目录:
$ docker run --name app -d jenkins
Run Code Online (Sandbox Code Playgroud)
在Jenkins启动后,我调用容器列出文件:
$ docker exec app ls /var/jenkins_home
Download metadata.log
hudson.model.UpdateCenter.xml
identity.key.enc
init.groovy.d
jobs
nodeMonitors.xml
nodes
plugins
secret.key
secret.key.not-so-secret
secrets
updates …Run Code Online (Sandbox Code Playgroud)