系统容器化改造-1

背景

公司多套基础环境需要进行部署,服务需要容器化,需要给开发人员提供基础镜像,后续将所有服务改造为容器化,方便资源管理、快捷部署、快速扩容等

Docker镜像制作

基础镜像制作

因为公司使用的均为Centos操作系统,故基础镜像选为最小化安装的Centos,需要为其他团队Base镜像,让其他团队进行其他的拓展

基础Centos镜像制作

目标:提供一个基础镜像(最小化安装),参考开源的Centos镜像即可(建议删除不用的配置),安装sshd服务,方便后续开发人员进行问题排查
Dockerfile

FROM system/base/centos7:v2023031302

MAINTAINER xxx xxx@xxx.com

USER root
#
ADD supervisord.conf /etc/supervisord.conf
ADD sshd.ini /etc/supervisord.d/sshd.ini


#
EXPOSE 2022

#
CMD ["/usr/bin/supervisord","-c","/etc/supervisord.conf"]

sshd.ini

[program:sshd]
command=/usr/sbin/sshd -D   ; the program (relative uses PATH, can take args)
process_name=%(program_name)s ; process_name expr (default %(program_name)s)
numprocs=1                    ; number of processes copies to start (def 1)
autostart=true                ; start at supervisord start (default: true)
autorestart=true              ; retstart at unexpected quit (default: true)

Nginx镜像制作

FROM system/base/centos7:v2023031303

MAINTAINER xxx xxx@xxx.com

# 定义服务启动用户
USER root

# YUM 安装依赖
RUN yum -y install psmisc   gcc gcc-c++ glibc glibc-devel pcre pcre-devel openssl  openssl-devel systemd-devel zlib-devel bash-completion  automake libxml2  libxml2-devel libxslt libxslt-devel perl perl-ExtUtils-Embed && yum clean all

# 安装服务
ADD packages/nginx-src /usr/local/nginx-src

WORKDIR /usr/local/nginx-src

RUN useradd nginx && ./configure  --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module  --with-http_realip_module --with-http_stub_status_module  --with-http_gzip_static_module  --with-pcre  --with-stream  --with-stream_ssl_module --with-stream_realip_module && make && make install && mkdir -p /usr/local/nginx/conf/conf.d  && mkdir -p /var/log/nginx/

# 添加服务配置文件
ADD nginx.conf /usr/local/nginx/conf/nginx.conf

#添加区域配置文件
ADD ops-project.conf /usr/local/nginx/conf/conf.d/ops-project.conf

# 添加服务启动文件
# ADD supervisord.conf /etc/supervisord.conf
ADD nginx.ini /etc/supervisord.d/nginx.ini

# 工作目录
WORKDIR /usr/local/nginx

# 添加暴露端口
EXPOSE 80

# 容器前台进程
CMD ["/usr/bin/supervisord","-c","/etc/supervisord.conf"]

JDK镜像制作

FROM system/base/centos7:v2023031303

MAINTAINER xxx xxx@xxx.com

# 定义服务启动用户
USER root

# 安装服务
ADD packages/jdk /usr/local/jdk

WORKDIR /root/

#添加区域配置文件
RUN echo "export JAVA_HOME=/usr/local/jdk" >> /etc/profile && echo "export PATH=\$JAVA_HOME/bin:$PATH" >> /etc/profile && echo "export CLASSPATH=.:\$JAVA_HOME/lib/dt.jar:\$JAVA_HOME/lib/tools.jar" >> /etc/profile 
RUN source /etc/profile && ln -s /usr/local/jdk/bin/java /usr/bin/

# 容器前台进程
CMD ["/usr/bin/supervisord","-c","/etc/supervisord.conf"]

zookeeper镜像制作

FROM system/base/jdk1.8:v2023031301

MAINTAINER xxx xxx@xxx.com

# 定义服务启动用户
USER root

# YUM 安装依赖
# NULL

# 安装服务
ADD packages/zookeeper /usr/local/zookeeper

# 添加服务启动文件
ADD start.sh /usr/local/zookeeper/bin/start.sh
ADD zookeeper.ini /etc/supervisord.d/zookeeper.ini

RUN chmod a+x /usr/local/zookeeper/bin/start.sh
# 工作目录
WORKDIR /usr/local/zookeeper

# 添加暴露端口
EXPOSE 2181
EXPOSE 2888
EXPOSE 3888

# 容器前台进程
CMD ["/usr/bin/supervisord","-c","/etc/supervisord.conf"]

/usr/local/zookeeper/bin/start.sh #配置初始化脚本,脚本内容如下,此为容器部署,k8s部署需要进行脚本内容修改

