TencentOS Server 配置 docker / docker-compose 一键部署 redis,rabbitmq 容器

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: TencentOS Server (tlinux 3.1)配置 docker,compose 工具,并一键部署多容器(redis,rabbitmq)。TencentOS Server 是腾讯公司自主研发的定制化服务器操作系统。该系统集成了众多服务 器系列的优点,加入自主研发的软件,便于用户操作使用,提供全方位(内核及用户态)的 操作系统支持...

tlinux 简介

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

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

  • TencentOS Server2 用户态软件包保持与最新版 CentOS7 兼容,即 CentOS7 版本的软件包可以直接在 TencentOS Server2.4 中使用。
  • TencentOS Server3 用户态软件包保持与最新版 RHEL8 兼容,即 RHEL8 版本的软件包可以直接在 TencentOS Server3.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】,如果没有配置过镜像该文件默认是不存的,需自行手动添加。

其他国内镜像源:

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 容器

上面两个环节我们已经安装好 DockerCompose 工具,接下来我们编写一个 composeyaml 配置文件,配置文件信息内如如下:

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 工具,并部署 redisrabbitmq 容器的所有过程,有需要的小伙伴赶快动手实践哟 (^U^)ノ~YO

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
15天前
|
消息中间件 编解码 Docker
Docker部署RabbitMQ消息中间件
【7月更文挑战第4天】Docker部署RabbitMQ消息中间件
51 3
|
13天前
|
存储 Java Docker
使用Docker部署Java应用的最佳实践
使用Docker部署Java应用的最佳实践
|
5天前
|
消息中间件 PHP 数据安全/隐私保护
docker安装rabbitmq并配置hyperf使用
通过以上步骤,您可以实现在Docker容器中安装和配置RabbitMQ,并在PHP的Hyperf框架中进行集成和使用。这种方式为开发者提供了快速部署并实现消息队列解决方案的能力,同时维持了环境与生产环境的一致性,从而为开发高效的分布式应用程序提供了便利。
10 3
docker安装rabbitmq并配置hyperf使用
|
6天前
|
Docker Python 容器
容器化技术,特别是Docker,已经成为现代软件开发和部署的重要工具。
容器化技术,特别是Docker,已经成为现代软件开发和部署的重要工具。
|
6天前
|
Kubernetes 持续交付 开发者
微软Azure云上部署Docker容器的技术实践
【7月更文挑战第15天】Docker与Azure的集成,为开发者提供了一种快速、可扩展和可维护的应用部署方式。通过在Azure平台上部署Docker容器,开发者可以充分利用Azure丰富的云服务和强大的基础设施,实现应用的快速迭代和高效运行。未来,随着Docker和Azure的不断发展和集成,我们可以期待更加便捷和高效的容器化应用部署体验。
|
5天前
|
安全 网络协议 云计算
Docker容器网络配置详解
【7月更文挑战第16天】Docker的网络配置是实现容器间以及容器与外部网络通信的基础。通过选择合适的网络模式和配置选项,可以构建高效、安全、可扩展的Docker网络解决方案。
|
6天前
|
Kubernetes Cloud Native 持续交付
云原生架构的核心组成部分通常包括容器化(如Docker)、容器编排(如Kubernetes)、微服务架构、服务网格、持续集成/持续部署(CI/CD)、自动化运维(如Prometheus监控和Grafana可视化)等。
云原生架构的核心组成部分通常包括容器化(如Docker)、容器编排(如Kubernetes)、微服务架构、服务网格、持续集成/持续部署(CI/CD)、自动化运维(如Prometheus监控和Grafana可视化)等。
|
14天前
|
缓存 NoSQL Java
Redis Spring配置集群
【7月更文挑战第5天】
44 10
|
13天前
|
存储 Java Docker
使用Docker部署Java应用的最佳实践
使用Docker部署Java应用的最佳实践
|
13天前
|
存储 移动开发 程序员
Docker部署Dillinger个人文本编辑器
【7月更文挑战第6天】Docker部署Dillinger个人文本编辑器
26 1