常用服务部署

Redis 5.0

docker pull redis:5.0
 
docker run --name redis5.0 --restart always -d \
  -v /data/docker_data/redis:/data \
  -p 6379:6379 \
  redis:5.0 \
  redis-server --save 60 1 --loglevel warning

MySQL 8.0

docker pull mysql:8.0
 
docker run --name mysql8.0 --restart always -d \
  -v /data/docker_data/mysql:/var/lib/mysql \
  -p 3306:3306 \
  -p 33060:33060 \
  -e MYSQL_ROOT_PASSWORD=sensors_2024. \
  mysql:8.0

Kafka 3.7.0

docker pull bitnami/kafka:3.7.0
 
# 需将要挂载的宿主机目录属主和属组设置为"id"为 1001 的用户,此处添加"kafka"用户,并指定 uid、gid 为1001
useradd kafka -u 1001
 
# 新版kafka不需要zookeeper(2.8.0版本后就不依赖zk了)
docker run --name kafka3.7.0 --restart always -d --hostname kafka-server \
    -v /data/docker_data/kafka:/bitnami/kafka \
    -p 9092:9092 \
    -p 9093:9093 \
    -e KAFKA_CFG_NODE_ID=0 \
    -e KAFKA_CFG_PROCESS_ROLES=controller,broker \
    -e KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093 \
    -e KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT \
    -e KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=0@kafka-server:9093 \
    -e KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER \
    bitnami/kafka:3.7.0

经测试,Docker 服务连接 kafka 可能会报 unknow host,只需在 docker run 启动相关容器时添加如下参数即可(添加后可在 /etc/hosts 中查看到解析)

--add-host kafka-server:192.168.1.10

Nacos 2.3.1

docker pull nacos/nacos-server:v2.3.1
 
docker run --name nacos2.3.1 --restart always -d \
  -e MODE=standalone \
  -v /data/docker_data/nacos:/home/nacos/data \
  -p 8848:8848 \
  -p 9848:9848 \
  -p 9849:9849 \
  nacos/nacos-server:v2.3.1
 
# 此处将容器里的 /home/nacos/data 做持久化操作

Jenkins 2.440.2-lts

docker pull jenkins/jenkins:2.440.2-lts
 
# 修改宿主机所需数据持久化目录的属主和属组为容器中jenkins用户对应的属主和属组
chown -R 1000:1000 /data/docker_data/jenkins/jenkins_home
 
docker run --name jenkins2.440.2 --restart always -d \
  -p 8080:8080 \
  -p 50000:50000 \
  -v /data/docker_data/jenkins/jenkins_home:/var/jenkins_home \
  jenkins/jenkins:2.440.2-lts
 
# 容器启动后访问宿主机ip:8080即可打开jenkins的web页面
# 推荐安装默认的插件,还需安装插件:maven、gitee、ssh、docker

PG14

mkdir -p /opt/docker-container/postgres/{data,conf,logs}
chown 70:70 /opt/docker-container/postgres/data/
chown 70:70 /opt/docker-container/postgres/logs/

cat > /opt/docker-container/postgres/conf/postgresql.conf << EOF
listen_addresses = '*'
max_connections = 500
log_destination = 'stderr,csvlog'  # 同时输出到stderr和csv文件
logging_collector = on            # 启用日志收集器
log_directory = '/var/log/postgresql'  # 日志目录
log_filename = 'postgresql-%Y-%m-%d.log'  # 日志文件名格式
log_rotation_age = 1d             # 每天轮转日志
log_rotation_size = 100MB         # 每100MB轮转
log_min_messages = warning        # 记录warning及以上级别
log_min_error_statement = error   # 记录错误语句
log_min_duration_statement = 1000 # 记录执行超过1s的语句
log_statement = 'all'             # 记录所有SQL语句
EOF

cat > postgres-14.yaml << EOF
services:
  postgres:
    image: postgres:14.17-alpine
    container_name: postgres14
    environment:
      POSTGRES_USER: postgres           # 替换为你的用户名
      POSTGRES_PASSWORD: PG.14@17#Ap    # 替换为你的密码
      POSTGRES_DB: postgres             # 替换为默认数据库名
      # TZ: Asia/Shanghai                 # 设置容器时区(与宿主机同步)
      POSTGRESQL_LOGGING: "true"
      POSTGRESQL_LOG_STATEMENT: "all"  # 记录所有SQL语句
    volumes:
      - /opt/docker-container/postgres/conf/postgresql.conf:/etc/postgresql/postgresql.conf
      - /opt/docker-container/postgres/data:/var/lib/postgresql/data  # 数据持久化到本地
      - /opt/docker-container/postgres/logs:/var/log/postgresql       # 日志持久化到本地
      - /etc/localtime:/etc/localtime:ro
    command: postgres -c config_file=/etc/postgresql/postgresql.conf
    ports:
      - "5432:5432"                     # 暴露端口
    restart: unless-stopped             # 容器自动重启
EOF

docker compose -f postgres-14.yaml up -d

Redis7

