未验证 提交 040af1e8 编写于 作者: W Wu Tao 提交者: GitHub

docker: add scripts for packing docker image & local docker cluster d… (#335)

上级 c5dbab27
......@@ -91,3 +91,4 @@ LOG
.history/
.shell-history
PACKAGE
#!/bin/bash
set -e
SCRIPT_DIR=$(dirname "${BASH_SOURCE[0]}")
ROOT=$(
cd "$(dirname "${SCRIPT_DIR}")" || exit 1
pwd
)
SERVER_PKG_NAME=$(cat "${ROOT}"/PACKAGE)
###
# configurable variables
IMAGE_NAME=pegasus:latest
###
echo "Building image ${IMAGE_NAME}"
cd "${ROOT}" || exit 1
if [[ -z ${SERVER_PKG_NAME} ]]; then
echo "SERVER_PKG_NAME is empty"
exit 1
fi
if [[ ! -f "${ROOT}"/${SERVER_PKG_NAME}.tar.gz ]]; then
echo "Failed to find package ${SERVER_PKG_NAME}.tar.gz in ${ROOT}"
exit 1
else
echo "Found package ${ROOT}/${SERVER_PKG_NAME}.tar.gz"
fi
cd "${ROOT}" || exit 1
mkdir -p ${IMAGE_NAME}
cp -f docker/dev/linux/entrypoint.sh ${IMAGE_NAME}/entrypoint.sh
cp -f docker/dev/linux/Dockerfile ${IMAGE_NAME}/Dockerfile
sed -i 's/@SERVER_PKG_NAME@/'"${SERVER_PKG_NAME}"'/' ${IMAGE_NAME}/Dockerfile
cp ${SERVER_PKG_NAME}.tar.gz ${IMAGE_NAME}
cd ${IMAGE_NAME} || exit 1
docker build --build-arg SERVER_PKG_NAME="${SERVER_PKG_NAME}" -t ${IMAGE_NAME} .
cd "${ROOT}" || exit 1
docker images
# clean up
rm -r ${IMAGE_NAME}
#!/usr/bin/env bash
cd "$( dirname "${BASH_SOURCE[0]}" )" || exit 1
source cluster_args.sh
if ! [[ -d "${DOCKER_DIR}" ]]; then
echo "Cleared ${DOCKER_DIR} already"
exit 0
fi
cd "${DOCKER_DIR}" || exit 1
pwd
docker-compose kill
docker-compose rm -f -v
cd "${ROOT}" || exit 1
./run.sh clear_zk
sudo rm -rf "${DOCKER_DIR}"
#!/usr/bin/env bash
# Configure the following variables to customize the docker cluster. #
export PARTITION_COUNT=8
export APP_NAME=temp
# The ip prefix for each nodes.
# Meta-x's ip address is 172.21.0.1{x}:34601.
# Replica-x's ip address is 172.21.0.2{x}:34801
export NODE_IP_PREFIX=172.21.0
export CLUSTER_NAME=onebox2
export IMAGE_NAME=pegasus:latest
# allow_non_idempotent_write = true
# for jepsen test this option must be enabled.
export IDEMPOTENT=true
# Config End #
##############
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
ROOT=$(dirname "${SCRIPT_DIR}")
LOCAL_IP=$("${ROOT}"/scripts/get_local_ip)
export SCRIPT_DIR
export ROOT
export LOCAL_IP
export DOCKER_DIR=${ROOT}/${CLUSTER_NAME}-docker # Where docker onebox resides.
export META_COUNT=2 # Number of meta instances.
export REPLICA_COUNT=5 # Number of replica instances.
FROM jacobmbr/ubuntu-jepsen:v0.1.0
# Usage:
#
# ./run.sh build -c
# ./run.sh pack_server
# mv pegasus-server-{YOUR_VERSION}.tar.gz docker/dev/jepsen/
# cd docker/dev/jepsen/
# docker build --build-arg SERVER_PKG_NAME=pegasus-server-{YOUR_VERSION} -t pegasus:latest .
# Install Jepsen dependencies
RUN sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/' /etc/apt/sources.list; \
rm /etc/apt/apt.conf.d/docker-clean && apt-get update -y
RUN apt-get install -y openssh-server \
curl faketime iproute2 iptables iputils-ping libzip4 \
logrotate man man-db net-tools ntpdate psmisc python rsyslog \
sudo unzip vim wget apt-transport-https \
&& apt-get remove -y --purge --auto-remove systemd
ARG SERVER_PKG_NAME
COPY ./$SERVER_PKG_NAME.tar.gz /
RUN tar xvf /$SERVER_PKG_NAME.tar.gz; \
mv $SERVER_PKG_NAME pegasus; \
rm $SERVER_PKG_NAME.tar.gz
COPY ./entrypoint.sh /
RUN chmod +x /entrypoint.sh
ENV LD_LIBRARY_PATH=/pegasus/bin
ENTRYPOINT ["/entrypoint.sh"]
#!/bin/bash
/usr/sbin/sshd -D &
/pegasus/bin/pegasus_server /pegasus/bin/config.ini -app_list "$1"
FROM ubuntu:18.04
# This is a docker image for any usage once you have a pre-built
# binary of Pegasus.
#
# Usage:
#
# ./run.sh build -c
# ./run.sh pack_server
# mv pegasus-server-{YOUR_VERSION}.tar.gz docker/dev/linux/
# cd docker/dev/linux/
# docker build --build-arg SERVER_PKG_NAME=pegasus-server-{YOUR_VERSION} -t pegasus:latest .
#
# Or simply run docker/build_docker.sh to build image named pegasus:latest.
#
ARG SERVER_PKG_NAME
# Install libunwind
RUN sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/' /etc/apt/sources.list; \
rm /etc/apt/apt.conf.d/docker-clean && apt-get update -y; \
apt-get install -y libunwind-dev libgssapi-krb5-2; \
rm -rf /var/lib/apt/lists/*
COPY ./$SERVER_PKG_NAME.tar.gz /
RUN tar xvf /$SERVER_PKG_NAME.tar.gz; \
mv $SERVER_PKG_NAME pegasus; \
rm $SERVER_PKG_NAME.tar.gz
COPY ./entrypoint.sh /
RUN chmod +x /entrypoint.sh
ENV LD_LIBRARY_PATH=/pegasus/bin
ENTRYPOINT ["/entrypoint.sh"]
#!/bin/bash
/pegasus/bin/pegasus_server /pegasus/bin/config.ini -app_list "$1"
version: '3.3'
networks:
frontend:
ipam:
config:
- subnet: @NODE_IP_PREFIX@.0/24
services:
meta1:
image: @IMAGE_NAME@
ports:
- "34601"
volumes:
- ./config.ini:/pegasus/bin/config.ini:ro
- ./meta1/data:/pegasus/data
command:
- meta
privileged: true
networks:
frontend:
ipv4_address: @NODE_IP_PREFIX@.11
restart: on-failure
meta2:
image: @IMAGE_NAME@
ports:
- "34601"
volumes:
- ./config.ini:/pegasus/bin/config.ini:ro
- ./meta2/data:/pegasus/data
command:
- meta
privileged: true
networks:
frontend:
ipv4_address: @NODE_IP_PREFIX@.12
restart: on-failure
replica1:
image: @IMAGE_NAME@
ports:
- "34801"
volumes:
- ./config.ini:/pegasus/bin/config.ini:ro
- ./replica1/data:/pegasus/data
- ./replica1/slog:/pegasus/slog
command:
- replica
privileged: true
networks:
frontend:
ipv4_address: @NODE_IP_PREFIX@.21
restart: on-failure
replica2:
image: @IMAGE_NAME@
ports:
- "34801"
volumes:
- ./config.ini:/pegasus/bin/config.ini:ro
- ./replica2/data:/pegasus/data
- ./replica2/slog:/pegasus/slog
command:
- replica
privileged: true
networks:
frontend:
ipv4_address: @NODE_IP_PREFIX@.22
restart: on-failure
replica3:
image: @IMAGE_NAME@
ports:
- "34801"
volumes:
- ./config.ini:/pegasus/bin/config.ini:ro
- ./replica3/data:/pegasus/data
- ./replica3/slog:/pegasus/slog
command:
- replica
privileged: true
networks:
frontend:
ipv4_address: @NODE_IP_PREFIX@.23
restart: on-failure
replica4:
image: @IMAGE_NAME@
ports:
- "34801"
volumes:
- ./config.ini:/pegasus/bin/config.ini:ro
- ./replica4/data:/pegasus/data
- ./replica4/slog:/pegasus/slog
command:
- replica
privileged: true
networks:
frontend:
ipv4_address: @NODE_IP_PREFIX@.24
restart: on-failure
replica5:
image: @IMAGE_NAME@
ports:
- "34801"
volumes:
- ./config.ini:/pegasus/bin/config.ini:ro
- ./replica5/data:/pegasus/data
- ./replica5/slog:/pegasus/slog
command:
- replica
privileged: true
networks:
frontend:
ipv4_address: @NODE_IP_PREFIX@.25
restart: on-failure
#!/bin/bash
cd "$( dirname "${BASH_SOURCE[0]}" )" || exit 1
source cluster_args.sh
function print_nodes()
{
echo ""
for i in $(seq "${META_COUNT}"); do
echo "META${i}: ${NODE_IP_PREFIX}.1$((i)):34601"
done
for i in $(seq "${REPLICA_COUNT}"); do
echo "REPLICA${i}: ${NODE_IP_PREFIX}.2$((i)):34801"
done
cd "${DOCKER_DIR}" || exit 1
echo ""
docker-compose ps
echo ""
cd - || exit 1
}
if ! [[ -x "$(command -v docker-compose)" ]]; then
echo 'ERROR: docker-compose is not installed.' >&2
echo 'See this document for installation manual:' >&2
echo ' https://docs.docker.com/compose/install' >&2
exit 1
fi
if [[ -d "${DOCKER_DIR}" ]]; then
echo "ERROR: ${DOCKER_DIR} already exists, please remove it first" >&2
print_nodes
exit 1
fi
mkdir -p "${DOCKER_DIR}"
cp -f "${ROOT}"/src/server/config.ini "${DOCKER_DIR}/config.ini"
sed -i 's/@META_PORT@/34601/' "${DOCKER_DIR}/config.ini"
sed -i 's/@REPLICA_PORT@/34801/' "${DOCKER_DIR}/config.ini"
sed -i 's/%{cluster.name}/'"${CLUSTER_NAME}"'/g' "${DOCKER_DIR}/config.ini"
sed -i 's/%{app.dir}/\/pegasus\/data/g' "${DOCKER_DIR}/config.ini"
sed -i 's/%{slog.dir}/\/pegasus\/slog/g' "${DOCKER_DIR}/config.ini"
sed -i 's/%{data.dirs}//g' "${DOCKER_DIR}/config.ini"
sed -i 's@%{home.dir}@'"/pegasus"'@g' "${DOCKER_DIR}/config.ini"
sed -i "s/allow_non_idempotent_write = false/allow_non_idempotent_write = ${IDEMPOTENT}/" "${DOCKER_DIR}/config.ini"
for i in $(seq "${META_COUNT}"); do
meta_port=34601
meta_ip=${NODE_IP_PREFIX}.1$((i))
if [ "${i}" -eq 1 ]; then
meta_list="${meta_ip}:$meta_port"
else
meta_list="$meta_list,${meta_ip}:$meta_port"
fi
done
sed -i 's/%{meta.server.list}/'"$meta_list"'/g' "${DOCKER_DIR}/config.ini"
sed -i 's/%{zk.server.list}/'"${LOCAL_IP}"':22181/g' "${DOCKER_DIR}/config.ini"
sed -i 's/app_name = .*$/app_name = '"$APP_NAME"'/' "${DOCKER_DIR}/config.ini"
sed -i 's/partition_count = .*$/partition_count = '"$PARTITION_COUNT"'/' "${DOCKER_DIR}/config.ini"
cp -f "${SCRIPT_DIR}"/docker-compose.yml "${DOCKER_DIR}"
sed -i 's/@NODE_IP_PREFIX@/'"${NODE_IP_PREFIX}"'/' "${DOCKER_DIR}"/docker-compose.yml
sed -i 's/@IMAGE_NAME@/'"${IMAGE_NAME}"'/' "${DOCKER_DIR}"/docker-compose.yml
echo "${DOCKER_DIR} is ready"
print_nodes
#!/usr/bin/env bash
cd "$( dirname "${BASH_SOURCE[0]}" )" || exit 1
source cluster_args.sh
cd "${ROOT}" || exit 1
./docker/clear_onebox.sh
./docker/prepare.sh
./run.sh start_zk
cd "${DOCKER_DIR}" || exit 1
pwd
docker-compose up -d
......@@ -42,10 +42,10 @@ else
fi
version=`grep "VERSION" src/include/pegasus/version.h | cut -d "\"" -f 2`
commit_id=`grep "GIT_COMMIT" src/include/pegasus/git_commit.h | cut -d "\"" -f 2`
platform=`lsb_release -a 2>/dev/null | grep "Distributor ID" | awk '{print $3}' | tr '[A-Z]' '[a-z]'`
echo "Packaging pegasus client $version ($commit_id) $platform $build_type ..."
glibc_ver=`ldd --version | grep ldd | grep -Eo "[0-9]+.[0-9]+$"`
echo "Packaging pegasus client $version ($commit_id) glibc-$glibc_ver $build_type ..."
pack_version=client-$version-${commit_id:0:7}-${platform}-${build_type}
pack_version=client-$version-${commit_id:0:7}-glibc${glibc_ver}-${build_type}
pack=pegasus-$pack_version
if [ -f ${pack}.tar.gz ]
......
......@@ -42,10 +42,10 @@ else
fi
version=`grep "VERSION" src/include/pegasus/version.h | cut -d "\"" -f 2`
commit_id=`grep "GIT_COMMIT" src/include/pegasus/git_commit.h | cut -d "\"" -f 2`
platform=`lsb_release -a 2>/dev/null | grep "Distributor ID" | awk '{print $3}' | tr '[A-Z]' '[a-z]'`
echo "Packaging pegasus server $version ($commit_id) $platform $build_type ..."
glibc_ver=`ldd --version | grep ldd | grep -Eo "[0-9]+.[0-9]+$"`
echo "Packaging pegasus server $version ($commit_id) glibc-$glibc_ver $build_type ..."
pack_version=server-$version-${commit_id:0:7}-${platform}-${build_type}
pack_version=server-$version-${commit_id:0:7}-glibc${glibc_ver}-${build_type}
pack=pegasus-$pack_version
if [ -f ${pack}.tar.gz ]
......@@ -119,4 +119,6 @@ if [ -f $pack_template ]; then
sed -i "/^source:/c source: \"$PEGASUS_ROOT\"" $pack_template
fi
echo ${pack} > PACKAGE
echo "Done"
......@@ -42,10 +42,10 @@ else
fi
version=`grep "VERSION" src/include/pegasus/version.h | cut -d "\"" -f 2`
commit_id=`grep "GIT_COMMIT" src/include/pegasus/git_commit.h | cut -d "\"" -f 2`
platform=`lsb_release -a 2>/dev/null | grep "Distributor ID" | awk '{print $3}' | tr '[A-Z]' '[a-z]'`
echo "Packaging pegasus tools $version ($commit_id) $platform $build_type ..."
glibc_ver=`ldd --version | grep ldd | grep -Eo "[0-9]+.[0-9]+$"`
echo "Packaging pegasus tools $version ($commit_id) glibc-$glibc_ver $build_type ..."
pack_version=tools-$version-${commit_id:0:7}-${platform}-${build_type}
pack_version=tools-$version-${commit_id:0:7}-glibc${glibc_ver}-${build_type}
pack=pegasus-$pack_version
if [ -f ${pack}.tar.gz ]
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册