Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。从功能上看,跟 OpenStack中的 Heat 十分类似。
我们知道使用一个 Dockerfile
模板文件,可以让用户很方便的定义一个单独的应用容器。然而,在日常工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况。例如要实现一个 Web 项目,除了 Web 服务容器本身,往往还需要再加上后端的数据库服务容器,甚至还包括负载均衡容器等。
Compose
恰好满足了这样的需求。它允许用户通过一个单独的 docker-compose.yml
模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)。
Compose
中有两个重要的概念:
服务 (service
):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。
项目 (project
):由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml
文件中定义。
1、命令1(下载):
sudo curl -L https://github.com/docker/compose/releases/download/1.25.5/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
2、命令2(授权):
sudo chmod +x /usr/local/bin/docker-compose
3、查看是否安装成功
docker-compose --version
4、卸载
sudo rm /usr/local/bin/docker-compose
- version: "3.2"
-
- services:
- tomcat01: #服务名称
- container_name: tomcat01 # 相当于run 的 --name
- image: tomcat:8.0-jre8 #使用哪个镜像 相当于run image
- ports: #用来完成host与容器的端口映射关系 相当于run -p
- - "8080:8080"
- volumes: #完成宿主机与容器中目录数据卷共享 相当于run -v
- #- /root/apps:/usr/local/tomcat/webapps #使用自定义路径映射
- - tomcatwebapps01:/usr/local/tomcat/webapps
- networks: #代表当前服务使用哪个网络桥 相当于run --networ
- - hello
-
- tomcat02: #服务名称
- container_name: tomcat02
- image: tomcat:8.0-jre8 #使用哪个镜像
- ports: #用来完成host与容器的端口映射关系
- - "8081:8080"
- volumes: #完成宿主机与容器中目录数据卷共享
- #- /root/apps:/usr/local/tomcat/webapps #使用自定义路径映射
- - tomcatwebapps02:/usr/local/tomcat/webapps
- networks: #代表当前服务使用哪个网络桥
- - hello
-
- mysql:
- image: mysql:5.7.32
- container_name: mysql
- ports:
- - "3307:3306"
- volumes:
- - mysqldata:/var/lib/mysql
- - mysqlconf:/etc/mysql
- environment:
- - MYSQL_ROOT_PASSWORD=root
- networks:
- - hello
-
- redis:
- image: redis:5.0.10
- container_name: redis
- ports:
- - "6379:6379"
- volumes:
- - redisdata:/data
- networks:
- - hello
- command: "redis-server --appendonly yes" #run 镜像之后用来覆盖容器内容默认命令
-
-
-
-
- volumes: #声明上面服务所使用的自动创建的卷名
- tomcatwebapps01: #声明指令的卷名 compose自动创建该卷名但是会在之前加入项目名
- external: #使用自定义卷名
- false #true确定使用指定卷名 注意:一旦使用外部自定义卷名启动服务之前必须手动创建
- tomcatwebapps02:
- mysqldata:
- mysqlconf:
- redisdata:
-
- networks: #定义服务用到桥
- hello: #定义上面的服务用到的网桥名称 默认创建就是 bridge
- external:
- true #使用外部指定网桥 注意:网桥必须存在
模板指令和命令的区别:
模板指令:用来书写在docker-compose.yml文件中指令称之为模板指令,用来为服务进行服务的
命令:用来对整个docker-compose.yml对应的这个项目操作,书写docker-compose命令之后命令
简单就是一个在文件中操作,一个在文件外操作
启动docker compose服务
docker-compose up
启动docker compose服务,在后台启动
docker-compose up -d
关闭docker compose 服务
docker-compose down
进入指定的容器,4:进入Redis容器
docker-compose exec redis(docker-compose.yml中的声明服务ID) base
列出项目中目前的所有容器。
docker-compose ps
列出项目中目前的所有容器的ID,-q
只打印容器的 ID 信息
docker-compose ps -q
重启docker-compose服务,没有服务ID就重启项目中的所有服务。
docker-compose restart 服务ID
删除服务
删除所有(停止状态的)服务容器。推荐先执行 docker-compose stop
命令来停止容器。
docker-compose rm 服务ID
-f 强制直接删除,包括非停止状态的容器。一般尽量不要使用该选项。
docker-compose rm -f 服务ID
-v 删除容器所挂载的数据卷。
docker-compose rm -v 服务ID
启动已经存在的服务容器。
docker-compose start 服务ID
停止已经处于运行状态的容器,但不删除它。
通过 docker-compose start
可以再次启动这些容器。
选项:-t, --timeout TIMEOUT
停止容器时候的超时(默认为 10 秒)。
docker-compose stop 服务ID
查看各个服务容器内运行的进程。
docker-compose top
恢复处于暂停状态中的服务
docker-compose unpause 服务ID
暂停服务容器
docker-compose pause
查看服务日志
docker-compose logs 服务ID
1.创建目录hello
2.进入hello目录,创建文件docker-compose.yml
3.编辑文件,使用Tomcat服务
4.启动服务:docker-compose up
5.访问Tomcat
6.配置多个Tomcat服务
7.启动,命令:docker-compose up
8.访问Tomcat
结束!!
要生活得漂亮,需要付出极大忍耐,一不抱怨,二不解释,而在你不知道该干嘛的时候,积极一点总是好的。