使用docker-compose自动构build(应用程序+ mySQL服务器)

使用mySQL为我的Web应用程序构build自动构build时遇到一些问题。 我将使用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 

我希望应用程序只需键入以下内容即可运行:

 docker-compose up 

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

对于运行你的docker集装箱的顺序,你需要设置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" 

然后运行docker ,为javatest构build特定版本,并使用-d (可选)以分离模式运行它:

 docker-compose up --build -d javatest 

只要记住容器不会等待启动db只是“启动容器”

在这种情况下,您需要修改入口点并创build将等待连接的其他脚本 – 例如检查打开的端口。 – 检查等待dockerbuild议


编辑完成后:

我已经添加了完整的示例,如何docker-compose应该看起来像。 我添加了正确的格式为yaml文件的versionservices

所以回到你想要做的事情上:

 (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)并依赖于dbjavatest服务正在执行步骤(3)(4)因为您构build了最javatest图像并使用链接在步骤(4) ,服务javatest依赖于dbinit因此它将等待容器启动(使用image orchardup/mysql )。