一、docker-compose安装
docker常用命令、Dockerfile、docker库房该篇文章最后有docker-compose的安装教程。
docker-compose是一款单机多容器编排工具,在正常使用docker的时侯会使用好多命令,在输入那些命令的时侯容易出错,但是不便记录执行了什么命令,假如须要在其他的服务器上也布署同样的一份容器的话又要将这种命令执行一遍,服务器过多工作量也不小;这时使用docker-compose单机布署多容器就十分适用了。
二、docker-compose常用命令
docker-composeup创建并启动容器
docker-composeup-d以后台方式创建并启动容器
docker-compose-fyml文件up指定创建并启动容器使用的yml文件
docker-composeps:查看通过docker-compose创建的容器docker compose image,倘若是dockerrun启动的容器不会显示,通过dockerps可以查看通过dockerrun和docker-compose启动的容器
docker-composeimages:查看通过docker-compose得到的image,通过其他方法得到的image不会显示,通过dockerimages可以查看dockerpull、dockerrun、docker-compose、dockerbuild、dockercommit得到的image
docker-composestop/start停止/启动docker-compose.yml文件中定义的容器
docker-composedown停止并删掉docker-compose.yml文件中定义的容器及删掉docker-compose.yml文件中定义的network,并且定义的volume不会删掉。
docker-composelogsdocker-compose.yml文件中定义的容器名称查看某个容器的日志
其他命令及参数可以通过docker-composehelp查看
注意:
1、docker-compose的命令须要在有docker-compose.yml文件的目录才可以执行,否则使用docker-compose的命令会报错;而且只有该yml文件执行了up操作即创建了该docker-compose.yml定义的容器以后才可以看见对应的容器。
例如执行docker-composeps查看通过docker-compose运行了什么容器:
在没有docker-compose.yml文件的目录执行docker-compose的命令会报错,只有切换到有docker-compose.yml文件的目录方能正常执行docker-compose命令。
2、docker-compose命令,在那个目录下执行,这么就是对于该目录下的docker-compose.yml文件的操作,例如docker-composeup就是使用当前目录的docker-compose.yml文件创建启动容器linux 输入法,docker-composeps这么就是查看当前目录docker-compose.yml文件定义的容器(前提是执行了up操作就能看见定义的那些容器)。
分别在docker1和docker两个目录执行相同的命令,查看到的结果不相同。
三、docker-composeyml文件编撰
version:指定版本
services:该指令下边写该yml文件中须要定义的container信息,其中services的下边第一级指令就是指定的该容器的名称
如:
services: #定义container
mysql: #container名称为mysql
image: "mysql:5.7" #image来源
image:指定该容器使用的image,和build二选一
build:指定该容器使用的image通过那个目录下的Dockerfile文件进行完善,.表示当前目录的Dockerfile文件,和image二选一
ports:指定宿主机和容器的端口映射关系,可指定多个
networks:指定使用的网路信息,可指定多个
ipv4_address:和networks配合使用,指定容器在该网路中的ip信息
volumes:指定数据挂载信息,可以指定目录或文件的映射,也可以指定数据挂载记录和容器中目录的映射(这些通常指定的容器中目录是该容器Dockerfile文件中VOLUME指令指定的目录),倘若指定数据挂载记录的映射须要通过volumes定义数据挂载记录,可指定多个
environment:指定容器可选参数的值信息
networks:定义网路信息,相当于dockernetworkcreate命令,其中networks的下边第一级指令就是指定网路的名称,可以配合subnet指定网关信息
volumes:定义数据挂载记录,相当于dockervolumecreate命令
如:
volumes: #定义volume-相当于 docker volume create mysql
mysql: {}
或
volumes: #定义volume-相当于 docker volume create mysql
mysql:
比如:
version: "3" #docker-compose版本
services: #定义container
mysql: #container名称
image: "mysql:5.7" #image来源
ports:
- "3306:3306"
networks:
springboot:
ipv4_address: 172.20.0.2
volumes:

