暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

docker 入门(三)

writeline 2021-04-19
369

简单回顾下上一篇docker入门,里面简要的介绍了docker的一些常用的指令,并运用这些指令来构建一个.net core,本篇将会继续来学习下如何使用docker-compose来构建一组服务


前言


再次跟着我的脚步来一起学习吧。本篇我们需要学习:

  • docker-compose 简介

  • docker-compose.yml 文件

  • docker-compose 常用命令


01

docker-compose 简介


docker-compose是用来定义和运行多容器的应用工具。通过使用yml文件来配置应用程序所需要的所有服务,然后使用对应的命令来创建和运行这些服务。


02


docker-compose.yml 文件


先来看一段yml文件:

    version: '3.4'


    services: 


    promotioncenter.adminapi.core:
        image: ${DOCKER_REGISTRY-harbor.test.com}/promotion/adminapi:${IMAGETAG:-latest}
    env_file:
    - .env
    container_name: promotioncenter.adminapi.core
    ports:
    - "8032:8032"
    build:
    context: .
    dockerfile: PromotionCenter.Admin.Api.Core/Dockerfile


    promotioncenter.frontapi.core:
    image: ${DOCKER_REGISTRY-harbor.test.com}/promotion/frontapi:${IMAGETAG:-latest}
    env_file:
    - .env
    container_name: promotioncenter.frontapi.core
    ports:
    - "8031:8031"
    depends_on:
    - promotioncenter.adminapi.core
    build:
    context: .
    dockerfile: PromotionCenter.Front.Api.Core/Dockerfile

    接下来让我们一起来看看这个yml文件到底是怎么一回事?多个服务在services节点下体现出来,同时有严格的缩进和空格要求,需要保持对齐。每个services节点又有如下的一些参数可供设置,一起来看下:

    services定义一组服务

    image

    定义镜像名及tag,${IMAGETAG:-latest}表示未传递变量IMAGETAG则使用latest

    env_file

    定义一组环境变量文件,比如可以将.net core 运行时的ASPNETCORE_ENVIRONMENT=develop放置其中

    container_name

    容器名称

    ports

    端口映射标签,格式为HOST:CONTAINER,
    可支持下面几种方式
    - “3000” --宿主机随机映射一个端口
    - “8000:8000”
    - "127.0.0.1:8001:8001"

    depends_on

    定义容器启动依赖关系。例如我们上面的示例中,设置为promotioncenter.frontapi.core的启动必须依赖promotioncenter.adminapi.core

    build

    镜像构建指令

    context

    构建的上下文路径
    dockerfile 
    指定镜像的dockerfile路径
    上面列举了部分配置项,实际上compose的很多配置和docker都是一一对应的,这里就又一一展开了,有兴趣可以接着去了解。


    03


    docker-compose 常用指令


    • 镜像构建

        docker-compose build [OPTIONS] [SERVICE...]

        以下是OPTIONS参数:

        --force-rm:删除构建过程中的临时容器
        --no-cache:构建过程中不使用缓存
        --pull:始终通过pull获取最新镜像
      • 镜像运行

          docker-compose run [OPTIONS] service [COMMAND] [ARGS...]

                以下是OPTIONS参数:

        -d:容器后台运行
        --name:为容器指定一个名称
        --rm:容器停止后自动删除容器,-d模式忽略
        -e KEY=VAL:设置环境变量
        -p=[]:映射容器端口到本机
          docker-compose up [OPTIONS] [SERVICE...]

          以下是OPTIONS参数:

          -d
          在后台运行服务容器
          --no-deps:不启动服务所链接的容器
          --force-recreate:强制重新创建容器,不能与 --no-recreate 同时使用
          --no-recreate:如果容器已经存在了,则不重新创建,不能与 --force-recreate 同时使用
          --no-build:不自动构建缺失的服务镜像
          -t:停止容器时候的超时(默认为 10 秒)

          镜像运行的命令有run和up,两者啥区别我也不知道,不过感觉更推荐up,因为实际操作过程中run命令并不会完全运用docker-compose.yml文件,这是我测试下来发现的,而up就没有这个问题。

          • 镜像推送

            这个指令简直不要太好用,会根据docker-compose.yml文件定义的services节点进行推送,而经过build后的镜像自动打上tag,推送至仓库中也只需要如下命令即可:

              docker-compose push


            写在最后


            本文大致介绍了下docker-compose的一些相关知识,从中我们可以发现通过它我们可以很轻松的build一组服务,不管是运行还是推送,都及其简单,在结合一些辅助脚本,简直不要太爽。接下来我们将会学习下如何对docker做资源限制。




            如有收获,点个在看,诚挚感

            文章转载自writeline,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

            评论