为我的数据库创建Docker容器

时间:2015-06-27 19:49:23

标签: docker dockerfile

我有两个问题。

  1. 如果我在我的Dockerfile' FROM命令中添加MySQL图像,那就完成了 运行MySQL映像的entrypointCMD?我无法找到 关于那个的文件。
  2. 如何通过a创建可重现的开发数据库容器 Dockerfile?
  3. 我正在尝试创建可重现的开发数据库容器。目前我使用docker exec命令导入数据库,但我更愿意将其合并为一步。

    以下是我创建的Dockerfile的内容。

    FROM mysql:5.5.44
    
    COPY sql/devdb.sql /root/
    
    CMD mysql -u $MYSQL_USER -p$MYSQL_PASSWORD $MYSQL_DATABASE < /root/devdb.sql
    

    当我去运行它时,我收到错误:

      

    ERROR 2002(HY000):无法通过套接字连接到本地MySQL服务器   &#39; /tmp/mysql.sock' (2)

    我发现MySQL服务器甚至没有运行,这让我觉得没有父图像的命令运行?

    我在MySQL Docker Registry评论页面中找到了CMD建议,但我显然做错了。

    我将不胜感激任何帮助。谢谢!

1 个答案:

答案 0 :(得分:2)

  
      
  1. 如果我在Dockerfile的FROM命令中添加MySQL图像,它是否运行MySQL图像的ENTRYPOINTCMD
  2.   

是的,只要您不在Dockerfile中添加自己的ENTRYPOINTCMD指令。

  
      
  1. 如何通过Dockerfile创建可重现的开发数据库容器?
  2.   

当您执行 RUNENTRYPOINTCMD时,您缺少的是理解

RUN指令执行à构建时间。当你docker build ...时。

ENTRYPOINTCMD指令仅在运行时执行。当您执行docker rundocker start

有了这些知识,现在很清楚为什么没有MySQL服务器在构建时运行。因此,您无法在构建时将数据导入MySQL服务器。

但是,您可以做的是保留COPY指令,以便要启动的容器将准备导入sql数据,然后还提供您自己的入口点脚本,该脚本将负责(在运行时)时间)执行MySQL镜像提供的/entrypoint.sh脚本,然后导入你的sql数据。

my-custom-entrypoint.sh

旁边创建以下Dockerfile文件
#!/bin/bash

# first things first, call the MySQL image provided entrypoint script
# "$@" is to pass all parameters as they are provided
/entrypoint.sh "$@"

# then import the sql data
mysql -u $MYSQL_USER -p$MYSQL_PASSWORD $MYSQL_DATABASE < /root/devdb.sql

您的Dockerfile就是

FROM mysql:5.5.44

COPY sql/devdb.sql /root/
COPY my-custom-entrypoint.sh /

ENTRYPOINT ["/my-custom-entrypoint.sh"]