使用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
文件的version
和services
。
所以回到你想要做的事情上:
(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-compose
, db
正在执行步骤(1)
, dbinit
正在执行步骤(2)
并依赖于db
而javatest
服务正在执行步骤(3)
和(4)
因为您构build了最javatest
图像并使用链接在步骤(4)
,服务javatest
依赖于dbinit
因此它将等待容器启动(使用image orchardup/mysql
)。
- 无法访问在Docker上find的文件(无法打开stream:连接超时)
- docker堆栈networking问题
- 如何在docker-compose文件中dynamic获取主机ip?
- Docker撰写:如何设置envvariables以在脚本中使用
- 无法连接到运行在计算引擎上的docker容器上的mongodb
- Dockered Django + Celery(`celeryd`和`celerybeat`),任务被执行,但数据库(SQLite)不被修改。 哪里不对?
- 更改docker机器的URL
- docker-compose和django错误
- 如何将静态IP地址设置为通过交织networking进入Swarm的容器?