使用docker-compose进行自动构建(Application + mySQL服务器)

时间:2016-10-15 19:09:12

标签: mysql docker docker-compose

使用mySQL为我的Web应用程序构建自动构建时遇到了一些问题。 我将使用https://github.com/ehazlett/docker-sample-java-mysql-tomcat中的示例。 这是我的fig.yml文件:

db:
  image: orchardup/mysql
  environment:
    MYSQL_USER: java
    MYSQL_PASSWORD: java
    MYSQL_DATABASE: javatest
  ports:
    - "3306"

dbinit:
  image: orchardup/mysql
  entrypoint: /bin/bash
  volumes:
    - .:/host
  command: -c "sleep 4; mysql -u java --password=java -h mysql javatest < /host/init.sql; exit 0"
  links:
    - db:mysql

app:
  build: .
  links:
    - dbinit
    - db:mysql
  ports:
    - "8080"

这就是简单的Dockerfile

FROM ehazlett/tomcat7

COPY dbtest /opt/tomcat/webapps/dbtest

现在,为了手动运行它,我应该运行这些命令:

docker run -d -P -e MYSQL_USER=java -e MYSQL_PASSWORD=java -e MYSQL_DATABASE=javatest --name mysql orchardup/mysql

docker run -ti --rm --link mysql:mysql -v $(pwd):/host --entrypoint /bin/bash orchardup/mysql -c "sleep 4; mysql -u java --password=java -h mysql javatest < /host/init.sql; exit 0"

docker build -t javatest .

docker run -ti -P --rm --link mysql:mysql javatest

我希望applciation只需键入:

即可运行
docker-compose up

有没有办法做到这一点? 谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

有关运行泊坞窗容器的订购,您需要设置depends_on

对于你的情况:

version: '2'
services:
  db:
    image: orchardup/mysql
    environment:
      MYSQL_USER: java
      MYSQL_PASSWORD: java
      MYSQL_DATABASE: javatest
    ports:
    - "3306"
  dbinit:
    image: orchardup/mysql
    depends_on:
      - db
    entrypoint: /bin/bash
    volumes:
      - .:/host
    command: -c "sleep 4; mysql -u java --password=java -h mysql javatest < /host/init.sql; exit 0"
    links:
    - db:mysql
  javatest:
    build: .
    image: javatest
    depends_on:
    - dbinit
    links:
    - dbinit
    - db:mysql
    ports:
    - "8080"
使用javatest的特定版本

运行docker compose up ,并使用-d以分离模式运行(可选):

docker-compose up --build -d javatest

请记住,容器不会等待&#34;启动容器&#34; db启动。

在这种情况下,您需要修改入口点并创建将等待连接的其他脚本 - 例如,检查打开的端口。 - 检查wait-for docker suggestion

编辑后:

我已添加完整示例docker-compose的样子。我为version文件添加了servicesyaml以及正确的格式。

回到你想做的事情:

(1) docker run -d -P -e MYSQL_USER=java -e MYSQL_PASSWORD=java -e MYSQL_DATABASE=javatest --name mysql orchardup/mysql  
(2) docker run -ti --rm --link mysql:mysql -v $(pwd):/host --entrypoint /bin/bash orchardup/mysql -c "sleep 4; mysql -u java --password=java -h mysql javatest < /host/init.sql; exit 0"
(3) docker build -t javatest .
(4) docker run -ti -P --rm --link mysql:mysql javatest

<强> 说明:

docker-composedb正在执行步骤(1)dbinit正在执行步骤(2),并依赖于db和服务{ {1}}正在执行javatest(3)步骤,因为您构建了(4)图像,并使用步骤javatest中的链接运行它,并且还依赖服务(4)javatest上,所以它将等到容器启动(带有图像dbinit)。