Tag: 数据库

Docker数据库文件:容器内部还是外部?

我们一直在考虑在服务器上使用Docker来实现Oracle数据库系统,并正在考虑两种不同的pipe理数据的策略: 将数据库文件(.dbfs)存储在服务器path的文件夹中,然后使用-v选项使该文件夹在容器中可用。 这个想法是有多个容器访问多个文件夹,所以我们可以pipe理不同版本的数据。 保持容器内的数据库文件,就好像它是一个常规的安装。 这个背后的原因是我们喜欢能够随时更改版本的想法,当我们需要恢复到旧版本的程序来修复一个bug时(例如,如果一个旧版本在生产中,目前正在进行)。 从这个意义上讲,我们所拥有的容器也应该有一个特定版本的应用程序(这是一个web应用程序)。 所以我的问题是:在我们的情况下哪种方法是最好的? 我们的集装箱还有另一个组织,我们错过了,会更好? 在这个问题上寻找更多的意见。 我们已经被告知,第一种方法比在容器中保存所有东西要好,但我们的testing没有显示出任何改进。 谢谢!

如何在构build时创build已填充的MySQL Docker镜像

我想创build一个已经填充数据的MySQL Docker镜像。 我想创build这样的3层: |———————|———————| Layer 3 | Customer 1 Database | Customer 2 Database | |———————|———————| Layer 2 | Database image with tables but no data | |——————————————-| Layer 1 | mysql:5.6.26 | |——————————————-| 我的问题是现在如何为第2层和第3层创build一个正确的Dockerfile? 其中我的empty_with_tables.sql文件被加载到第2层,customer1.sql和customer2.sql被加载到第3层的两个图像中。我读了一些关于将SQL文件放入“/docker-entrypoint-initdb.d”的内容。 但这会导致图像首次启动时的数据。 这不是我想要的。 我希望数据在图像中准备好(例如在testing中快速提供)。 我可以启动mysql映像,从命令行加载数据并执行“提交”,但这不是可重复的,需要在SQL文件中的数据更改时重新执行。 如何才能做到这一点? 最好的祝福, 莫滕格林赫尔曼森

docker工人运行没有主机卷的本地脚本

目标是在数据库容器运行后,使用curl从下载中将数据添加到多容器Web应用程序的数据库服务器容器中。 我可以通过docker-compose.yml或独立于Web应用程序的docker运行来实现,只要我使用主机卷即可。 如何在不使用主机卷或Web应用程序特定的Docker文件的情况下执行此操作? Docker撰写与主机卷的例子: dbinit: build: ./webtools_config/initdb command: bash -c "/tmp/webtools_config/dbinit.sh" volumes: – ./webtools_config:/tmp/webtools_config links: – db1 – db2 docker运行的例子,我想将脚本文件本地传递给docker 客户端 ,如./dbinit.sh: docker run -a stdin -a stdout -i -t \ –link dir_db1_1:db1 \ –link dir_db2_1:db2 \ initdb /bin/sh -c "./dbinit.sh"

Docker容器的IO性能

我试图调查docker的IO性能开销,所以我创build了一个特定的机器上的mysqldocker容器,我运行sysbench mysql基准测量IO性能。 Sysbench基本上在一段时间内执行一些读/写事务,然后输出完成的事务数和事务/秒率。 当我在本地机器上运行基准testing时,我每秒得到779.5个事务。 当我在一个mysql容器中运行基准testing时,我得到336个交易/秒。 几乎是每秒交易次数的一半。 这是docker的正常性能开销? 在生产系统的容器中运行数据库,特别是IO /数据库密集型应用程序,这是一个巨大的缺点

为什么要将数据容器从数据库容器中分离出来比把数据容量从磁盘中分离出来要好呢?

