目前我有两个容器,我从一个图像构建,然后链接这两个:
例如:
#mysql
docker build -t my/mysql docker-mysql
docker run -p 3306:3306 --name mysql -d my/mysql:latest
#webapp
docker build -t my/tomcat:7.0 tomcat/7.0
docker run -d --link mysql --name tomcat7 my/tomcat:7.0
由于我将webapp
容器与mysql
容器相关联,因此webapp
容器会创建一个MYSQL_PORT_3306_TCP_ADDR
环境变量。我使用这个环境变量然后连接到我的jdbc
字符串中的mysql数据库。
所有这一切都运行良好,但现在我想使用docker-compose
,以便可以从一个命令构建和运行所有内容。
但是,在使用docker-compose时,我注意到它在图像名称前面添加了docker_
,并且还弃用了link
选项。
问题
上述构建/运行命令如何转换为docker-compose yml文件,以便webapp容器可以连接到jdbc的mysql容器。
答案 0 :(得分:2)
您需要在撰写yml中添加alias
属性。以下摘自docs文档,是一个非常简短的例子
web:
links:
- db
- db:database
- redis
该compose片段定义了一个web
容器,该容器必须链接到db和redis容器,并且还将db
容器添加到别名`database。
在你的情况下,我认为tomcat容器的yml看起来像这样
mysql:
image: my/mysql:latest
ports:
- "3306:3306"
tomcat7:
image: my/tomcat:7.0
links:
- mysql
请记住,tomcat容器没有暴露任何端口!
答案 1 :(得分:2)
这是对docker-compose的粗略翻译。
请注意,docker-compose标记它自己的图像,因此假设您在名为mysql
的目录中创建了test
图像,那么容器名称将变为test_mysql_1
。最后附加1,因为您可以使用docker-compose扩展多个容器。
此文件还假定此文件结构
├── docker-mysql
│ └── Dockerfile
├── tomcat
│ └── 7.0
│ └── Dockerfile
└── docker-compose.yml
version: '2'
services:
mysql:
build:
context: "./docker-mysql"
hostname: mysql
ports:
- "3306:3306"
webapp:
build:
context: "./tomcat/7.0"
hostname: tomcat7
links:
- mysql