如何使用docker-compose链接两个容器

时间:2016-03-01 17:10:40

标签: java docker docker-compose

目前我有两个容器,我从一个图像构建,然后链接这两个:

例如:

#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容器。

2 个答案:

答案 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