Docker Compose
1.简介
- Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。
- Compose定位是 定义和运行多个Docker容器的应用,同时还可以对多个容器进行编排。
- 用户通过单独的docker-compose.yml模版文件来定义一组相关联的应用容器为一个项目
- compose中核心概念
- 服务(service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例,服务可以存在多个
- 项目(project):由一组关联的应用容器组成的一个完整业务单元,在docker-compose.yml文件中定义
- Compose的默认管理对象是项目,通过子命令对项目中的一组容器进行便携地生命周期管理
- Compose项目由Python编写,实现上调用了Docker服务提供的API对容器进行管理,因此只有所操作的平台支持DockerAPI,就可以在其上利用Compose来进行编排管理。
2.Compose
2.1 安装Docker compose
官网:https://docs.docker.com/compose/install/
#下载稳定版
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
#对二进制文件授权
sudo chmod +x /usr/local/bin/docker-compose
# 查看版本号,测试是否安装成功
docker-compose version
2.2 docker-compose入门
-
创建一个docker-compose.yml文件
touch docker-compose.yml
-
在配置文件中定义一个项目存在哪些服务
1 version: "3.0" #指定版本 2 services: 3 tomcat: #服务名唯一 4 image: tomcat:8 #创建当前这个服务使用镜像是谁 5 ports: 6 - 8080:8080
-
运行docker-compose
docker-compose up #启动这个项目的所有服务 必须保证运行命令的目录存在docker-compose.yml
3.docker-compose命令模版
中文网址: https://vuepress.mirror.docker-practice.com/compose/compose_file/
3.1 重要概念
-
作用:compose以项目为核心,在项目中定义一组具有相同业务逻辑单元服务运行
-
服务(service) :一个服务就是一个应用容器
-
项目(project):有多个服务共同组成一个具有相同业务逻辑单元 项目在docker-compose.yml文件中进行定义
3.2 docker-compose模版指令
version: "3.0"
services:
tomcat: #服务名称
container_name: tomcat01 #相当于run的 --name
image: tomcat:8.0-jre8 #使用哪个镜像 #相当于run的image
ports: #用来完成host与容器的端口映射关系 #相当于run的 -p
- "8080:8080"
volumes: #完成宿主机与容器中目录数据卷共享 #相当于run的 -v
#- /root/demo:/usr/local/tomcat_8080/apache-tomcat-8.5.40/webapps #使用自定义路径映射
- tomcatwebapps:/usr/local/tomcat/webapps
networks: #代表当前服务使用哪个网络桥 #相当于run的 --network
- demo
volumes: #声明上面服务所使用的自动创建的卷名
tomcatwebapps: #使用卷名 compose自动创建该卷名但是会在之前加上项目名
external: #使用自定义卷名
false #true确定使用指定卷名 注意:一旦使用外部自定义卷名启动服务之前必须手动创建
networks: #定义服务用到的桥
demo: #定义上面的服务用到的网桥名称 默认创建就是bridge
external:
true #使用外部指定网桥 注意:网桥必须存在
-
数据卷(volume)命令
[root@localhost ~]# docker volume help Commands: create #创建卷 inspect #显示一个或多个卷的详细信息 ls #列表卷 prune #删除所有未使用的本地卷 rm #删除一个或多个卷
-
网络(network)命令
[root@localhost ~]# docker network help Commands: connect #将某个容器连接到一个docker网络 create #创建一个docker局域网络 disconnect #将某个容器退出某个局域网络 inspect #显示某个局域网络信息 ls #显示所有docker局域网络 prune #删除所有未引用的docker局域网络 rm #删除docker网络
3.3 compose模版指令
docker-compose.yml
version: "3.8" #https://docs.docker.com/compose/compose-file/compose-file-v3/
services: #用来书写当前项目中哪些容器服务
tomcat: #服务名称
container_name: tomcat8080 #指定启动时容器名称
image: tomcat:8.0-jre8 #指定使用镜像
ports: #指定容器端口与宿主机端口映射
- "8080:8080"
volumes: #指定容器中哪个路径与宿主机中路径进行数据卷映射
- /root/apps:容器内路径 #绝对路径
- tomcatwebapps:/usr/local/tomcat/webapps #自动(通过volumes声明)
networks: #指定容器启动之后使用哪个网桥
- ems
cmd: redis-server /usr/local/redis/conf/redis.conf #用来覆盖容器默认启动指令
environment: #用来指定容器启动时环境参数
- MYSQL_ROOT_PASSWORD=root
env_file: #用来将environment环境中配置放入指定配置文件中
- mysql.env #文件中的内容必须是MYSQL_ROOT_PASSWORD=root
depends_on: #代表这个容器依赖那些容器启动之后才能启动
- mysql #服务名
healthcheck: #心跳机制
test: [ "CMD", "curl", "-f", "http://localhost" ]
interval: 1m30s
timeout: 10s
retries: 3
sysctls: #用来修改容器内系统的参数
- net.core.somaxconn=1024
- net.ipv4.tcp_syncookies=0
ulimits: #用来修改容器内系统的最大进程数
nproc: 65535
nofile:
soft: 20000
hard: 40000
volumes:
tomcatwebapps:
external:
true
networks:
ems:
external:
true
3.4 build指令
-
作用:用来将指定dockerfile打包成对应镜像,然后在运行该镜像
-
build:指定Dockerfile所在目录,先根据build中Dockerfile自动构建镜像,自动运行容器
version: "3.0" services: demo: build: #启动服务时先将build命令中指定dockerfile打包成镜像,在运行该镜像 context: demo #指定上下文目录dockerfile所在目录 相对路径 dockerfile: Dockerfile container_name: demo ports: - "8089:8089" networks: - demo depends_on: - tomcat tomcat: #服务名称 container_name: tomcat8080 image: tomcat:8.0-jre8 #使用哪个镜像 ports: #用来完成host与容器的端口映射关系 - "8080:8080" volumes: - tomcatwebapps:/usr/local/tomcat/webapps networks: - demo depends_on: #代表这个容器依赖那些容器启动之后才能启动 - mysql #服务名 mysql: image: mysql:5.7.32 container_name: mysql01 ports: - "3307:3306" volumes: - mysqldata:/var/lib/mysql - mysqlconf:/etc/mysql #environment: #- MYSQL_ROOT_PASSWORD=root env_file: #用来将environment环境中配置放入指定配置文件中 - mysql.env networks: demo: volumes: tomcatwebapps: external: false mysqldata: mysqlconf: networks: demo: external: true
3.5 docker-compose指令
-
compose模版指令 和指令区别
- 模版指令:用来书写在docker-compose.yml文件中指令称之为模版指令 用来为服务进行服务的
- 指令:用来对整个docker-compose.yml对应的这个项目操作 书写docker-compose命令之后命令
-
常用指令
#1.up指令 作用:用来启动所有docker-compose服务 -d后台启动 [root@localhost docker-compose]# docker-compose up -d #2.down指令 作用:用来关闭所有docker-compose服务 删除网桥 [root@localhost docker-compose]# docker-compose down #3.exec指令 作用:进入容器 exec后跟docker-compose.yml中声明服务id [root@localhost docker-compose]# docker-compose exec tomcat(服务名) bash #4.ps指令 作用:用来展示当前docker-compose运行的所有容器 [root@localhost docker-compose]# docker-compose ps #5.restart指令 作用:用来重启项目中某个服务如果不写服务id默认重启所有服务 [root@localhost docker-compose]# docker-compose restart 服务id #6.rm指令 作用:用来删除项目服务 -v不要操作会删除服务的数据卷 [root@localhost docker-compose]# docker-compose rm -fv [服务id] #7.start指令 启动服务 docker-compose start [服务id] #8.stop指令 启动服务 docker-compose stop [服务id] #9.top指令 用来查看compose容器内运行的进程 [root@localhost docker-compose]# docker-compose top #10.unpause指令 启动服务 [root@localhost docker-compose]# docker-compose unpause demo(服务id) #11.pause指令 停止服务 [root@localhost docker-compose]# docker-compose pause demo(服务id) #12.logs指令 作用:查看服务日志 [root@localhost docker-compose]# docker-compose logs demo(服务id)
Docker可视化工具
1.下载可视化工具
[root@localhost ~]# docker pull portainer/portainer
2.启动portainer
[root@localhost ~]# docker run --name portainer -d -p 8000:8000 -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer
3.通过docker-compose启动
portainer:
image: portainer/portainer
container_name: portainer
ports:
- "8000:8000"
- "9000:9000"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- portainer_data:/data
networks:
- ems