前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >除了k8s,docker-compose编排容器也是个不错的选择

除了k8s,docker-compose编排容器也是个不错的选择

原创
作者头像
叫我阿柒啊
发布2024-10-24 17:00:46
530
发布2024-10-24 17:00:46

前言

随着微服务架构的现代兴起,容器化技术已经成为应用开发的重要组成部分。Docker作为最流行的容器化平台之一,使得应用的部署和管理变得更加灵活。

我平时使用docker容器通常都是部署单个小的应用,所以使用docker的命令就可以满足启停、运维的需求。但是对于一个应用中多个容器这种情况来说,就需要一些工具来将这些容器组织起来。

k8s是我们听过最常用的容器管理工具,但是对于个人开发者来说,k8s有点过于重量级了,其中包含了许多复杂的组件,从学习和部署都是需要一定的时间和资源成本。所以简单好用的docker-compose就成了一个比较不错的选择。

docker-compose

docker-compose是一个工具,用于定义和运行多个 Docker 容器。用户通过一个名为docker-compose.yml的YAML文件,来配置应用的各个服务,包括服务的镜像、环境变量、端口映射、卷挂载等信息。使用docker-compose,开发人员可以一键启动整个应用的所有服务,减轻了手动管理每个容器的复杂性。

我之前在服务器上,基于docker搭建了一个HDP版本的Hadoop集群,一共5个节点,包含2个NameNode和3个DataNode。然后我就是用docker-compose将五个节点启动组织成一个大数据集群应用。在此应用中,DN要在NN前启动。

docker-compose使用yum即可安装,真正的难点是如何编写docker-compose的yaml配置文件,其实这个文件和Dockerfile大同小异,掌握了语法就能轻松的编写,不过要注意的是:yaml文件要按照配置层级进行缩进。

yaml配置

还是从docker-compose.yaml的一个样例,来演示如何编写配置:

代码语言:yaml
复制
version: '3'  # 指定 Compose 文件的版本
services:     # 定义服务
  service_name:  # 服务名称
    image: image_name:tag  # 使用的镜像
    build:  # 可选,构建服务所需的 Dockerfile 路径
      context: ./path/to/dockerfile  # 构建上下文
      dockerfile: Dockerfile  # Dockerfile 名称
    ports:  # 端口映射
      - "host_port:container_port"
    environment:  # 环境变量
      - VARIABLE_NAME=value
      - ANOTHER_VARIABLE=value
    volumes:  # 卷挂载
      - host_path:container_path  # 共享文件夹
    networks:  # 连接的网络
      - network_name
    depends_on:  # 服务依赖关系
      - other_service_name
    restart: always  # 容器重启策略

配置参数解释如下:

  1. version: 指定 Docker Compose 文件的版本,常用的版本有 '2' 和 '3'。
  2. services: 定义应用的所有服务,每个服务都包含一系列的配置。
  3. service_name: 每个服务的唯一名称,可以自定义。
  4. image: 指定要使用的 Docker 镜像,可以包含标签(如 latest)。
  5. build: 指定构建服务的 Dockerfile 路径,包含 context 和可选的 dockerfile。
  6. ports: 指定容器和主机之间的端口映射,格式为 host_port:container_port。
  7. environment: 设置环境变量,可以使用键值对的格式。
  8. volumes: 配置数据卷,用于持久化数据,格式为 host_path:container_path。
  9. networks: 指定服务连接的网络,可以自定义网络名称。
  10. depends_on: 指定服务的启动顺序,确保依赖服务在当前服务之前启动。
  11. restart: 定义容器的重启策略,如 no、always、on-failure。

compose镜像操作

上面就是纯纯理论知识,在这我就使用docker-compose来搭建一个1 Nginx + 2 Tomcat的容器应用。

首先创建一个项目目录,在目录下新建一个docker-compose.yaml文件,其中nginx使用80端口,tomcat使用8080端口。

代码语言:yaml
复制
version: '3'
services:
  nginx:
    build:
      context: /root/app/dockerfile/nginx 
      dockerfile: Dockerfile
    ports:
      - "800:80"
    depends_on:
      - tomcat1
      - tomcat2
    restart: always
    
  tomcat1:
    build:
      context: /root/app/dockerfile/tomcat 
      dockerfile: Dockerfile
    ports:
      - "8081:8080"
    restart: always
      
  tomcat2:
    build:
      context: /root/app/dockerfile/tomcat 
      dockerfile: Dockerfile
    ports:
      - "8081:8080"
    restart: always

可以通过build指定Dockerfile自己构建镜像,nginx和tomcat使用的之前的Dockerfile,如下图:

也可以直接使用image参数指定之前构造的对象,当编写完yaml配置之后,我们就可以开始使用compose来操作yaml中定义的一组容器。

1. 检查配置

之前说了yaml文件有层级的规范要求,那么如何知道我们的yaml是否符合规范,我们可以执行配置的检查命令:

代码语言:bash
复制
docker-compose config -q

执行之后提示配置文件有问题。

去配置文件查看ports的缩进有问题,修改之后再次执行,当没有任何输出时表示配置没问题。

2. 根据yml构建容器

然后就开始构建容器,这个原理也是使用yaml中指定的Dockerfile来完成的构建。

代码语言:bash
复制
docker-compose build

构建过程如图:

构造过后,可以看到多了compose开头的image。

3. 后台启动所有容器

有了image,就可以基于镜像启动容器了。

代码语言:bash
复制
docker-compose up -d

-d表示后台启动,可以通过docker ps看到启动的容器信息:

上面的命令只需要执行一遍,docker-compose就通过yaml文件与一组容器关联了起来。接下里就是通过compose对这组容器进行操作了。

compose容器操作

我们最常用的就是对容器进行启停。

启停容器

代码语言:bash
复制
docker-compose restart
docker-compose start
docker-compose stop

如图,和我们使用docker启动单个命令一样,docker-compose通过yaml文件启动一组容器。

停止删除所有容器

然后就是删除所有容器,不过删除之后只需要后台启动容器就好了,构造镜像的步骤就不需要了。

代码语言:bash
复制
docker-compose down

其他操作

最后就是一些其他的命令,可以对比docker的命令。

代码语言:bash
复制
# 进入容器
docker-compose exec 容器id
# 查看运行的所有容器
docker-compose ps 
# 查看容器进程
docker-compose top
# 查看容器输出日志
docker-compose logs 容器id

结语

从上面不难看出,docker-compose对于容器的操作和docker大同小异,只不过一个操作一组容器的命令,一个是操作单个容器的命令,这样让熟悉docker的开发者能够很快的上手docker-compose。

同时,docker-compose更适合开发和测试小型项目,而K8s则是为生产环境设计的容器编排平台,适合大规模和复杂的应用场景。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • docker-compose
    • yaml配置
    • compose镜像操作
      • 1. 检查配置
        • 2. 根据yml构建容器
          • 3. 后台启动所有容器
          • compose容器操作
            • 启停容器
              • 停止删除所有容器
                • 其他操作
                • 结语
                相关产品与服务
                容器服务
                腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档