tlinux 3.1 配置 docker / docker-compose 一键部署 redis,rabbitmq 容器

tlinux 3.1 配置 docker / docker-compose 一键部署 redis,rabbitmq

TencentOS Server(又名 Tencent Linux,简称 TS 或 tlinux)是腾讯针对云的场景研发的 Linux 操作系统,提供特定的功能及性能优化,为云> 服务器实例中的应用程序提供高性能及更加安全可靠的运行环境。TencentOS Server 提供免费使用,在 CentOS(及其他发行版)上开发的应用程序可> 直接在 TencentOS Server 上运行,用户还可持续获得腾讯云团队的更新维护和技术支持。

TencentOS Server 环境说明(用户态环境)

  • TencentOS Server 2用户态软件包保持与最新版 CentOS 7兼容,即 CentOS 7版本的软件包可以直接在 TencentOS Server 2.4 中使用。
  • TencentOS Server 3用户态软件包保持与最新版 RHEL 8兼容,即 RHEL 8版本的软件包可以直接在 TencentOS Server 3.1 中使用。

相关软件资源包

  1. Docker Engine - Community v20.10.12
  2. Docker Compose version v2.2.3
  3. Redis v6.2.6
  4. RabbitMQ-v3.9.13-management

$ | 1 安装 Dcoker

和 Docker 标准的发行版相比,Tencent OS Linux 针对 Docker 进行了定向的优化。
如果你想要享受对应的优化,则需要定向安装腾讯云提供的 Docker 软件,具体安装方法也很简单,执行如下两行代码即可。

1.1 安装腾讯云提供的 Docker 软件

yum -y install tencentos-release-docker-ce
yum -y install docker-ce

1.2 开启 docker 信息隔离

sysctl -w kernel.stats_isolated=1

TencentOS-kernel 容器内CPU、内存、进程、磁盘等信息隔离

Tencent Linux 基于内核实现了类lxcfs的有关cpu、内存统计、进程、磁盘统计等信息的隔离 在docker中,通过如下接口,看到的不再是docker所在的物理机系统的信息,而是docker自己的统计信息:

  • /proc/cpuinfo
  • /proc/meminfo
  • /proc/stat
  • /proc/uptimes
  • /proc/loadavg
  • /proc/diskstat

使用方式

  • 系统级开关
sysctl -w kernel.stats_isolated=0|1

该开关可读可写,且只有系统级开关开启的情况下,才能启用信息隔离。默认是关闭,

  • 容器级别开关
  1. 信息隔离控制开关(在docker里面进行配置)
sysctl -w kernel.container_stats_isolated=0|1

该开关可写不可读,且在系统级开关和它同时开启的情况下才有效,默认开启 系统可以在容器对应cgroup的CPU、cpuacct、cpuset、blkio等子系统的xxx.stats_isolated(xxx子系统名)来查看docker是否开启了docker级别开关, 该开关系统只能查看,不能设置

  1. cpuinfo显示控制开关
sysctl -w kernel.cpuquota_aware=0|1

默认情况下 /proc/cpuinfo 显示的 cpu 个数与 cpuset 子系统的 cpus 是相同的。 而 lxcfs 则使用 cpu 子系统的 quota 来控制 cpu 的个数,为了和 lxcfs 一致,提供了该开关 默认开启,即:/proc/cpuinfo 显示的 cpu 个数基于 cpu 子系统的 quota 来控制。

1.3 配置腾讯云 Docker 镜像

Docker 官方镜像在海外,在国内下载的速度体验一直不佳,在这种情况下,可以考虑配置腾讯云官方的内网镜像,提升镜像下载速度。

cat << EOF > /etc/docker/daemon.json
{
    "registry-mirrors": [
        "https://mirror.ccs.tencentyun.com"
    ]
}
EOF

Docker 默认安装路径【/var/lib/docker】,该镜像源配置文件【/etc/docker/daemon.json】,如果没有配置过镜像该文件默认是不存的,需自行手动添加。

