docker-compose一键启动mysql+apollo-quick-start

1 篇文章 0 订阅
1 篇文章 0 订阅

docker-compose一键启动mysql+apollo-quick-start

前言

仅用于记录自己学习docker-compose,一键启动mysql57+apollo-quick-start


一、编写docker-compose.yml文件

version: '3'

services:
    #Mysql单机
    mysql3306_local:
      container_name: mysql3306_local
      image: mysql:5.7.41
      networks:
        game:
          ipv4_address: 172.22.1.8
      volumes:
        - "./mysql57/data:/var/lib/mysql"
        - "./mysql57/conf/my.cnf:/etc/my.cnf"
      restart: always
      user: root
      ports:
        - 3306:3306
      environment:
        MYSQL_ROOT_PASSWORD:  123456
        TZ: Asia/Shanghai
    # apollo 单机模式
    apollo-quick-start:
      container_name: apollo-quick-start
      image: nobodyiam/apollo-quick-start:1.9.2
      networks:
        game:
          ipv4_address: 172.22.1.9
      ports:
        - "8080:8080"
        - "8070:8070"
        - "8090:8090"
      depends_on:
        - mysql3306_local
      links:
        - mysql3306_local
      environment:
        APOLLO_CONFIG_DB_URL: jdbc:mysql://mysql3306_local:3306/ApolloConfigDB?characterEncoding=utf8
        APOLLO_CONFIG_DB_USERNAME: 'root'
        APOLLO_CONFIG_DB_PASSWORD: '123456'
        APOLLO_PORTAL_DB_URL: jdbc:mysql://mysql3306_local:3306/ApolloPortalDB?characterEncoding=utf8
        APOLLO_PORTAL_DB_USERNAME: 'root'
        APOLLO_PORTAL_DB_PASSWORD: '123456'
        TZ: Asia/Shanghai
        EUREKA_INSTANCE_IP_ADDRESS: '172.22.1.9'
      volumes:
        - "./apollo/quickstart/demo.sh:/apollo-quick-start/demo.sh"

networks:
  game:
    name: game
    ipam: 
      driver: default
      config:
        - subnet: 172.22.1.0/24                

二、自定义 apollo 启动文件 demo.sh 和 my.cnf

demo.sh 文件

#!/bin/bash

# apollo config db info
apollo_config_db_url="jdbc:mysql://mysql3306_local:3306/ApolloConfigDB?characterEncoding=utf8&serverTimezone=Asia/Shanghai"
apollo_config_db_username=root
apollo_config_db_password=123456

# apollo portal db info
apollo_portal_db_url="jdbc:mysql://mysql3306_local:3306/ApolloPortalDB?characterEncoding=utf8&serverTimezone=Asia/Shanghai"
apollo_portal_db_username=root
apollo_portal_db_password=123456

# =============== Please do not modify the following content =============== #

if [ "$(uname)" == "Darwin" ]; then
    windows="0"
elif [ "$(expr substr $(uname -s) 1 5)" == "Linux" ]; then
    windows="0"
elif [ "$(expr substr $(uname -s) 1 5)" == "MINGW" ]; then
    windows="1"
else
    windows="0"
fi

# meta server url
config_server_url=http://localhost:8080
admin_server_url=http://localhost:8090
eureka_service_url=$config_server_url/eureka/
portal_url=http://localhost:8070

# JAVA OPTS
BASE_JAVA_OPTS="-Denv=dev"
CLIENT_JAVA_OPTS="$BASE_JAVA_OPTS -Dapollo.meta=$config_server_url"
SERVER_JAVA_OPTS="$BASE_JAVA_OPTS -Dspring.profiles.active=github -Deureka.service.url=$eureka_service_url"
PORTAL_JAVA_OPTS="$BASE_JAVA_OPTS -Ddev_meta=$config_server_url -Dspring.profiles.active=github,auth -Deureka.client.enabled=false -Dhibernate.query.plan_cache_max_size=192"