#!/usr/bin/env bash
ZK_LOG_LEVEL=${ZK_LOG_LEVEL:-"INFO"} #定义日志级别,在 log4j.properties
ZK_DATA_DIR=${ZK_DATA_DIR:-"/tmp/data_dir"}      #数据路径
ZK_DATA_LOG_DIR=${ZK_DATA_LOG_DIR:-"/tmp/log_dir"}   #日志路径
ZK_LOG_DIR=${ZK_LOG_DIR:-"/tmp/logs"}  #服务日志路径
ZK_CONF_DIR=${ZK_CONF_DIR:-"/usr/local/zookeeper/conf"} # 配置文件路径
ZK_BIN_DIR=${ZK_BIN_DIR:-"/usr/local/zookeeper/bin"} # 配置文件路径
ZK_CLIENT_PORT=${ZK_CLIENT_PORT:-2181} #Client Port
ZK_SERVER_PORT=${ZK_SERVER_PORT:-2888} #Server Port
ZK_ELECTION_PORT=${ZK_ELECTION_PORT:-3888} # ELECTION_PORT
ZK_TICK_TIME=${ZK_TICK_TIME:-2000} 
ZK_INIT_LIMIT=${ZK_INIT_LIMIT:-10} 
ZK_SYNC_LIMIT=${ZK_SYNC_LIMIT:-5} 
ZK_HEAP_SIZE=${ZK_HEAP_SIZE:-2G} 
ZK_MAX_CLIENT_CNXNS=${ZK_MAX_CLIENT_CNXNS:-1000}  #change 
ZK_MIN_SESSION_TIMEOUT=${ZK_MIN_SESSION_TIMEOUT:- $((ZK_TICK_TIME*2))}
ZK_MAX_SESSION_TIMEOUT=${ZK_MAX_SESSION_TIMEOUT:- $((ZK_TICK_TIME*20))}
ZK_SNAP_RETAIN_COUNT=${ZK_SNAP_RETAIN_COUNT:-3}
ZK_PURGE_INTERVAL=${ZK_PURGE_INTERVAL:-0}
ID_FILE="$ZK_DATA_DIR/myid"
ZK_CONFIG_FILE="$ZK_CONF_DIR/zoo.cfg"
LOGGER_PROPS_FILE="$ZK_CONF_DIR/log4j.properties"
MY_ID=${MY_ID:-1} #单容器必须配置
ZK_REPLICAS=${ZK_REPLICAS:-3} #默认是三个
##定义zk host
ZK_SERVER1=${ZK_SERVER1:-"zookeeper-zookeeper-1"}
ZK_SERVER2=${ZK_SERVER2:-"zookeeper-zookeeper-2"}
ZK_SERVER3=${ZK_SERVER3:-"zookeeper-zookeeper-3"}
SERVER_TYPE=

# JAVA_ENV_FILE="$ZK_CONF_DIR/java.env"
HOST=`hostname -s`
DOMAIN=`hostname -d`

## k8s 里面添加短域名
function print_servers() {
    for (( i=1; i<=$ZK_REPLICAS; i++ ))
    do
        ## k8s 变量
        # echo "server.$i=$NAME-$((i-1)).$DOMAIN:$ZK_SERVER_PORT:$ZK_ELECTION_PORT"
        echo "server.$i=zookeeper-zookeeper-$i:$ZK_SERVER_PORT:$ZK_ELECTION_PORT"
    done
}

function validate_env() {
    echo "Validating environment"

    if [ -z $ZK_REPLICAS ]; then
         echo "ZK_REPLICAS is a mandatory environment variable"
         exit 1
     fi

    # if [[ $HOST =~ (.*)-([0-9]+)$ ]]; then
    #     NAME=${BASH_REMATCH[1]}
    #     ORD=${BASH_REMATCH[3]}
    # else
    #     echo "Failed to extract ordinal from hostname $HOST"
    #     exit 1
    # fi


    # MY_ID=$((ORD+1))
    MY_ID=$MY_ID
    echo "ZK_REPLICAS=$ZK_REPLICAS"

    echo "MY_ID=$MY_ID"
    echo "ZK_LOG_LEVEL=$ZK_LOG_LEVEL"
    echo "ZK_DATA_DIR=$ZK_DATA_DIR"
    echo "ZK_DATA_LOG_DIR=$ZK_DATA_LOG_DIR"
    echo "ZK_LOG_DIR=$ZK_LOG_DIR"
    echo "ZK_CLIENT_PORT=$ZK_CLIENT_PORT"
    echo "ZK_SERVER_PORT=$ZK_SERVER_PORT"
    echo "ZK_ELECTION_PORT=$ZK_ELECTION_PORT"
    echo "ZK_TICK_TIME=$ZK_TICK_TIME"
    echo "ZK_INIT_LIMIT=$ZK_INIT_LIMIT"
    echo "ZK_SYNC_LIMIT=$ZK_SYNC_LIMIT"
    echo "ZK_MAX_CLIENT_CNXNS=$ZK_MAX_CLIENT_CNXNS"
    echo "ZK_MIN_SESSION_TIMEOUT=$ZK_MIN_SESSION_TIMEOUT"
    echo "ZK_MAX_SESSION_TIMEOUT=$ZK_MAX_SESSION_TIMEOUT"
    echo "ZK_HEAP_SIZE=$ZK_HEAP_SIZE"
    echo "ZK_SNAP_RETAIN_COUNT=$ZK_SNAP_RETAIN_COUNT"
    echo "ZK_PURGE_INTERVAL=$ZK_PURGE_INTERVAL"
    # echo "ENSEMBLE"
    print_servers
    echo "Environment validation successful"
}

