【问题标题】:Dockerfile create image with both python and mysqlDockerfile 使用 python 和 mysql 创建图像
【发布时间】:2019-07-30 21:13:03
【问题描述】:

我有两个容器“web”和“db”。我有一个 csv 格式的现有数据文件。

问题是我可以使用 docker-compose 使用模式初始化 MySQL 数据库,或者只使用参数运行,但是如何导入现有数据?我有 Python 脚本来解析和过滤数据,然后将其插入 db,但由于单个图像是 MySQL,我无法在“db”容器中运行它。

更新1

version: '3'
services:
  web:
    container_name: web
    build: .
    restart: always
    links:
      - db
    ports:
      - "5000:5000"
  db:
    image: mysql
    container_name: db
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    environment:
      MYSQL_DATABASE: "test"
      MYSQL_USER: "test"
      MYSQL_PASSWORD: "test"
      MYSQL_ROOT_PASSWORD: "root"
      MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
    ports:
      - "33061:3306"

有一个 Python 脚本用于从 csv 文件中读取数据并将其插入数据库,效果很好。现在我想在设置 MySQL 容器后运行脚本。 (我已经在容器中连接了 Python 和 MySQL)

否则,任何人有更好的解决方案来导入现有数据?

【问题讨论】:

  • 您可能会启动第三个临时容器来运行一次导入。分享您的docker-compose.yml,我们可以从那里获取!
  • 您是否有可以共享的现有 Docker Compose 设置?这听起来像是一个非常典型的设置,将 Python 脚本连接到不同容器中的数据库。
  • @Max 我用你建议的方法成功了。但这会有点多余吗?由于一旦导入数据,就不需要存在第三个容器了。
  • @DavidMaze 我用 Python 脚本连接它们,但我想用现有数据设置它们。

标签: python mysql docker


【解决方案1】:

如果在herehere 中描述的运行容器,如果这些脚本/sql 文件安装在/docker-entrypoint-initdb.d 下,则MySQL docker 映像能够执行shell 脚本或sql 文件。因此,我建议您编写一个读取 CSV 文件的 SQL 文件(您应该将其挂载到您的容器以便 sql 文件可以读取它),以便将其恢复到 MySQL 可能类似于 this answer 或编写一个 bash 脚本将 csv 导入 mysql 任何适合你的东西。

您可以在mysqlmysql官方dockerhub页面查看初始化新实例

【讨论】:

  • 在您的解决方案中,不能在导入数据库之前修改容器中的数据。我真的是 Docker 的新手。数据和应用分离是不是最好的方式?
  • 您能详细说明一下吗?您说您已经将数据保存为 CSV 文件吗?
  • 是的。我有一个 csv 文件,位于某人的 github 中。我想 git clone 它并在导入数据库之前修改一些数据格式,例如将 % 转换为十进制。
  • 所以在这种情况下,您可以添加一个 bash 脚本来克隆数据并对其进行修改,然后将其导入 MySQL
  • 你的意思是用bash修改数据吗?
【解决方案2】:

您可以从 Dockerfile 调用脚本(入口点)。在此脚本中,您可以调用您的 python 脚本。例如:

Docker 文件:

FROM php:7.2-apache

RUN apt-get update    
COPY ./entrypoint.sh /entrypoint.sh

ENTRYPOINT ["/entrypoint.sh"]

这将在 App 容器中运行您的入口点脚本。确保您的应用容器中包含 depends on 属性来撰写描述。

【讨论】:

  • 我想把数据和应用分开。数据应该在“db”容器中,但我正在寻找一种将数据导入 MySQL 的方法。
猜你喜欢
  • 1970-01-01
  • 2016-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-04
  • 2018-02-07
  • 1970-01-01
相关资源
最近更新 更多