• docker-compose


    这章以实例为主,学习他的语法,以及docker-compose的使用思路。下面简单的例子可以通过docker-compose官网获得。该🌰涉及的语法不是全部,但是理解他的设计架构后后面的一些参数也能自行学习了。

    Docker-compose文件讲解

    • Docker-compos默认使用docker-compose.yml为文件名,或者用-f参数指定定义文件。

    • Docker-compose使用YAML文件来定义多服务应用,YAML是json的子集,所以也可以用json编写。

    • 下面的例子包含两个服务:web-fe 和 redies 。此例子用来运行一个对访问者计数并保存到redies的简单web服务,🌰如下。

    version: '3.5'
    services:
      web-fe:
        build: .
        command: python app.py
        ports:
          - target: 5000
            published: 5000
        networks:
          - counter-net
        volumes:
          - type: volume
            source: counter-vol
            target: /code
      redis:
        image: "redis:alpine"
        networks: 
          counter-net:
    networks:
      counter-net:
    volumes:
      counter-vol:
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    结构分析

    上述例子包含4个一级key:

    • version
      • 总是定义在第一行,用于指定compose文件格式(只要是API)的版本,建议使用最新版。
      • version不是定义Docker-compose或者docker引擎版本号。若有兼容性问题,搜索“Compose file”。
    • services:用于定义不同的应用服务,Docker Compose会将每个服务部署在各自容器中。 例子中有两个服务,也都将部署在各自的容器中
    • networks: 用于指引Docker创建新的网络,默认 Docker-compose会创建bridge网络,该网络是一种单主机网络,只能实现同一个主机上容器连接。(计算机网络基础是真的薄弱,后面会更新计算机网络的博客,暂时用下面张图理解下桥接)
      在这里插入图片描述想要修改网络模式,使用driver指定不同的网络类型。以下代码创建Overlay网络,允许独立的容器,连接到该网络上。
    networks:
      over-net:
      driver: overlay
      attachable: true
    
    • 1
    • 2
    • 3
    • 4
    • volumes
      • 用于创建数据卷

    接着分析一级key下面的描述

    • version
      • 服务名:
        • build: . 指定当前目录下的Dockerfile中定义的指令来构建新镜像
        • command:指定docker容器中执行的命令。
        • ports:指定-target的端口映射到主机的published端口
        • networks: 使得Docker将服务连接到指定网络。counter-net是自己取的网络的名字。我们可以看到web-fe和redies指定的网络名字是一样的,所以他们可以进行网络互通。如果该网络不存在,则需要在一级key中的networks定义。如果网络类型为Overlay,则还需要定义attachable,如此独立的两个容器才能互联。
        • volumes: 可以将vounter-vol卷(source:)挂载到容器内的/code(target:)中。vounter-vol卷如果不存在需要在文件下方一级key,volumes中指定。如何看数据卷存放位置,执行docker volume inspect [卷标名称]就可以看到。

    docker-compose命令

    启动docker-compose

    docker-compose定义完毕后,接下来就看如何利用命令行进行使用吧。

    docker-compose up
    
    • 1
    • 该命令用于启动,执行定义文件中的内容,执行后会构建所需要的镜像,创建网络和卷,启动容器。
    • 该命令会默认查找docker-compose.yml文件,让然也可以指定yaml文件进行执行:docker-compose -f xxxxxx.yml up.
    • 在命令后添加-d 可在后台启动应用。

    执行完毕后查看的镜像:
    在这里插入图片描述

    • 其中counter-app_web-fe、redis是我们定义的服务产生的镜像,python是在构建web-fe过程中使用的基础镜像。
    • 这里提醒下,counter-app是项目名,web-fe是服务名,部署后构建的镜像名字会遵循 项目名_服务名这种规范。redis不是我们构建的,所以不用遵循。

    查看启动的容器:在这里插入图片描述
    查看网络:
    在这里插入图片描述

    查看数据卷:
    在这里插入图片描述

    至此,应用部署完毕。

    使用命令行管理Docker Compose起的应用的生命周期

    关闭删除应用:docker-compose down
    在这里插入图片描述

    • 关闭应用做了一下几个动作:1、关闭启动的容器;2、定义的网络被删除;
    • 值得注意的是,数据卷没有被删除,卷的生命周期与容器是完全节后的,卷内的内容是原容器中的数据,当然也不会被删除。

    显示服务内运行的进程:docker-compose top
    在这里插入图片描述
    停止应用docker-compose stop
    在这里插入图片描述

    • 该命令只会停止任务,不会删除资源
      删除已停止的Compose应用:docker-compose rm 应用名

    重启应用:docker-compose restart

    ————————————————————————————————————————
    end:
    晚安! my lovers,有你们狠幸福。

  • 相关阅读:
    结合 Vuex 和 Pinia 做一个适合自己的状态管理 nf-state
    新版pycharm(2023.2.2)修改字体大小
    Envoy代理GRPC服务支持通过restful进行访问
    LeetCode70-爬楼梯
    windows的命令行的一些操作
    【java基础系列】13- java的面向对象
    工业物联网面临的挑战
    A RANSOMWARE, HOW DO I RECOVER?
    SMOKE 单目相机 3D目标检测【训练模型】
    CVE-2017-12615 Tomcat远程命令执行漏洞
  • 原文地址:https://blog.csdn.net/qq_36737214/article/details/126653543