Docker Compose
介绍
Docker Compose是一个用于运行多个容器应用的编排工具,可以通过docker-compose将多个容器统一化管理。
使用Docker Compose需要三步
1、在Dockerfile中定义环境
2、在docker-compose.yml中定义服务
3、运行docker-compose up命令
安装compose
#官网地址,下载速度慢
curl -L "https://github.com/docker/compose/releases/download/1.26.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/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
$ chmod +x /usr/local/bin/docker-compose
$ docker-compose version
docker-compose version 1.26.2, build eefe0d31
docker-py version: 4.2.2
CPython version: 3.7.7
OpenSSL version: OpenSSL 1.1.0l 10 Sep 2019
#表示安装成功
命令(以下命令均可适用docker)
#以下命令均为在当前目录下存在docker-compose.yaml文件,也可以使用docker-compose -f 指定使用yaml文件
$ docker-compose up -d #后台启动docker-compose
$ docker-compose start #启动容器,start命令会先检查docker-compose.yaml文件中的容器是否启动,所有多次start并不会报错
$ docker-compose stop #停止容器
$ docker-compose pause #暂停容器
$ docker-compose unpause #取消暂停容器
$ docker-compose ps #显示所有容器
$ docker-compose rm -s #强制删除容器
$ docker-compose logs #查看容器日志,该命令是将docker-compose启动的容器日志拼接,即可查看所有容器日志
$ docker-compose config -q #检查yaml文件语法是否正确,无法检查内容
测试
按照官网提示,进行浏览器计数测试,新建需要的compose文件夹 Dockerfile、docker-compose.yml文件,创建好后执行docker-compose up
1、会创建默认网络
version: '3.3'
services:
web_nginx:
image: nginx:latest
ports:
- 180:80
$ docker-compose up
#会创建默认的网络,网络名称为 docker-compose文件所在文件名称_自定义网络名称(不写默认default)
#例如docker-compose.yaml在opt下 就会创建网络 opt_default
Creating network "opt_default" with the default driver
..........
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
8fc41f85498b bridge bridge local
83857ef835cb host host local
c61b545e760e none null local
6335020114b5 opt_default bridge local
#而且创建自定义网络的时候,默认的网段都为172.*.*.*
$ docker inspect opt_default
[
{
"Name": "opt_default",
.....
"Subnet": "172.18.0.0/16",
"Gateway": "172.18.0.1"
}
]
....
2、使用自定义网络
version: '3.3'
networks:
test-net:
ipam:
config:
- subnet: 10.88.12.0/24
gateway: 10.88.12.1
或者使用
docker network create --subnet 10.88.12.0/24 --gateway: 10.88.12.1 opt_test-net
version: "3.3"
services:
mysql_test:
image: ${local_registry}/mysql:5.7.39_sudy
container_name: mysql_test
#network_mode: bridge
ports:
- target: 3306
published: 3306
protocol: tcp
mode: host
volumes:
- /opt/mysql/init/:/docker-entrypoint-initdb.d/
- /opt/mysql/data/:/var/lib/mysql/
- /opt/mysql/conf/:/etc/mysql/conf.d/
- /opt/mysql/dump/:/home/dump/
- /etc/localtime:/etc/localtime:ro
environment:
- MYSQL_ROOT_PASSWORD=test1234
- INIT_SQL_FILE=init.sql
restart: always
networks:
default:
external: #表示使用外部的名称为opt_test-net的网络
name: 'opt_test-net'
$ docker-compose up -d
#创建自定义网络,名称为 docker-compose文件所在文件名称_定义网络名称(opt_test-net)
⠿ Network opt_test-net Created
⠿ Container opt-mysql_test-1 Started
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
8fc41f85498b bridge bridge local
83857ef835cb host host local
c61b545e760e none null local
d7c1219ace98 opt_test-net bridge local
$ docker inspect opt_test-net
#此时网段和容器ip都会变成自定义的网段和ip
[
....
"Config": [
{
"Subnet": "10.88.12.0/24",
"Gateway": "10.88.12.1"
}
]
},
....
]
3、创建镜像
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> 2b43861d5a7f 2 hours ago 41.7MB
python 3.7-alpine 4fac8cece98e 33 hours ago 41.7MB
4、启动两个容器web、redis
$ cat docker-compose.yml
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
redis:
image: "redis:alpine"
yml文件规则
参数详解:https://docs.docker.com/compose/compose-file/
yml文件分3层
#版本
version: ""
#服务
services:
web: #服务名
bulid:
coontext: ./aaa
imgae: aaaa:v1 #当同时指定build和image标签时,compose 构建镜像时会把镜像命名为image后面的名称
redis:
....
#其他配置
volumes:
networks:
configs: