Dockerfile使用python和mysql创建映像

时间:2019-03-08 19:41:01

标签: python mysql docker

我有两个容器“ 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的连接)

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

2 个答案:

答案 0 :(得分:1)

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

您可以在{@ 3}}的官方dockerhub页面上检查初始化新实例

答案 1 :(得分:0)

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

DockerFile:

FROM php:7.2-apache

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

ENTRYPOINT ["/entrypoint.sh"]

这将在App容器中运行您的入口点脚本。确保您在应用容器的撰写说明中拥有depends on属性。