# executable
JAR_FILE=apollo-all-in-one.jar
SERVICE_DIR=./service
SERVICE_JAR_NAME=apollo-service.jar
SERVICE_JAR=$SERVICE_DIR/$SERVICE_JAR_NAME
SERVICE_LOG=$SERVICE_DIR/apollo-service.log
PORTAL_DIR=./portal
PORTAL_JAR_NAME=apollo-portal.jar
PORTAL_JAR=$PORTAL_DIR/$PORTAL_JAR_NAME
PORTAL_LOG=$PORTAL_DIR/apollo-portal.log
CLIENT_DIR=./client
CLIENT_JAR=$CLIENT_DIR/apollo-demo.jar

# go to script directory
cd "${0%/*}"

function checkJava {
  if [[ -n "$JAVA_HOME" ]] && [[ -x "$JAVA_HOME/bin/java" ]];  then
      if [ "$windows" == "1" ]; then
        tmp_java_home=`cygpath -sw "$JAVA_HOME"`
        export JAVA_HOME=`cygpath -u "$tmp_java_home"`
        echo "Windows new JAVA_HOME is: $JAVA_HOME"
      fi
      _java="$JAVA_HOME/bin/java"
  elif type -p java > /dev/null; then
    _java=java
  else
      echo "Could not find java executable, please check PATH and JAVA_HOME variables."
      exit 1
  fi

  if [[ "$_java" ]]; then
      version=$("$_java" -version 2>&1 | awk -F '"' '/version/ {print $2}')
      if [[ "$version" < "1.8" ]]; then
          echo "Java version is $version, please make sure java 1.8+ is in the path"
          exit 1
      fi
  fi
}

function checkServerAlive {
  declare -i counter=0
  declare -i max_counter=24 # 24*5=120s
  declare -i total_time=0

  SERVER_URL="$1"

  until [[ (( counter -ge max_counter )) || "$(curl -X GET --silent --connect-timeout 1 --max-time 2 --head $SERVER_URL | grep "HTTP")" != "" ]];
  do
    printf "."
    counter+=1
    sleep 5
  done

  total_time=counter*5

  if [[ (( counter -ge max_counter )) ]];
  then
    return $total_time
  fi

  return 0
}

checkJava

if [ "$1" = "start" ] ; then
  echo "==== starting service ===="
  echo "Service logging file is $SERVICE_LOG"
  export APP_NAME="apollo-service"
  export JAVA_OPTS="$SERVER_JAVA_OPTS -Dlogging.file.name=./apollo-service.log -Dspring.datasource.url=$apollo_config_db_url -Dspring.datasource.username=$apollo_config_db_username -Dspring.datasource.password=$apollo_config_db_password"

  if [[ -f $SERVICE_JAR ]]; then
    rm -rf $SERVICE_JAR
  fi

  ln $JAR_FILE $SERVICE_JAR
  chmod a+x $SERVICE_JAR

  $SERVICE_JAR start --configservice --adminservice

  rc=$?
  if [[ $rc != 0 ]];
  then
    echo "Failed to start service, return code: $rc. Please check $SERVICE_LOG for more information."
    exit $rc;
  fi

  printf "Waiting for config service startup"
  checkServerAlive $config_server_url

  rc=$?
  if [[ $rc != 0 ]];
  then
    printf "\nConfig service failed to start in $rc seconds! Please check $SERVICE_LOG for more information.\n"
    exit 1;
  fi

  printf "\nConfig service started. You may visit $config_server_url for service status now!\n"

  printf "Waiting for admin service startup"
  checkServerAlive $admin_server_url

  rc=$?
  if [[ $rc != 0 ]];
  then
    printf "\nAdmin service failed to start in $rc seconds! Please check $SERVICE_LOG for more information.\n"
    exit 1;
  fi

  printf "\nAdmin service started\n"

  echo "==== starting portal ===="
  echo "Portal logging file is $PORTAL_LOG"
  export APP_NAME="apollo-portal"
  export JAVA_OPTS="$PORTAL_JAVA_OPTS -Dlogging.file.name=./apollo-portal.log -Dserver.port=8070 -Dspring.datasource.url=$apollo_portal_db_url -Dspring.datasource.username=$apollo_portal_db_username -Dspring.datasource.password=$apollo_portal_db_password"

  if [[ -f $PORTAL_JAR ]]; then
    rm -rf $PORTAL_JAR
  fi

  ln $JAR_FILE $PORTAL_JAR
  chmod a+x $PORTAL_JAR

  $PORTAL_JAR start --portal

  rc=$?
  if [[ $rc != 0 ]];
  then
    echo "Failed to start portal, return code: $rc. Please check $PORTAL_LOG for more information."
    exit $rc;
  fi

  printf "Waiting for portal startup"
  checkServerAlive $portal_url

  rc=$?
  if [[ $rc != 0 ]];
  then
    printf "\nPortal failed to start in $rc seconds! Please check $PORTAL_LOG for more information.\n"
    exit 1;
  fi

  printf "\nPortal started. You can visit $portal_url now!\n"

  tail -f /dev/null