mkdir -p /opt/docker-container/redis/{data,logs,conf}
chown -R 999:999 /opt/docker-container/redis/logs
cat > /opt/docker-container/redis/conf/redis.conf << EOF
# Redis 服务器绑定的 IP 地址,默认绑定 127.0.0.1,只允许本地连接
# 若要允许外部连接,可将其注释掉或改为 0.0.0.0
bind 0.0.0.0

# Redis 监听的端口号,默认为 6379
port 6379

# 是否以守护进程模式运行,yes 表示以守护进程模式运行,no 表示前台运行
daemonize no

# 日志文件路径,若设置为空字符串,则将日志输出到标准输出
logfile /var/log/redis/redis-server.log
#logfile ""
loglevel notice

# 数据库数量,默认有 16 个数据库,编号从 0 到 15
databases 16

# Redis 持久化方式,可选择 RDB(快照)或 AOF(追加式文件)
# 这里启用 RDB 持久化,当满足以下条件时会自动生成快照
save 900 1
save 300 10
save 60 10000

# RDB 文件的保存路径和文件名
dir /data
dbfilename dump.rdb

# 是否开启 AOF 持久化,yes 表示开启,no 表示关闭
appendonly yes

# AOF 文件的同步策略
# always 表示每次写入都同步到磁盘;everysec 表示每秒同步一次;no 表示由操作系统决定何时同步
# appendfsync everysec

# Redis 密码,若设置了密码,客户端连接时需要使用 AUTH 命令进行身份验证
requirepass R.7dis@952

# 最大客户端连接数,0 表示无限制
maxclients 10000

# 最大内存使用量,当达到该值时,Redis 会根据配置的淘汰策略删除一些键
# maxmemory <bytes>

# 内存淘汰策略,可选值有:
# volatile-lru:删除最近最少使用的过期键
# allkeys-lru:删除最近最少使用的键
# volatile-random:随机删除过期键
# allkeys-random:随机删除键
# volatile-ttl:删除即将过期的键
# noeviction:不删除任何键,当内存不足时返回错误
# maxmemory-policy noeviction
EOF

cat > redis-7.yaml << EOF
services:
  redis:
    image: redis:7-alpine
    container_name: redis7
    ports:
      - "6379:6379"
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /opt/docker-container/redis/data:/data
      - /opt/docker-container/redis/conf/redis.conf:/etc/redis/redis.conf
      - /opt/docker-container/redis/logs:/var/log/redis
    command: redis-server /etc/redis/redis.conf
    restart: unless-stopped
EOF

docker compose -f redis-7.yaml up -d

Etcd3

mkdir -p /opt/docker-container/etcd/{data,conf,logs}

cat > /opt/docker-container/etcd/conf/etcd.conf.yaml << EOF
name: 'etcd1'
data-dir: '/etcd-data'
wal-dir: ''
snapshot-count: 10000
heartbeat-interval: 100
election-timeout: 1000
quota-backend-bytes: 0
enable-pprof: false
metrics: 'basic'
logger: 'zap'
log-outputs: ['/var/log/etcd/etcd.log']
log-level: 'info'

max-request-bytes: 1572864
auto-compaction-mode: 'periodic'
auto-compaction-retention: '1h'
max-txn-ops: 128
listen-peer-urls: 'http://0.0.0.0:2380'
listen-client-urls: 'http://0.0.0.0:2379'
max-snapshots: 5
max-wals: 5
initial-advertise-peer-urls: 'http://0.0.0.0:2380'
advertise-client-urls: 'http://0.0.0.0:2379'
discovery: ''
discovery-fallback: 'proxy'
discovery-proxy: ''
discovery-srv: ''
initial-cluster: 'etcd1=http://0.0.0.0:2380'
initial-cluster-token: 'etcd-cluster'
initial-cluster-state: 'new'
strict-reconfig-check: false
enable-v2: false
cors: ''
EOF

cat > etcd-3.yaml << EOF
services:
  etcd:
    # image: quay.io/coreos/etcd:v3.5.21
    image: etcd:v3.5.21
    container_name: etcd3
    restart: unless-stopped
    environment:
      - ETCD_NAME=etcd1
    volumes:
      - /opt/docker-container/etcd/data:/etcd-data
      - /opt/docker-container/etcd/logs:/var/log/etcd
      - /opt/docker-container/etcd/conf/etcd.conf.yaml:/etc/etcd/etcd.conf.yaml
    command: /usr/local/bin/etcd --config-file /etc/etcd/etcd.conf.yaml
    ports:
      - "2379:2379"
      - "2380:2380"
EOF

​# etcdctl https://github.com/etcd-io/etcd/releases
etcdctl --endpoints=http://192.168.1.25:2379 endpoint status

# 添加user
etcdctl --endpoints=http://192.168.1.25:2379 user add root
E.t/[email protected]
# 添加role
etcdctl --endpoints=http://192.168.1.25:2379 role add root
# 授权
etcdctl --endpoints=http://192.168.1.25:2379 user grant-role root root
# 启用认证
etcdctl --endpoints=http://192.168.1.25:2379 auth enable

# 增、查
etcdctl --endpoints=http://192.168.1.25:2379 --user=root:E.t/[email protected] put foo bar
etcdctl --endpoints=http://192.168.1.25:2379 --user=root:E.t/[email protected] get foo

Last updated