单个主机中多个容器的编排,通过一个单独的docker-compose.yml模版文件(YAML格式)来定义一组相关联的应用容器。
Compose中有两个重要的个概念:
- 服务(service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。
- 项目(project):由一组关联的应用容器组成的一个完整业务单元,在 dockercompose.yml 文件中定义。
Compose 项目由 Python 编写,实现上调用了Docker服务提供的API来对容器进行管理。
Compose下载安装
- 从 官方GitHub Release处直接下载编译好的二进制文件
bash
$ sudo curl -L https://github.com/docker/compose/releases/download/1.17.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
- 使用pip安装,如果是x86_64架构linux建议使用下载二进制的方式,如果是ARM架构的系统使用pip安装
bash
$ sudo pip install -U docker-compose
- bash 补全命令
bash
$ curl -L https://raw.githubusercontent.com/docker/compose/1.8.0/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose
- 卸载
如果是二进制包方式安装的,直接删除二进制文件即可,卸载命令:sudo rm /usr/local/bin/docker-compose
如果是通过匹配安装的,卸载命令:sudo pip uninstall docker-compos
使用实例
功能说明
启动一个书籍管理系统的web服务,可进行数据信息的增加和删除,二进制文件为bookmanger。数据存在mysql中。
在容器中部署,启动两个容器,一个运行bookmanger后端程序,一个容器运行mysql数据库。
部署流程
- 下载ubuntu和mysql镜像
- go代码编译:golang镜像最新的版本是1.7,所以不能使用镜像编译,直接在本地编译。
- ubuntu镜像制作:Dockerfile内容如下:
bash
FROM ubuntu
WORKDIR /
COPY bookmanger /bin/
COPY view /view
CMD ["bookmanger"]
手动部署
mysql容器手动部署,设置root密码为password,创建名为sql_test的数据库,创建一个名为myuser的用户,并设置用户密码为userpassword。
bash
docker run -d -p 3306 --name db -v ./db/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=password -e MYSQL_DATABASE=sql_test \
-e MYSQL_USER=myuser -e MYSQL_PASSWORD=userpassword mysql
docker exec -it db mysql -uroot -p
bms容器手动部署
bash
docker run --name bms -d -p 8999:8999 -ip 172.17.0.2 -it ubuntu:bms
使用compose部署
docker-compose.yml文件如下:
bash
version: "3"
services:
db:
image: mysql
ports:
- "3306:3306"
restart: always
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: sql_test
MYSQL_USER: myuser
MYSQL_PASSWORD: userpassword
volumes:
- ./db/data:/var/lib/mysql
bms:
build: bookmanger/
command: bookmanger
ports:
- "8999:8999"
depends_on:
- db
restart: always
links:
- db
- db:database
compose目录结构
bash
composebms/
├── bookmanger
│ ├── bookmanger
│ ├── Dockerfile
│ └── view
│ ├── list.html
│ └── new.html
├── db
│ ├── data
│ │ └── sql_test
│ │ └── book.ibd
│ └── tables.sql
└── docker-compose.yml