如何在构建另一个容器期间填充Mysql docker容器?

时间:2016-02-09 11:28:41

标签: docker dockerfile docker-compose

我正在尝试构建一个docker-compose文件,它自动为我的应用程序构建一个容器,以及一个存储所有数据的mysql容器。

在我的应用程序的dockerfile中,我有一个脚本,它设置应用程序运行所需的所有数据库表和预设值。是否有可能以某种方式将mysql容器的引用传递给myapplication,在构建myapplication期间它可以访问mysql容器?

如果是这样,我怎么能这样做,如果没有,那该怎么办呢?

搬运工-compose.yml

mysql:
  image: mysql/mysql-server
  ports:
    - "3306:3306"
  environment:
    MYSQL_USER: root
    MYSQL_ROOT_PASSWORD: mysql-root-password

myapplication:
  command: /home/myapplication/startup.sh
  build: ./..
  dockerfile: ./dockerfiles/myapplication
  ports:
    - "443:443"
    - "8090:8090"
  links:
    - mysql:docker-mysql
  environment:
    MYSQL_SERVER: docker-mysql

所有MyApplication-dockerfile

FROM ubuntu:latest

EXPOSE 443

ENV applicationPath="/home/application“

COPY . ${applicationPath}

#Execute installationScript
RUN /bin/bash -c "./${applicationPath}/Tools/install_all.sh"

1 个答案:

答案 0 :(得分:3)

执行docker-compose build命令时,docker只会构建docker-compose.yml文件中定义的每个服务的图像(在您的情况下为mysql和{{ 1}}),这意味着不会运行任何容器。

执行myapplication命令后,docker将为之前构建的每个图片运行容器,一个用于docker-compose run,另一个用于mysql。现在它们都已经启动,它们可以相互交互。

那么,我该怎么办?

我将在运行容器时和执行startup.sh脚本之前执行install_all.sh脚本(猜测它包含数据库设置)。请注意,myapplication容器只有在启用时才可访问,这意味着仅在mysql执行后才能访问。

<强>搬运工-compose.yml

docker-compose up

另请注意,您的... myapplication: command: bash -c "/home/myapplication/Tools/install_all.sh && /home/myapplication/startup.sh" ... 容器必须安装了mysql-client才能与mysql服务器通信。只需将以下行添加到Dockerfile即可安装它:

myapplication

在你的RUN apt-get update && apt-get install mysql-client -y 中,你可以像下面那样调用mysql(创建数据库):

install_all.sh script

如果您对此有任何疑问,请告诉我,我会更新答案。