docker的服务编排

想学习更全面的docker知识可以点击右侧: Docker的概念及基本指令学习(全)

docker 服务编排

  • docker 服务编排也叫docker compose,它的出现是应来解决使用docker部署大型应用的业务场景的问题。通常在生产环境中,使用docker部署一个应用需要使用多个容器,例如部署前端、后端、依赖服务、数据库等。如果每个容器都需要手工使用shell来启动则效率过于低下,所以在这样的场景中,我们可以采用docker compose来进行docker容器的编排工作。

第一步:下载docker compose

curl -L https://github.com/docker/compose/releases/download/1.29.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

第二步:修改docker compose让其有可执行权限

chmod 744 /usr/local/bin/docker-compose

第三步:测试

docker-compose -version

第四部:docker-compose.yml文件的编写
在docker-compose.yml文件中可以编写相关的配置属性,用来管理compose的构建过程,主要的属性包括:
1)version 代表compose文件格式版本,按照官网的实例,建议目前采用‘3.9’版本
2)services 该属性是compose文件中的核心属性,在该属性之下,可以配置compose启动的各种服务。主要是需要compose启动的各种容器信息。也是compose文件中主要的开发内容。
常用属性:

属性名称说明
image当前服务使用什么镜像文件
ports当前容器需要映射的端口信息 - ”8080:80“
enviroments当前镜像需要传递的参数
volumes当前镜像的挂在点
tty:true代表使用-it模式启动服务
build指定dockerfile所在的路径,当使用docker compose编排一个容器,而且该容器需要构建的时候需要使用该参数
container_name指定编排容器的名称
restart:always在docker服务重启后,该容器是否自动重启
depends_on: 服务名设定服务依赖关系,通过该配置可以决定服务的启动顺序
env_file指定配置文件
context指定上下文
dockerfile指定需要使用的dockerfile文件

3)networks

例子1:在service中配置简单的服务信息,编写compose文件,启动一个nginx容器

version: '3.9'
services:
  my_nginx:
    image: "nginx"
    ports:
      - "8080:9090"
    volumes:
      - "/root/docker_vol/web/dist:/usr/share/nginx/html:ro"
      - "/root/docker_vol/web/conf/nginx.conf:/etc/nginx/nginx.conf:ro"
  • 使用docker-compose up命令 启动容器编排,需要注意的是,容器启动成功后,默认会占用当前的终端用来输出日志信息。我们可以重新打开一个终端,使用docker ps命令查看,发现docker中多了一个容器名字叫做 **my_nginx_1.这就是compose替我们启动的容器。
  • 在上面的例子中,my_nginx是一个服务的名字,也可以理解为是生成容器名字的其中一部分,image属性代表要使用什么镜像,ports 代表需要映射的端口,前边是宿主机的端口,而后面是容器内的端口。volumns代表要进行的文件挂载。
  • 此外,使用docker network ls命令可以发现,compose启动后,自动给我们创建了一个网络,通过 docker inspect 命令发现使用当前compose文件启动的容器默认都加入到了,新创建的网络中。

例子2:在tomcat-compose文件中构建一个服务,在本地docker中不存在有对应的镜像

version: '3.9'

services:
  my_tomcat:
    image: "tomcat"
  • 如果在compose中包含本地docker中不存在的镜像,则在运行compose的过程中会自动下载对应的镜像。理论上在一台安装有docker以及docker
  • compose的宿主机上,在保证网络畅通的前提下,我们只需要依靠docker-compose文件就可以直接安装对应的系统。
  • 此外,在当前的例子中,我们将compose文件认为的修改为
    tomcat-compose.yml,如果不使用默认的文件名,则需要在执行docker-compose up命令的时候加上 -f 参数,手工指定对应的yml文件。

例子3:一次启动多个容器

version: '3.9'

services:
  my_tomcat:
    image: "tomcat"
  my_nginx:
    image: "nginx"
    ports:
      - "8080:9090"
    volumes:
      - "/root/docker_vol/web/dist:/usr/share/nginx/html:ro"
      - "/root/docker_vol/web/conf/nginx.conf:/etc/nginx/nginx.conf:ro"

docker-compose命令

