我正在尝试构建一个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"
答案 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
如果您对此有任何疑问,请告诉我,我会更新答案。