一、简单介绍
Compose是Docker官方的容器编排工具,可以让用户通过编写简单yml模板文件,快速创建和管理基于Docker容器的应用集群
Github开源地址:https://github.com/docker/compose
1.1、使用Compose的三个基本步骤
- 在
Dockerfile
定义应用应用的运行环境,让它能够在任何地方在次运行 - 在
docker-compose.yml
定义应用的service的结构,使其能够在隔离的环境里面能够一起运行 - 最后运行运行
docker-compose up -d
启动应用的容器
1.2、一个docker-compose.yml
示例
version: '2'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
redis:
image: redis
命令 | 功能 |
---|---|
version | compose文件版本,最新v3 |
build | 指定Dockerfile所在文件夹的路径 |
volumes | 数据卷挂载路径设置 |
ports | 暴露端口信息,“宿主机端口:容器端口” |
restart | 指定重启策略,“no、always、on-failure、unless-stop” |
二、安装部署
1、首先确保docker安装完成
$ docker -v
Docker version 19.03.12, build 48a66213fe
2、安装docker-compose
- 二进制安装(推荐使用此方法进行安装)
$ curl -L https://get.daocloud.io/docker/compose/releases/download/1.26.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
$ docker-compose --version
docker-compose version 1.26.2, build 1110ad01
- pip安装
$ pip install docker-compose
$ docker-compose -v
docker-compose version 1.26.2, build unknown
提示:如有报错,多执行几次,或者升级pip在执行
2.1、卸载compose
如果是二进制安装,删除二进制文件即可
$ sudo rm /usr/local/bin/docker-compose
如果是通过Python pip工具安装,执行如下命令删除
$ sudo pip uninstall docker-compose
三、应用示例
3.1、docker-compose部署spark
docker-compose.yml
version: '2'
services:
master:
image: sequenceiq/spark:1.4.0
hostname: master
ports:
- "4040:4040"
- "8042:8042"
- "7077:7077"
- "8088:8088"
- "8080:8080"
restart: always
command: bash /usr/local/spark/sbin/start-master.sh && ping localhost > /dev/null
worker:
image: sequenceiq/spark:1.4.0
depends_on:
- master
expose:
- "8081"
restart: always
command: bash /usr/local/spark/sbin/start-slave.sh spark://master:7077 && ping localhost >/dev/null
$ docker-compose up -d
Creating network "spark_default" with the default driver
Creating spark_master_1 ... done
Creating spark_worker_1 ... done
访问http://ip:8080
3.2、docker-compose部署wordpress
docker-compose.yml
version: "3"
services:
mysql:
image: mysql:5.6
ports:
- "3306:3306"
environment:
- "MYSQL_ROOT_PASSWORD=mysql"
- "MYSQL_PASSWORD=mysql"
- "MYSQL_DATABASE=wordpress"
wordpress:
image: wordpress
ports:
- "8080:80"
environment:
- "WORDPRESS_DB_NAME=wordpress"
- "WORDPRESS_DB_PASSWORD=mysql"
- "WORDPRESS_DB_HOST=mysql"