Docker Compose的使用

打印 上一主题 下一主题

主题 1028|帖子 1028|积分 3084

文章首发于我的博客:https://blog.liuzijian.com/post/docker-compose.html

  
Docker Compose是什么

Docker Compose是Docker官方的开源项目,负责实现对Docker容器的快速编排,Docker发起每个容器只运行一项服务,因为容器运行的开销很小,但是同时部署多个应用须要每个容器都单独编写Dockerfile会显得非常复杂,因而Docker官方提供了多容器部署的编排工具Docker Compose
Docker Compose允许用户通过一个单独的配置文件来界说一组相关联的应用容器为一个项目,Docker Compose可以管理多个Docker容器构成的一个应用,只须要界说好一个yaml格式的配置文件docker-compose.xml,写很多多少个容器之间的调用关系,然后只要一个下令就可以实现一键部署和一键启动和关闭这些容器。
Docker Compose文件格式版本有多种,这里以最为主流的3.x为例
Docker Compose安装

先去下载docker-compose的可执行文件,Docker Compose发布在GitHub上面(https://github.com/docker/compose/releases/),我下载的版本是linux64位的v2.30.3,下载地址:


  • docker-compose-linux-x86_64
安装很简朴,只要将下载下来的可执行文件赋予执行权限,并链接即可,先将下载下来的文件docker-compose-linux-x86_64放到/opt目录下,然后作为可执行文件,并建立软链接
  1. chmod +x ./docker-compose-linux-x86_64
复制代码
  1. ln -s /opt/docker-compose-linux-x86_64 /usr/local/bin/docker-compose
复制代码
之后,就可以在恣意目录执行docker-compose的下令了
Docker Compose文件

一个DockerCompose文件就是一个工程,工程由服务构成,服务就是一个个的应用实例,由一组关联的容器构成一个完整的业务单位就是工程。
文件内包含以下顶级元素:


  • version docker-compose文件版本,大多用3
  • name 应用部署的名称
  • services 服务,下面可以界说多个部署的应用
  • networks 自界说网络,供services下的应用使用
  • volumes 卷,应用用到的卷配置
  • configs 配置
  • secrets 密钥
每个顶级元素下又有以下常用配置项:


  • services.$service-name.image 使用的镜像和TAG
  • services.$service-name.privileged 设置容器权限
  • services.$service-name.container_name 容器名
  • services.$service-name.environment 环境变量
  • services.$service-name.restart 自启动,常见配置:总是always,出错时自启on-failure/on-failure:3
  • services.$service-name.command 自界说下令行参数
  • services.$service-name.ports 端口映射
  • services.$service-name.volumes 数据卷挂载
  • services.$service-name.depends_on 依赖哪个服务,在哪些服务启动后再启动
  • services.$service-name.networks 使用的自界说网络
  • networks.$network-name.driver 自界说网络的类型,不设置的话默认是bridge
  • networks.$network-name.ipam.config IP地址管理,用于管理网络的IP地址分配,不设置则Docker自动分配
  • networks.$network-name.ipam.config.subnet 自界说网络的网段,例如192.168.1.0/24
  • networks.$network-name.ipam.config.gateway 自界说网络的网关,例如192.168.1.1
例:
  1. version: '3'
  2. name: my-demo
  3. services:
  4.     app_1:
  5.        # 镜像:TAG
  6.        image: demo:1.0
  7.        # 容器名
  8.        container_name: demo
  9.        # 提升容器内权限
  10.        privileged: true
  11.        # 环境变量
  12.        environment:
  13.          - NAME1=VALUE1
  14.          - NAME2=VALUE2
  15.        restart: always
  16.       
  17.        command: ["-c nginx.conf"]
  18.       
  19.        # 宿主机端口:容器内端口
  20.        ports:
  21.          - "80:80"
  22.        # 扩展语法设置卷,允许更详细的配置,如设置卷驱动和选项
  23.        volumes:
  24.          # 绑定挂载,将主机上的一个具体目录或文件直接挂载到容器中
  25.          - type: bind
  26.            source: /var/lib/data
  27.            target: /data
  28.          # volume是由Docker管理的存储区域,通常在/var/lib/docker/volumes/下
  29.          - type: volume
  30.            source: my-data
  31.            target: /data
  32.            volume:
  33.              nocopy: true
  34.              subpath: sub
  35.        networks:
  36.          - my-network
  37.     app_2:
  38.        image: mysql:8
  39.        depends_on:
  40.          - app_1
  41.        # 绑定挂载,直接将主机路径映射到容器路径
  42.        volumes:
  43.          #宿主机路径:容器内路径
  44.          - /data:/var/data
  45.          #只读卷
  46.          - /host/path:/container/path:ro
  47.     app_3:
  48.        # 命名卷,由用户指定名称,Docker 管理其存储位置
  49.        volumes:
  50.          - my-data2:/var/lib/mysql
  51.     app_4:
  52.        # 匿名卷,由Docker自动生成,不指定主机路径或命名卷
  53.        volumes:
  54.          - /var/lib/mysql
  55.          
  56.     #多容器共享卷
  57.     app_5:
  58.        image: mysql:8
  59.        volumes:
  60.          - my-data3:/var/lib/mysql
  61.     app_6:
  62.        image: mysql:8
  63.        volumes:
  64.          - my-data3:/var/lib/mysql
  65. networks:
  66.   my-network:
  67.     driver: bridge
  68.     ipam:
  69.       config:
  70.         - subnet: 192.168.1.0/24
  71.           gateway: 192.168.1.1
  72. volumes:
  73.    my-data:
  74.    my-data2:
  75.    my-data3:
复制代码
Docker Compose常用下令

在docker-compose.yml文件路径下执行以下下令,如果docker-compose.yml文件的路径不是./或文件名不是默认的docker-compose.yml,你可以使用-f参数来指定文件路径和文件名。这样,DockerCompose会使用你指定的文件来运行下令。


  • 帮助
  1. docker-compose -h
复制代码


  • 上线全部的服务
  1. docker-compose up
  2. docker-compose  -f ./compose.yml up
复制代码


  • 上线全部的服务并后台运行
  1. docker-compose up -d
  2. docker-compose  -f ./compose.yml up -d
复制代码


  • 上线某一服务
  1. docker-compose up <service>
  2. docker-compose [-f ./compose.yml] up <service>
复制代码


  • 下线并删除容器、网络、数据卷和镜像
  1. docker-compose down
复制代码


  • 停止某一服务
  1. docker-compose stop <service>
复制代码


  • 删除某服务容器
  1. docker-compose rm -f <service>
复制代码


  • 进入容器实例内部
  1. docker-compose exec <service> /bin/bash
复制代码


  • 展示当前docker-compose文件编排过的运行的全部容器
  1. docker-compose ps
复制代码


  • 展示当前docker-compose文件编排过的容器进程
  1. docker-compose top
复制代码


  • 查看容器输出的日记
  1. docker-compose logs  <service>
复制代码


  • 检查配置是否有语法错误
  1. docker-compose config  
复制代码


  • 检查配置,有题目的才输出
  1. docker-compose -q  
复制代码


  • 重启服务
  1. docker-compose restart    <service>
复制代码


  • 启动服务
  1. docker-compose start   <service>
复制代码


  • 扩容,将服务名为app的应用扩容3份
  1. docker-compose scale <service>×3
复制代码
案例:部署WordPress博客系统

1.编辑compose.yml
  1. name: by_blog
  2. services:
  3.     mysql:
  4.       privileged: true
  5.       image: mysql:8.0
  6.       ports:
  7.         - "3306:3306"
  8.       environment:
  9.         - MYSQL_ROOT_PASSWORD=123456
  10.         - MYSQL_DATABASE=wordpress
  11.       volumes:
  12.         - mysql-data:/var/lib/mysql
  13.         - /app/myconf:/etc/mysql/conf.d
  14.       networks:
  15.         - blog-network
  16.       restart: always
  17.       
  18.     wordpress:
  19.       privileged: true
  20.       image: wordpress
  21.       ports:
  22.         - "8080:80"
  23.       restart: always
  24.       depends_on:
  25.          - mysql
  26.       environment:
  27.         - WORDPRESS_DB_HOST=mysql
  28.         - WORDPRESS_DB_USER=root
  29.         - WORDPRESS_DB_PASSWORD=123456
  30.         - WORDPRESS_DB_NAME=wordpress
  31.       volumes:
  32.         - wordpress-data:/var/www/html
  33.       networks:
  34.         - blog-network
  35. volumes:
  36.   mysql-data:
  37.   wordpress-data:
  38. networks:
  39.   blog-network:
复制代码
2.执行docker-compose下令启动服务
  1. docker-compose -f ./compose.yml up -d
复制代码
下令行输出
  1. [root@localhost opt]# docker-compose  -f ./compose.yml up -d
  2. [+] Running 35/24
  3. ✔ wordpress 22 layers [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿]      0B/0B      Pulled                                                                66.2s
  4. ✔ mysql 11 layers [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿]      0B/0B      Pulled                                                                               93.2s
  5.                                                                                                                                             
  6.                                                                                                                                             
  7.                                                                                                                                             
  8.                                                                                                                                             
  9.                                                                                                                                             
  10.                                                                                                                                             
  11.                                                                                                                                             
  12.                                                                                                                                             
  13.                                                                                                                                             
  14.                                                                                                                                             
  15.                                                                                                                                             
  16.                                                                                                                                             
  17.                                                                                                                                             
  18.                                                                                                                                             
  19.                                                                                                                                             
  20.                                                                                                                                             
  21.                                                                                                                                             
  22.                                                                                                                                             
  23.                                                                                                                                             
  24.                                                                                                                                             
  25.                                                                                                                                             
  26.                                                                                                                                             
  27. [+] Building 0.0s (0/0)                                                                                                                     
  28. [+] Running 5/5
  29. ✔ Network by_blog_blog-network     Created                                                                                            0.4s
  30. ✔ Volume "by_blog_mysql-data"      Created                                                                                            0.0s
  31. ✔ Volume "by_blog_wordpress-data"  Created                                                                                            0.0s
  32. ✔ Container by_blog-mysql-1        Started                                                                                            2.6s
  33. ✔ Container by_blog-wordpress-1    Started                                                                                            3.6s
  34. [root@localhost opt]#
复制代码
编排完成,服务乐成启动,可以看到docker-compose先是创建了自界说的网络,然后是创建和挂载数据卷,然后在按次序启动容器。
打开欣赏器,简朴举行初始化的操纵后,WordPress博客系统便进入可用状态了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

南飓风

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表