在我之前写的一篇文章docker启动spring boot项目 中用到了link
来进行容器间的通信,但是这种已经过时了,官方并不提倡,接下来,我们看官方提供的 docker compose
工具,来管理多个容器。
为什么需要Docker Compose
当多个容器相互之间需要通讯时,手动配置容器间连接变得非常复杂,一个一个容器手动启动,很笨拙。Docker Compose只需要简单的命令,就可以实现。
什么是Docker Compose
Compose 定位是“defining and running complex applications with Docker”,前身是
Fig,兼容 Fig 的模板文件。 Dockerfile 可以让用户管理一个单独的应用容器;而 Compose
则允许用户在一个模板(YAML 格式)中定义一组相关联的应用容器(被称为一个 project,即项目),例如一个 Web
服务容器再加上后端的数据库服务容器等。
该项目由 Python 编写,实际上调用了 Docker 提供的 API 来实现。
Docker Compose的使用场景
- 快速构建开发环境
- 自动化测试环境
- 单一主机部署
安装Docker Compose
>>方式一: PIP安装(推荐,但需要有python环境)
执行命令 $ sudo pip install -U docker-compose
后,执行docker compose
检查是否成功
>>方式二:二进制包
发布的二进制包可以在 https://github.com/docker/compose/releases 找到。
下载后直接放到执行路径即可。
例如,在常见的 Linux 平台上。
$ sudo curl -L https://github.com/docker/compose/releases/download/1.8.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
$ sudo chmod a+x /usr/local/bin/docker-compose
安装完成后,可以使用docker compose --help
来检查是否成功。
使用Docker Compose
- 定义Dockerfile
- 定义docker-compose/yml文件
- 通过docker-cpmpose up 启动docker-conpose.yml所定义的docker应用。
下面将按照在github的项目来使用Docker Compose,地址是: https://github.com/1996yarbrough/mysql-spring-boot-todo.git ,git clone下来后按照下面操作即可。
启动步骤
-
进入存在docker-compose.yml的文件目录,jar需要自己打包项目,并放在如下目录
cd /home/gitRepository/mysql-spring-boot-todo/docker-compose
-
后台启动
docker-compose up -d
-
测试一下
网址输入http://192.168.1.163:8080/
,看到网站打开成功。
Docker Compose通过网络别名通信
- 审查todo容器
root@localhost docker-compose]# docker ps
root@localhost docker-compose]# docker inspect b892424f3268
root@localhost docker-compose]# docker inspect 04aedda35bbc
关于报错
- Unsupported config option for services service
这是因为docker-compose --version
的版本与docker-compose.yml
定义的版本不一致造成的,
Compose区分Version 1和Version 2(Compose 1.6.0+,Docker Engine 1.10.0+)。Version 2支持更多的指令。Version 1没有声明版本默认是"version 1"。Version 1将来会被弃用。
所以,我们在安装时指定的是1.8.1的版本,docker-compose.yml
定义的version:2,就可以正常运行。
小提示
- docker-compose只有在docker镜像不存在时才会创建镜像
- 更新dockerfile后一定要执行docker-compose build重新创建镜像