大师架构系列-Docker Compose搭建开发环境

通过docker-compose可以很方便的组织相关服务,方便的进行服务构建和运行。

现在通过版本演变的方式,让我们看看如何搭建可配置型的环境。

新建docker-compose文件,第一个版本大概类型如下

version: "3" # 指定 docker-compose.yml 文件的写法格式
services: # 用来表示compose需要启动的服务

  redis: # 自定义服务名
    image: redis:6.0.8-alpine # 指定服务所使用的镜像
    container_name: env-redis # docker容器实例名称
    restart: always # 配置重启,表示如果服务启动不成功会一直尝试
    privileged: true # 特权模式,修改系统变量
    environment: # 环境变量定义
      - author=ucucs
    ports: # 端口映射,外部访问的端口 不同端口可以如此配置 6379:6380,单独写代表随机端口
      - "6379:6379"
    networks: # 网络网段定义
      - frontend
    volumes: # 加载本地目录下的配置文件到容器目标地址下
      - ./config/redis/redis.conf:/usr/local/etc/redis/redis.conf
      - ./data/redis/:/data/
      - ./log/redis/:/var/log/redis/
    command: # 表示以这个命令来启动服务
      /bin/sh -c "echo 65535 > /proc/sys/net/core/somaxconn
      && echo never > /sys/kernel/mm/transparent_hugepage/enabled
      && echo never > /sys/kernel/mm/transparent_hugepage/defrag
      && redis-server /usr/local/etc/redis/redis.conf --appendonly yes"
    deploy: # 需要用命令才生效 docker stack deploy --compose-file docker-compose.yml
      replicas: 1 # 部署副本数量
      update_config: # 升级回滚控制
        parallelism: 2 # 服务中多个容器同时更新数量
        delay: 10s # 设置每组容器更新之间的延迟时间
      restart_policy: # 设置何时重启容器
        condition: on-failure # 设置重启策略的条件

networks: # 网络定义
  frontend: # 网络命名
    driver: bridge # 定义网络模式,默认时可忽略 bridge(默认) host none service:[service name] container:[container name/id]

如何让服务进行启动和停止呢

# 服务启动
docker-compose up

# 如果需要让服务在后台运行
docker-compose up -d

# 服务停止
docker-compose stop

# 查看服务运行情况
docker-compose ps

# docker-compose的原理只是让我们以配置的方式组装docker运行命令

如果一个服务想变成可配置的,例如配置文件,密码,环境变量等,我们引入.env文件,作为配置。

# define env var default value.
AUTHOR=ucucs
VERSION=1.0.0

# Redis env
REDIS_IMAGE_TAG=6.0.8-alpine
REDIS_DATA=./data/redis/
REDIS_CNF=./config/redis/redis.conf
REDIS_LOG=./log/redis/
REDIS_PORT=6379
REDIS_CONTAINER_NAME=redis


#使用.env文件进行配置

#compose里格式如下,设置默认值 -后面加的是默认值,如果不设置默认值,则都可以是空
#环境变量${VARIABLE:-default}引用

现在我们来看看新版本的docker-compose.yml是什么样子

version: "3.8" # 指定 docker-compose.yml 文件的写法格式
services: # 用来表示compose需要启动的服务 本文件从.env文件读取变量

  redis: # 自定义服务名
    image: redis:${REDIS_IMAGE_TAG:-6.0.8-alpine} # 指定服务所使用的镜像
    container_name: ${REDIS_CONTAINER_NAME:-redis} # docker容器实例名称
    restart: always # 配置重启,表示如果服务启动不成功会一直尝试
    privileged: true # 特权模式,修改系统变量
    environment: # 环境变量定义
      - author=${AUTHOR:-ucucs}
    ports: # 端口映射,外部访问的端口 不同端口可以如此配置 6379:6380,单独写代表随机端口
      - ${REDIS_PORT:-6379}:6379
    networks: # 网络网段定义
      - frontend
    volumes: # 加载本地目录下的配置文件到容器目标地址下
      - ${REDIS_CNF:-./config/redis/redis.conf}:/usr/local/etc/redis/redis.conf
      - ${REDIS_DATA:-./data/redis/}:/data/
      - ${REDIS_LOG:-./log/redis/}:/var/log/redis/
    command: # 表示以这个命令来启动服务
      /bin/sh -c "echo 65535 > /proc/sys/net/core/somaxconn
      && echo never > /sys/kernel/mm/transparent_hugepage/enabled
      && echo never > /sys/kernel/mm/transparent_hugepage/defrag
      && redis-server /usr/local/etc/redis/redis.conf"

networks: # 网络定义
  frontend: # 网络命名
    driver: bridge # 定义网络模式,默认时可忽略 bridge(默认) host none service:[service name] container:[container name/id]

注意,command命令里包括对redis警告的修复

为了能够让redis外部访问,以及安全加固,需要对redis配置文件进行修改

#注释该语句,方便外部访问
#bind 127.0.0.1

# 关闭保护模式
protected-mode no

# 以配置文件启动,不需要守护进程
daemonize no

# 日志级别
loglevel notice

# 日志文件路径
logfile /var/log/redis/redis.log

# 访问授权密码设置
requirepass ucucs

# AOF持久化配置
appendonly yes

# 主要对以上几个关键字进行配置修改,具体配置文件可查看链接

为了查看配置的.env文件最终的效果,可以执行以下命令查看

# 执行命令
docker-compose config

# 效果
networks:
  frontend:
    driver: bridge
services:
  redis:
    command: /bin/sh -c "echo 65535 > /proc/sys/net/core/somaxconn && echo never >
      /sys/kernel/mm/transparent_hugepage/enabled && echo never > /sys/kernel/mm/transparent_hugepage/defrag
      && redis-server /usr/local/etc/redis/redis.conf"
    container_name: redis
    environment:
      author: ucucs
    image: redis:6.0.8-alpine
    networks:
      frontend: null
    ports:
    - published: 6379
      target: 6379
    privileged: true
    restart: always
    volumes:
    - /data/github/docker-nginx-mysql-springboot/docker-build/config/redis/redis.conf:/usr/local/etc/redis/redis.conf:rw
    - /data/github/docker-nginx-mysql-springboot/docker-build/data/redis:/data:rw
    - /data/github/docker-nginx-mysql-springboot/docker-build/log/redis:/var/log/redis:rw
version: '3.8'

 

项目完整地址

项目源代码

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值