所以在Docker社区中,将数据容器从使用这些数据的数据库容器中分离出来是很常见的。 我听说的最大的原因是,如果你需要更新数据库,你仍然可以从新的数据库容器访问相同的数据。 我正在努力理解为什么这样做比仅仅将磁盘挂载到数据库容器更好,如果更新容器,请将相同的卷挂载到新的数据库容器中。 这些过程基本上是一回事。 有什么用例我看不到? http://www.offermann.us/2013/12/tiny-docker-pieces-loosely-joined.html 这个链接试图解释的好处,但同样的事情会发生在安装卷。

docker – 与多个数据库组成

我试图找出如何使用docker-compose.yml与从SQL转储导入2个数据库实现docker。 httpd: container_name: webserver build: ./webserver/ ports: – 80:80 links: – mysql – mysql2 volumes_from: – app mysql: container_name: sqlserver image: mysql:latest ports: – 3306:3306 volumes: – ./sqlserver:/docker-entrypoint-initdb.d environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: dbname1 MYSQL_USER: dbuser MYSQL_PASSWORD: dbpass mysql2: extends: mysql container_name: sqlserver2 environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: dbname2 MYSQL_USER: dbuser MYSQL_PASSWORD: dbpass app: container_name: webdata image: […]

Docker 1.12:多个副本,单个数据库

随着Docker 1.12引入新的“swarm模式”,我们一直试图将我们的应用程序迁移到容器上,并利用swarm模式的编排和集群。 我们的应用程序需要运行一些初始数据库脚本才能启动。 我们并没有将数据库打包到我们的dockerized应用程序中,以便它可以遵循无状态的微服务架构,并且多个容器最终会与单个数据库实例(目前)进行通信。 在创build服务时,我们不能使用–replicas和create service命令,因为多个实例会试图在单个数据库上创build表并失败。 尽pipe我们的脚本会检查数据库是否已经build立,并跳过创build,但是由于所有容器同时启动,所以不能使用。 我们找不到任何等待 –我们可以利用docker工人来解决这个问题的机制。 如果我们只能在第一个创build数据库的时候启动第二个容器(并且暴露了端口 ),但是我们怎么能为此configuration容器间通信呢? 或者,像flywaydb的工具可以帮助某种方式吗? 这应该如何用于生产?

MySQL Docker容器不会将数据保存到新映像

我正在尝试创build一个预设有特定架构和种子数据的MySQL Docker容器,以便可以将其他容器连接到它作为一个数据库。 我使用受信任的dockerfile / mysql映像作为基础,并且我编写了一个Dockerfile来从该基础创build一个新映像,并将我的schema.sql添加到其中。 在build立图像(mysql:base)之后,我一直试图在新容器中运行bash,然后进入mysql并创build我的数据库,然后导入模式。 然后我退出容器,尝试将容器提交给一个新的Docker镜像。 但是,生成的图像不会保留我对MySQL数据库所做的任何更改。 它确实坚持我在容器中写入的其他文件,但不是数据库。 这里是我用来构build初始图像(myorg / mysql:base)的Dockerfile。 FROM dockerfile/mysql:latest MAINTAINER (me) ADD schema.sql /data/schema.sql EXPOSE 3306 # Define working directory. WORKDIR /data CMD ["mysqld_safe"] build立后,我进入形象: docker run -i -t myorg/mysql:base bash 并运行MySQL来导入模式: myslqd_safe & 141218 00:15:56 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql mysql -u root mysql> CREATE DATABASE […]

在Docker容器中运行数据库的性能问题

有没有人注意到在Docker容器中运行数据库(MySQL或Postgres)的任何性能问题,我被告知会发生严重的性能下降。 请指教。

每个Docker容器一个或多个数据库

比方说,我有几个不同的容器,每个容器都使用它自己的数据库。 这种情况下的最佳做法是什么? 运行一个容器,比如说一个MySQL服务器,里面的所有数据库或者每个数据库运行一个数据库服务器容器? 除了表演之外的任何其他评论都会受到欢迎。