elif [ "$1" = "client" ] ; then
  if [ "$windows" == "1" ]; then
    java -classpath "$CLIENT_DIR;$CLIENT_JAR" $CLIENT_JAVA_OPTS com.ctrip.framework.apollo.demo.api.SimpleApolloConfigDemo
  else
    java -classpath $CLIENT_DIR:$CLIENT_JAR $CLIENT_JAVA_OPTS com.ctrip.framework.apollo.demo.api.SimpleApolloConfigDemo
  fi

elif [ "$1" = "stop" ] ; then
  echo "==== stopping portal ===="
  export APP_NAME="apollo-portal"
  cd $PORTAL_DIR
  ./$PORTAL_JAR_NAME stop

  cd ..

  echo "==== stopping service ===="
  export APP_NAME="apollo-service"
  cd $SERVICE_DIR
  ./$SERVICE_JAR_NAME stop

else
  echo "Usage: demo.sh ( commands ... )"
  echo "commands:"
  echo "  start         start services and portal"
  echo "  client        start client demo program"
  echo "  stop          stop services and portal"
  exit 1
fi

my.cnf 文件

[mysqld]
user=mysql
# basedir=/usr/local/mysql
# datadir=/usr/local/mysql/data
character-set-server=utf8

[client]
port=3306
socket=/tmp/mysql.sock

[mysqld]
port = 3306
user = mysql
# basedir = /usr/local/mysql
# datadir = /usr/local/mysql/data
port=3306
server-id = 1
socket=/tmp/mysql.sock
character-set-server = utf8
# log-error = /var/log/mysql/error.log
# pid-file = /usr/local/mysql/data/mysql.pid
general_log = 1
skip-name-resolve
#skip-networking
back_log = 300
max_connections = 20000
max_connect_errors = 6000
open_files_limit = 65535
table_open_cache = 128 
max_allowed_packet = 512M
binlog_cache_size = 1M
max_heap_table_size = 16M
tmp_table_size = 16M
read_buffer_size = 2M
read_rnd_buffer_size = 8M
sort_buffer_size = 8M
join_buffer_size = 28M
key_buffer_size = 4M
thread_cache_size = 8
query_cache_type = 1
query_cache_size = 8M
query_cache_limit = 2M
ft_min_word_len = 4
log_bin = mysql-bin
binlog_format = mixed
expire_logs_days = 30
performance_schema = 0
explicit_defaults_for_timestamp
lower_case_table_names = 1
# myisam_sort_buffer_size = 8M
# myisam_repair_threads = 1
interactive_timeout = 28800
wait_timeout = 28800
symbolic-links=0
sql_mode=NO_ENGINE_SUBSTITUTION,NO_AUTO_CREATE_USER,STRICT_TRANS_TABLES

[mysqldump]
quick
max_allowed_packet = 512M

[myisamchk]
key_buffer_size = 8M
sort_buffer_size = 8M
read_buffer = 4M
write_buffer = 4M

三、注意事项

demo.sh需要在yml文件同级目录下创建 /apollo/quickstart/demo.sh

mysql同样需要创建目录

      volumes:
        - "./mysql57/data:/var/lib/mysql"
        - "./mysql57/conf/my.cnf:/etc/my.cnf"

根据配置,需要创建 mysql57/data 文件夹 和 mysql57/conf/my.cnf 文件


四、启动

在yml文件同级目录执行

	docker-compose up -d

如apollo启动失败,并提示数据库不存在需要自行去下载源码,并提取sql文件执行创建apollo数据库


总结

仅用于自己学习docker-compose,如有问题请留言

  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值