一、什么是 docker compose
compose 项目是docker官方的开源项目,负责实现对docker容器集群的快速编排。
二、compose 定位
compose 定位是定义和运行多个 docker 容器的应用,同事可以对多个容器进行编排
三、compose 核心概念
服务(service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例(服务可以存在多个)
项目(project):由一组关联的应用容器组成的一个完整的业务单元,在 docker-compose.yml 文件中定义
四、compose的使用
1.创建一个docker-compose.yml文件
touch docker-compose.yml
2.编写docker-compose.yml
vim docker-compose.yml
#编写版本
version:"3.0"
#编写服务
services:
tomcat: #服务名唯一
image:tomcat:8.0-jre8 #创建当前这个服务使用的镜像是谁
ports:
- 8080:8080
tomcat01:
image:tomcat:8.0-jre8
ports:
- 8081:8080
参数介绍
image(指定为jing'x镜像名称或镜像ID。如果镜像本地不存在,compose将会尝试拉取这个镜像)
image: ubuntu
image: orchardup/postgresql
image: a4bc65fd
networks(配置容器内连接的网络)
version: "3"
services:
some-service:
networks:
- some-network
- other-network
networks:
some-network:
other-network:
ports(暴露端口信息。使用宿主端口:容器端口(HOST:CONTAINER)格式,或者仅仅指定容器的端口(宿主将会随机选择端口)都可以。)
ports:
- "3000"
- "8000:8000"
- "49100:22"
- "127.0.0.1:8001:8001"
注意:当使用 HOST:CONTAINER 格式来映射端口时,如果你使用的容器端口小于60并且没放到引号里,可能会得到错误的结果,因为 YAML 会自动解析 xx:yy 这种数字格式为60进制。为避免出现这种问题,建议数字串都采用引号包括起来的字符串格式。
volumes(数据卷所挂载路径设置。可以设置为宿主机路径(HOST:CONTAINER)或者数据卷名称(VOLUME:CONTAINER),并且可以设置访问模式(HOST:CONTAINER:ro)。该指令中路径支持相对路径)
volumes:
- /var/lib/mysql
- cache/:/tmp/cache
- ~/configs:/etc/configs/:ro
如果路径为数据卷名称,必须在文件中配置数据卷
version: "3"
services:
my_src:
image: mysql:8.0
volumes:
- mysql_data:/var/lib/mysql
volumes:
mysql_data:
模板
version: ""3.2 #上来写一个版本号
services: #用的哪个服务
tomcat: #服务名称
image: tomcat:8.0-jre8 #使用哪个镜像
ports: #用来完成host与容器的端口映射关系
- "8080:8080"
volumes: #完成宿主机与容器中目录数据卷共享
#- /root/apps:/usr/local/tomcat/webapps #使用自定义路径映射
- tomcatwebapps:/usr/local/tomcat/webapps #需要在外部声明
volumes: #声明上面服务所使用的自动创建的卷名
tomcatwebapps: #声明指令的卷名 compose自动创建该卷名但是会在之前加入项目名
external: 使用自定义卷名
false #true确定使用指定卷名 注意:一旦使用外部自定义卷名启动服务之前必须手动创建
3.运行docker-compose
docker-compose up #启动这个项目的所有服务,必须保证运行命令的目录存在docker-compose.yml