function create_config() {
    rm -f $ZK_CONFIG_FILE
    echo "Creating ZooKeeper configuration"
    echo "#This file was autogenerated by k8szk DO NOT EDIT" >> $ZK_CONFIG_FILE
    echo "clientPort=$ZK_CLIENT_PORT" >> $ZK_CONFIG_FILE
    echo "dataDir=$ZK_DATA_DIR" >> $ZK_CONFIG_FILE
    echo "dataLogDir=$ZK_DATA_LOG_DIR" >> $ZK_CONFIG_FILE
    echo "tickTime=$ZK_TICK_TIME" >> $ZK_CONFIG_FILE
    echo "initLimit=$ZK_INIT_LIMIT" >> $ZK_CONFIG_FILE
    echo "syncLimit=$ZK_SYNC_LIMIT" >> $ZK_CONFIG_FILE
    echo "maxClientCnxns=$ZK_MAX_CLIENT_CNXNS" >> $ZK_CONFIG_FILE
    echo "minSessionTimeout=$ZK_MIN_SESSION_TIMEOUT" >> $ZK_CONFIG_FILE
    echo "maxSessionTimeout=$ZK_MAX_SESSION_TIMEOUT" >> $ZK_CONFIG_FILE
    echo "autopurge.snapRetainCount=$ZK_SNAP_RETAIN_COUNT" >> $ZK_CONFIG_FILE
    echo "autopurge.purgeInterval=$ZK_PURGE_INTERVAL" >> $ZK_CONFIG_FILE
    echo "4lw.commands.whitelist=*" >> $ZK_CONFIG_FILE
    echo "quorumListenOnAllIPs=true" >> $ZK_CONFIG_FILE

    if [ $ZK_REPLICAS -gt 1 ]; then
        print_servers >> $ZK_CONFIG_FILE
    fi

    echo "Wrote ZooKeeper configuration file to $ZK_CONFIG_FILE"
}

function create_data_dirs() {
    echo "Creating ZooKeeper data directories and setting permissions"

    if [ ! -d $ZK_DATA_DIR  ]; then
        mkdir -p $ZK_DATA_DIR
        # chown -R $ZK_USER:$ZK_USER $ZK_DATA_DIR
    fi

    if [ ! -d $ZK_DATA_LOG_DIR  ]; then
        mkdir -p $ZK_DATA_LOG_DIR
        # chown -R $ZK_USER:$ZK_USER $ZK_DATA_LOG_DIR
    fi

    if [ ! -d $ZK_LOG_DIR  ]; then
        mkdir -p $ZK_LOG_DIR
        # chown -R $ZK_USER:$ZK_USER $ZK_LOG_DIR


    fi

    if [ ! -f $ID_FILE ]; then
        echo $MY_ID >> $ID_FILE
    fi

    echo "Created ZooKeeper data directories"
}

function create_log_props () {
    rm -f $LOGGER_PROPS_FILE
    echo "Creating ZooKeeper log4j configuration"
    echo "zookeeper.root.logger=CONSOLE" >> $LOGGER_PROPS_FILE
    echo "zookeeper.console.threshold="$ZK_LOG_LEVEL >> $LOGGER_PROPS_FILE
    echo "log4j.rootLogger=\${zookeeper.root.logger}" >> $LOGGER_PROPS_FILE
    echo "log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender" >> $LOGGER_PROPS_FILE
    echo "log4j.appender.CONSOLE.Threshold=\${zookeeper.console.threshold}" >> $LOGGER_PROPS_FILE
    echo "log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout" >> $LOGGER_PROPS_FILE
    echo "log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} [myid:%X{myid}] - %-5p [%t:%C{1}@%L] - %m%n" >> $LOGGER_PROPS_FILE
    echo "Wrote log4j configuration to $LOGGER_PROPS_FILE"
}


function start_zk_server () {
    bash $ZK_BIN_DIR/zkServer.sh start
}

validate_env && create_config && create_log_props && create_data_dirs && start_zk_server

镜像构建命令

docker build -t system/base/zookeeper-3.4.8-ondocker:v2023031301 .

在这里插入图片描述

k8s环境部署

  • k8s环境部署
  • nginx、mysql、zk、tomcat、mq、nacos、apollo 、redis部署
  • ci、cd对接
  • 监控对接
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

高Sir_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值