其他国内镜像源:

  • Docker中国区官方镜像:https://registry.docker-cn.com
  • 中国科技大学 => https://docker.mirrors.ustc.edu.cn
  • 阿里云 => https://cr.console.aliyun.com
  • 腾讯云 => https://mirror.ccs.tencentyun.com
  • 网易 => http://hub-mirror.c.163.com

1.4 重启 docker 服务

修改保存后,重启Docker以使配置生效。

# 重载守护进程
sudo systemctl daemon-reload 
# 重启 docker 服务
sudo systemctl restart docker
# 设置 docker 开机启动
sudo systemctl enable docker

查看镜像源配置是否生效:

docker info | grep https

输出信息:

Registry: https://index.docker.io/v1/
  https://mirror.ccs.tencentyun.com/
  https://registry.docker-cn.com/
  https://docker.mirrors.ustc.edu.cn/
  https://cr.console.aliyun.com/

1.5 查看 docker 版本信息

docker version

输出信息:

Client: Docker Engine - Community
 Version:           20.10.12
 API version:       1.41
 Go version:        go1.16.12
 Git commit:        e91ed57
 Built:             Mon Dec 13 11:45:22 2021
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          20.10.12
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.16.12
  Git commit:       459d0df
  Built:            Mon Dec 13 11:43:44 2021
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.4.12
  GitCommit:        7b11cfaabd73bb80907dd23182b9347b4245eb5d
 runc:
  Version:          1.0.2
  GitCommit:        v1.0.2-0-g52b36a2
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

到这里 docker 基本就安装完成了,由于此处安装的 docker 没有集成 docker compose 工具,需自己手动安装;

$ | 2 安装 Docker Compose 工具

2.1 Compose 简介

Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。它是一个定义和运行多容器的 docker 应用工具。使用compose 你能通过 YMAL 文件配置你自己的服务,然后通过一个命令创建和运行所有的服务。

Docker-Compose 将所管理的容器分为三层:

  • 工程/项目(project)
  • 服务(service)
  • 容器(container)

Docker-Compose 运行目录下的所有文件(docker-compose.yaml,extends文件或环境变量文件等)组成一个工程,若无特殊指定工程名即为当前目录名。