​ 在之前的例子中,我们使用了docker-compose up命令来启动一个容器编排,接下来,我们详细了解一下,在docker-compose中常用的命令以及参数使用

  1. docker-compose命令
    常用参数:
    -f 默认docker-compose会在当前文件夹下询招Dockercompose.yml文件,如果需要自定义文件名,可以使用-f 文件名 形式来指定
    -p 指定项目名称 指定项目后,通过compoose创建的所有容器都会自动添加项目名称前缀
    -v 查看当前docker-compose的版本信息
  2. docker-compose 环境变量
    docker compose 默认的环境变量为.env,在其中我们可以使用对应的键值对模式给compose传递值 --env-file 参数可以动态制动compose需要使用的配置文件位置
  3. docker-compose up 启动一个容器编排
    常用参数: `
参数名称说明
-d后台运行
–force-recreate强制更新已经存在的容器
–remove-orphans删除在compose文件中没有定义的容器,通常使用在修改了compose文件的场景下使用服务名 单独启动compose中的某一个服务,如果服务存在依赖,则被依赖的服务也会被启动
docker-compose down删除对应的容器,网络服务
docker-compose stop停止compose对应的所有服务
docker-compose start启动所有的服务容器
docker-compose ps查看与当前compse相关的服务容器
-q只列出id值,其他值不显示
docker-compose logs读取日志信息
docker-compose pull拉取服务对应的镜像
docker-compose build构建compose中的所有镜像、
docker-compose images查看所有的镜像信息
docker-compose config查看配置文件信息
docker-compose restart重启服务
docker-compose exec 服务名进行指定服务的容器
docker-compose rm删除所有已经停止的服务容器
以上命令涉及到某个服务的时候均可以通过:命令:服务名对相应的服务进行操作看左面

docker compose 网络管理

  1. ​默认场景下,使用docker compose编排服务,会自动创建对应的网络。可以使用docker network ls
    以及docker inspect 网络id 进行相关的查询。
  2. 可以在compose文件中,使用networks
    定义一个网络,并在服务中使用networks属性加入一个自定义网络。这时候有三种结果,如果所有的服务都加入到了自定义网络,则docker,会创建自定义网络,并将所有的服务容器添加到对应的网络中,如果没有任何服务声明加入自定义网络,则docker会创建默认网络,然后将容器添加到默认网络,而不会创建自定义网络,如果有的服务声明添加到自定义网络,而有的服务没有声明,则docker会创建两个网络,一个是自定义网络,而另一个是默认网络,并将对应的容器添加到对应的网络中。
  3. 使用固定ip策略
version: '3.3'
services:
  cslcp_web:
    image: "cslcp_web_image:v01"
    ports:
      - "19090:8080"
    build:
      context: "../web/"
      dockerfile: "Dockerfile"
    networks:
      - "cslcp_net"
  cslcp_mysql:
    image: "mysql"
    networks:
      cslcp_net:
        ipv4_address: 192.168.13.100
    ports:
      - "13306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: 'root'
  cslcp_centos:
    container_name: 'test_centos'
    image: "centos"
    tty: true
    networks:
      cslcp_net:
        ipv4_address: 192.168.13.11
networks:
  cslcp_net:
    ipam:
      config:
        - subnet: "192.168.13.0/24"
          gateway: "192.168.13.1"
  1. 使用服务策略
    当compose启动成功后可以直接使用ping 访问服务名
  2. 使用网络别名策略
networks:
  cslcp_net:
    ipam:
      config:
      - gateway: 192.168.13.1
        subnet: 192.168.13.0/24
services:
  cslcp_centos:
    container_name: test_centos
    depends_on:
      cslcp_web:
        condition: service_started
    image: centos
    links:
    - cslcp_web:cw
    networks:
      cslcp_net:
        ipv4_address: 192.168.13.11
    tty: true
  cslcp_mysql:
    environment:
      MYSQL_ROOT_PASSWORD: root
    image: mysql
    networks:
      cslcp_net:
        ipv4_address: 192.168.13.100
    ports:
    - published: 13306
      target: 33064
  cslcp_web:
    build:
      context: /root/docker/dockercompose/cslcp/web
      dockerfile: Dockerfile
    image: cslcp_web_image:v01
    networks:
      cslcp_net: null
    ports:
    - published: 19090
      target: 8080
version: '3.3'
  1. 使用container 策略
version: '3.3'
services:
  cslcp_web:
    image: "cslcp_web_image:v01"
    build:
      context: "../web/"
      dockerfile: "Dockerfile"
    depends_on:
      - "cslcp_centos"
    network_mode: "service:cslcp_centos"
  cslcp_mysql:
    image: "mysql"
    environment:
      MYSQL_ROOT_PASSWORD: 'root'
    depends_on:
      - "cslcp_centos"
    network_mode: "service:cslcp_centos"
  cslcp_centos:
    container_name: 'test_centos'
    image: "centos"
    tty: true
    ports:
      - "17070:8080"
      - "13306:3306"
    networks:
      cslcp_net:
        ipv4_address: 192.168.13.11
networks:
  cslcp_net:
    ipam:
      config:
        - subnet: "192.168.13.0/24"
          gateway: "192.168.13.1"

制作整理不易,以上内容均为原创(参考了部分官方文档和老师整理的案例)。如要引用请附上本文链接,如有疑问可以在评论区畅所欲言,作者看到会第一时间回复,欢迎交流!

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

么贺贵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值