- mysql:/var/lib/mysql #设置持久化映射关系,其中mysql是下面volumes中定义的名称为mysql的数据挂载记录名称
environment:
MYSQL_ROOT_PASSWORD: root@123456Y #设置root账号密码
sb01: #container名称-相当于--name web
build: . #image来源,build . 表示使用当前目录的Dockerfile文件进行构建image
ports: #指定端口映射
- "9001:9989" #端口映射关系 和ports一起相当于-p 9001:9989
networks: #指定network-相当于--network springboot
springboot:
ipv4_address: 172.20.0.6 #指定容器ip地址-相当于--ip 172.20.0.6
sb02: #container名称-相当于--name web
build: . #image来源,build . 表示使用当前目录的Dockerfile文件进行构建image
ports: #指定端口映射
- "9002:9989" #端口映射关系 和ports一起相当于-p 9002:9989
networks: #指定network-相当于--network springboot
springboot:
ipv4_address: 172.20.0.7
sb03: #container名称-相当于--name web
build: . #image来源,build . 表示使用当前目录的Dockerfile文件进行构建image
ports: #指定端口映射
- "9003:9989" #端口映射关系 和ports一起相当于-p 9003:9989
networks: #指定network-相当于--network springboot
springboot:
ipv4_address: 172.20.0.8
nginx: #container名称-相当于--name web
image: nginx #image来源,build . 表示使用当前目录的Dockerfile文件进行构建image
ports: #指定端口映射
- "80:80" #端口映射关系 和ports一起相当于-p 80:80
networks: #指定network-相当于--network springboot
springboot:
ipv4_address: 172.20.0.3
volumes:
- "/usr/nginx/nginx.conf:/etc/nginx/nginx.conf" #指定nginx使用的配置文件
networks: #定义network-相当于 docker network create --subnet=172.20.0.0/24 springboot 该命令创建的network默认也是桥接模式
springboot: #network名称
driver: bridge #定义network类型为桥接模式
ipam:
driver: default
config:

- subnet: 172.20.0.0/24 #指定网段信息
volumes: #定义volume-相当于 docker volume create mysql
mysql: {}
里面的docker-compose.yaml文件内容就是启动了三个springboot项目分别是sb01、sb02、sb03,以及一个mysql和nginx,但是指定了mysql的数据持久化映射,nginx使用的配置文件,以及这五个容器都使用名称为springboot的网路。
我这儿通过docker-compose启动项目以后,访问插口疗效如下:
注意:
1、yml文件的格式层级关系是缩进两个中文状态的空格,不能用缩进符等代替空格
2、如果指令后边须要写值必须是中文逗号+英语空格方可写值,如:image:“mysql:5.7”
3、如果是可以写多个值的指令(通常这样的指令都是这个词组的复数格式,如volumes、networks、ports等),对于那些指令的值须要引号换行后使用-指定一个值,倘若有多个值,使用多个-指定;如:
ports: #指定端口映射
- "9003:9989" #端口映射关系 和ports一起相当于-p 9003:9989
- "8080:8080"
4、docker-compose文件的名称只能是以下四个之一:docker-compose.yml、docker-compose.yaml、compose.yml、compose.yaml
5、services下边定义的container的名称只能docker-compose的命令使用,docker命令未能使用该名称;docker要操作的话只能使用dockerps查看的container的名称,而这个名称的规则通常是docker-compose.yml文件所在目录的名称_docker-compose.yml文件中定义的容器名称_序号,如docker_sb01_1linux移植,其中docker是docker-compose.yml文件所在目录名称,sb01是docker-compose.yml文件中services指令下定义的container的名称docker compose image,1是序号;而对应的image的名称假如该image是build得到的这么就是docker-compose.yml文件所在目录的名称_yml文件中定义的容器名称,如:docker_sb01,其中docker是docker-compose.yml文件所在目录名称,sb01是docker-compose.yml文件中services指令下定义的container的名称,假如这个image不是build而是通过image指定的话这么就是本身的image名称。