一个工程/项目当中可包含多个服务,每个服务中定义了容器运行的 镜像,参数,依赖 。一个服务当中可包括多个容器实例。

  • 工程/项目(project):由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yaml 中定义。即是 Compose 的一个配置文件可以解析为一个项目,Compose 通过分析指定配置文件,得出配置文件所需完成的所有容器管理与部署操作。
  • 服务(service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。每个服务都有自己的名 字、使用的镜像、挂载的数据卷、所属的网络、依赖哪些其他服务等等,即以容器为粒度,用户需要 Compose 所完成的任务。
  • 容器(container):通过一种虚拟化技术来隔离运行在主机上的不同进程,从而达到进程之间、进程和宿主操作系统相互隔离、互不影响的技术。 这种相互孤立进程就叫容器,它有自己的一套文件系统资源和从属进程。

Docker-Compose 的工程配置文件默认为 docker-compose.yaml,可通过环境变量 COMPOSE_FILE 或 -f 参数自定义配置文件,其定义了多个有依赖关系的服务及每个服务运行的容器。

使用一个 Dockerfile 模板文件,可以让用户很方便的定义一个单独的应用容器。在工作中,经常会碰到需要多个容器 相互配合来完成某项任务的情况。

例如:要部署一个Web项目,除了Web服务容器,往往还需要再加上后端的数据 库服务容器,甚至还包括负载均衡容器等。

2.2 Compose 安装

2.2.1 查看内核/操作系统/CPU信息

uname -a

输出信息:

Linux TENCENT64.site 5.4.119-19-0009.1 #1 SMP Sun Jan 23 23:20:30 CST 2022 x86_64 x86_64 x86_64 GNU/Linux

2.2.2 下载对应的 compose 服务文件

# 使用 curl 下载二进制文件
sudo curl -L "https://github.com/docker/compose/releases/download/1.28.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# 使用 curl 下载 v2.2.3 版本,下载的文件会输出到 /usr/local/bin/docker-compose
sudo curl -L "https://github.com/docker/compose/releases/download/v2.2.3/docker-compose-linux-x86_64" -o /usr/local/bin/docker-compose

卸载 compose 服务文件

# curl 命令安装的卸载
sudo rm /usr/local/bin/docker-compose

# pip 命令安装的卸载
pip uninstall docker-compose

查看更多 docker compose 发行版 => https://github.com/docker/compose/releases

2.2.3 给文件路径授权

sudo chmod +x /usr/local/bin/docker-compose

注意:如果命令docker-compose在安装后失败,请检查您的路径。您也可以创建指向/usr/bin或路径中任何其他目录的符号链接。

例如:

sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

2.2.4 查看 docker compose 版本

docker-compose version

输出信息:

Docker Compose version v2.2.3

查看更多

docker-compose --help

输出信息:

Usage:  docker compose [OPTIONS] COMMAND

Docker Compose

Options:
      --ansi string                Control when to print ANSI control characters ("never"|"always"|"auto") (default "auto")
      --compatibility              Run compose in backward compatibility mode
      --env-file string            Specify an alternate environment file.
  -f, --file stringArray           Compose configuration files
      --profile stringArray        Specify a profile to enable
      --project-directory string   Specify an alternate working directory
                                   (default: the path of the Compose file)
  -p, --project-name string        Project name

Commands:
  build       Build or rebuild services
  convert     Converts the compose file to platform's canonical format
  cp          Copy files/folders between a service container and the local filesystem
  create      Creates containers for a service.
  down        Stop and remove containers, networks
  events      Receive real time events from containers.
  exec        Execute a command in a running container.
  images      List images used by the created containers
  kill        Force stop service containers.
  logs        View output from containers
  ls          List running compose projects
  pause       Pause services
  port        Print the public port for a port binding.
  ps          List containers
  pull        Pull service images
  push        Push service images
  restart     Restart containers
  rm          Removes stopped service containers
  run         Run a one-off command on a service.
  start       Start services
  stop        Stop services
  top         Display the running processes
  unpause     Unpause services
  up          Create and start containers
  version     Show the Docker Compose version information

Run 'docker compose COMMAND --help' for more information on a command.

到这里 docker compose 就安装完成了,接下来我们使用 compose 工具部署多容器;
查看 compose 更多信息 => https://docs.docker.com/compose/compose-file/

$ | 3 Docker Compose 一键部署 Redis/ RabbitMQ 容器

上面两个环节我们已经安装好 Docker 和 Compose 工具,接下来我们编写一个 compose 的 yaml 配置文件,配置文件信息内如如下:

3.1 编写 docker-compose-redis-rabbitmq.yaml 配置文件

# 创建 docker-compose-yaml 文件夹
sudo mikdir docker-compose-yaml

# 进入 docker-compose-yaml 文件夹
cd docker-compose-yaml

# 创建 yaml 文件
sudo touch docker-compose-redis-rabbitmq.yaml

# 编辑 yaml 文件
sudo vim docker-compose-redis-rabbitmq.yaml

docker-compose-redis-rabbitmq.yaml 配置文件内容如下:

version: '3.9'
services:
  redis:
    image: redis:6.2.6
    container_name: redis-6.2.6
    hostname: swskj-redis-6.2.6
    restart: always
    deploy:
      replicas: 1
      restart_policy: 
        condition: on-failure
        delay: 5s
        max_attempts: 3
        window: 30s
      resources:
        limits:
          cpus: '0.25'
          memory: 500M
        reservations:
          cpus: '0.10'
          memory: 10M
    ports:
      - "6379:6379" # redis的服务端口
    networks:
      - net_redis
    volumes:
      - /etc/localtime:/etc/localtime:ro # 设置容器时区与宿主机保持一致
      - /chait-docker/compose-data/redis/redis.conf:/etc/redis/redis.conf
      - /chait-docker/compose-data/redis/data:/data
    command: redis-server /etc/redis/redis.conf --appendonly yes --requirepass "redis.666" # 启动redis命令,开启aof持久化,设置密码访问
    privileged: true # 使容器内的root拥有真正root权限

  rabbitmq:
    image: rabbitmq:3.9.13-management
    container_name: rabbitmq-3.9.13-management
    hostname: swskj-rabbitmq-3.9.13
    restart: always
    deploy:
      replicas: 1 # 容器副本数量
      restart_policy: # 重启策略
        condition: on-failure # 开启故障
        delay: 5s # 尝试重启等待时间
        max_attempts: 3 # 最多尝试重启次数
        window: 30s # 重启成功之前等待的时间
      resources: # 资源限制
        limits:
          cpus: '0.25'
          memory: 500M
        reservations:
          cpus: '0.10'
          memory: 100M
    ports: # 端口映射
      - "15672:15672" # rabbitmq的web管理界面端口
      - "5672:5672"   # rabbitmq的服务端口
    networks: # 网络
      - net_rabbitmq
    volumes: # 数据卷
      - /chait-docker/compose-data/rabbitmq/data:/var/lib/rabbitmq
    environment: # 环境变量
      - RABBITMQ_DEFAULT_USER=rabbitmq # 用户名
      - RABBITMQ_DEFAULT_PASS=rabbitmq.666 # 用户密码

networks:
  net_redis:
    driver: bridge
  net_rabbitmq:
    driver: bridge

保存文件并退出

:wq!

关于 compose 3.x 版本的编写规范,请查看 => https://docs.docker.com/compose/compose-file/compose-file-v3/

3.2 命令执行 yaml 配置文件,运行 redis 和 rabbitmq 容器

sudo docker-compose -p compose-svc-redis-rabbitmq -f docker-compose-redis-rabbitmq.yaml up -d

拉取相关镜像
compose pull images
容器创建成功
compose 创建容器

3.3 查看 compose 列表

docker-compose ls

输出信息:

NAME                         STATUS
compose-svc-redis-rabbitmq   running(2)

3.4 查看 compose 创建的容器

docker container ls

输出信息:

CONTAINER ID   IMAGE                        COMMAND                  CREATED       STATUS             PORTS                                                                                                                                                 NAMES
45af6fbaa422   rabbitmq:3.9.13-management   "docker-entrypoint.s…"   7 hours ago   Up About an hour   4369/tcp, 5671/tcp, 0.0.0.0:5672->5672/tcp, :::5672->5672/tcp, 15671/tcp, 15691-15692/tcp, 25672/tcp, 0.0.0.0:15672->15672/tcp, :::15672->15672/tcp   rabbitmq-3.9.13-management
e633a68d1708   redis:6.2.6                  "docker-entrypoint.s…"   7 hours ago   Up About an hour   0.0.0.0:6379->6379/tcp, :::6379->6379/tcp 

总结

  1. 假定 tlinux 3.1 系统环境已经部署,并配置网络(nmcli)可访问外网;
  2. 规划好相关配置软件及其版本环境;
  3. 熟悉 docker, compose 相关命令,用法以及 yaml 配置文件的编写;
  4. 熟悉相关部署的 docker 容器组件;

以上就是 tlinux 3.1 安装 docker, docker-compose 工具,并部署 redis 和 rabbitmq 容器的所有过程,有需要的小伙伴赶快动手实践哟 (^U^)ノ~YO


版权声明:本文为ChaITSimpleLove原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。